@burdenoff/mcp-libs 2026.720.2 → 2026.731.1

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/core/errors.ts","../../../src/core/tool-name.ts","../../../src/core/result.ts","../../../src/modules/labsofscience/operations.ts","../../../src/modules/labsofscience/tools/shared.ts","../../../src/modules/labsofscience/tools/projects.ts","../../../src/modules/labsofscience/tools/experiments.ts","../../../src/modules/labsofscience/tools/runs.ts","../../../src/modules/labsofscience/tools/protocols.ts","../../../src/modules/labsofscience/tools/datasets.ts","../../../src/modules/labsofscience/tools/pipelines.ts","../../../src/modules/labsofscience/tools/instruments.ts","../../../src/modules/labsofscience/tools/inventory.ts","../../../src/modules/labsofscience/tools/notebook.ts","../../../src/modules/labsofscience/tools/health.ts","../../../src/modules/labsofscience/resources.ts","../../../src/modules/labsofscience/prompts.ts","../../../src/modules/labsofscience/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 Labsofscience MCP module.\n *\n * Labsofscience is the science & discovery platform — a research LIMS / ELN\n * (projects, experiments, runs, protocols, datasets, analysis pipelines,\n * instruments, inventory, notebook). Backend subgraph:\n * ~/products/labsofscience/wspace-labsofscience-svc/ (Hive service name\n * `labsofscience`).\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 — Labsofscience inputs do NOT carry a workspaceId.\n *\n * Every Query/Mutation root field is named by its REAL backend name (all are\n * consistently `lab*`-prefixed). List queries return `{ items, pageInfo }`\n * connections and take a `PaginationInput { limit, offset, cursor }`; two list\n * queries (labListInstruments, labListPipelines) return plain arrays.\n *\n * Uses template-string interpolation (not gql tagged fragments) to match the\n * canonical vibecontrols/kadaikodi modules' operations files.\n */\n\n// ---------------------------------------------------------------------------\n// Field fragments\n// ---------------------------------------------------------------------------\n\nexport const PROJECT_FIELDS = `\n id code name description field status visibility principalInvestigatorId\n startDate endDate tags workspaceId createdAt updatedAt\n`;\n\nexport const EXPERIMENT_FIELDS = `\n id title description hypothesis status projectId protocolId leadResearcherId\n variables tags workspaceId createdAt updatedAt\n`;\n\nexport const RUN_FIELDS = `\n id experimentId runNumber status parameters observations notes performedById\n startedAt completedAt workspaceId createdAt updatedAt\n`;\n\nexport const PROTOCOL_STEP_FIELDS = `\n id protocolId ordinal instruction kind durationMinutes isCritical\n workspaceId createdAt updatedAt\n`;\n\nexport const PROTOCOL_FIELDS = `\n id name summary status version estimatedMinutes materials safetyNotes\n authorId publishedAt tags workspaceId createdAt updatedAt\n`;\n\nexport const DATASET_VERSION_FIELDS = `\n id datasetId version sizeBytes rowCount checksum changeNote\n file { id } workspaceId createdAt updatedAt\n`;\n\nexport const DATASET_FIELDS = `\n id name description kind status latestVersion experimentId projectId\n tags workspaceId createdAt updatedAt\n`;\n\nexport const PIPELINE_FIELDS = `\n id name description engine definition version isActive projectId tags\n workspaceId createdAt updatedAt\n`;\n\nexport const PIPELINE_RUN_FIELDS = `\n id pipelineId datasetId datasetVersionId outputDatasetId status parameters\n log triggeredById startedAt finishedAt workspaceId createdAt updatedAt\n`;\n\nexport const BOOKING_FIELDS = `\n id instrumentId experimentId bookedById startTime endTime status purpose\n workspaceId createdAt updatedAt\n`;\n\nexport const INSTRUMENT_FIELDS = `\n id name model location status requiresApproval custodianId tags\n workspaceId createdAt updatedAt\n`;\n\nexport const INVENTORY_FIELDS = `\n id name category status quantity unit reorderLevel location vendor\n catalogNumber lotNumber expiresAt sds { id } tags workspaceId\n createdAt updatedAt\n`;\n\nexport const NOTEBOOK_FIELDS = `\n id title body status projectId experimentId runId authorId signedById\n signedAt witnessedById witnessedAt files { id } tags workspaceId\n createdAt updatedAt\n`;\n\nconst PAGE_INFO = `pageInfo { cursor hasMore }`;\n\n// ---------------------------------------------------------------------------\n// Projects\n// ---------------------------------------------------------------------------\n\nexport const GET_PROJECT = `\n query LabsofscienceGetProject($id: ID!) {\n labProject(id: $id) {\n ${PROJECT_FIELDS}\n experiments { id title status }\n }\n }\n`;\n\nexport const LIST_PROJECTS = `\n query LabsofscienceListProjects($status: LabProjectStatus, $pagination: PaginationInput) {\n labListProjects(status: $status, pagination: $pagination) {\n items { ${PROJECT_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_PROJECT = `\n mutation LabsofscienceCreateProject($input: LabCreateProjectInput!) {\n labCreateProject(input: $input) {\n ${PROJECT_FIELDS}\n }\n }\n`;\n\nexport const UPDATE_PROJECT = `\n mutation LabsofscienceUpdateProject($id: ID!, $input: LabUpdateProjectInput!) {\n labUpdateProject(id: $id, input: $input) {\n ${PROJECT_FIELDS}\n }\n }\n`;\n\nexport const ARCHIVE_PROJECT = `\n mutation LabsofscienceArchiveProject($id: ID!) {\n labArchiveProject(id: $id)\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Experiments\n// ---------------------------------------------------------------------------\n\nexport const GET_EXPERIMENT = `\n query LabsofscienceGetExperiment($id: ID!) {\n labExperiment(id: $id) {\n ${EXPERIMENT_FIELDS}\n project { id name }\n runs { id runNumber status }\n }\n }\n`;\n\nexport const LIST_EXPERIMENTS = `\n query LabsofscienceListExperiments(\n $projectId: ID\n $status: LabExperimentStatus\n $pagination: PaginationInput\n ) {\n labListExperiments(projectId: $projectId, status: $status, pagination: $pagination) {\n items { ${EXPERIMENT_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_EXPERIMENT = `\n mutation LabsofscienceCreateExperiment($input: LabCreateExperimentInput!) {\n labCreateExperiment(input: $input) {\n ${EXPERIMENT_FIELDS}\n }\n }\n`;\n\nexport const UPDATE_EXPERIMENT = `\n mutation LabsofscienceUpdateExperiment($id: ID!, $input: LabUpdateExperimentInput!) {\n labUpdateExperiment(id: $id, input: $input) {\n ${EXPERIMENT_FIELDS}\n }\n }\n`;\n\nexport const TRANSITION_EXPERIMENT = `\n mutation LabsofscienceTransitionExperiment($id: ID!, $status: LabExperimentStatus!) {\n labTransitionExperiment(id: $id, status: $status) {\n ${EXPERIMENT_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Experiment runs\n// ---------------------------------------------------------------------------\n\nexport const LIST_RUNS = `\n query LabsofscienceListRuns(\n $experimentId: ID\n $status: LabRunStatus\n $pagination: PaginationInput\n ) {\n labListRuns(experimentId: $experimentId, status: $status, pagination: $pagination) {\n items { ${RUN_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const START_RUN = `\n mutation LabsofscienceStartRun($input: LabCreateRunInput!) {\n labStartRun(input: $input) {\n ${RUN_FIELDS}\n }\n }\n`;\n\nexport const COMPLETE_RUN = `\n mutation LabsofscienceCompleteRun(\n $id: ID!\n $status: LabRunStatus!\n $input: LabRecordRunResultsInput\n ) {\n labCompleteRun(id: $id, status: $status, input: $input) {\n ${RUN_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Protocols (+ steps)\n// ---------------------------------------------------------------------------\n\nexport const GET_PROTOCOL = `\n query LabsofscienceGetProtocol($id: ID!) {\n labProtocol(id: $id) {\n ${PROTOCOL_FIELDS}\n steps { ${PROTOCOL_STEP_FIELDS} }\n }\n }\n`;\n\nexport const LIST_PROTOCOLS = `\n query LabsofscienceListProtocols($status: LabProtocolStatus, $pagination: PaginationInput) {\n labListProtocols(status: $status, pagination: $pagination) {\n items { ${PROTOCOL_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_PROTOCOL = `\n mutation LabsofscienceCreateProtocol($input: LabCreateProtocolInput!) {\n labCreateProtocol(input: $input) {\n ${PROTOCOL_FIELDS}\n }\n }\n`;\n\nexport const UPDATE_PROTOCOL = `\n mutation LabsofscienceUpdateProtocol($id: ID!, $input: LabUpdateProtocolInput!) {\n labUpdateProtocol(id: $id, input: $input) {\n ${PROTOCOL_FIELDS}\n }\n }\n`;\n\nexport const ADD_PROTOCOL_STEP = `\n mutation LabsofscienceAddProtocolStep($input: LabAddProtocolStepInput!) {\n labAddProtocolStep(input: $input) {\n ${PROTOCOL_STEP_FIELDS}\n }\n }\n`;\n\nexport const PUBLISH_PROTOCOL = `\n mutation LabsofsciencePublishProtocol($id: ID!) {\n labPublishProtocol(id: $id) {\n ${PROTOCOL_FIELDS}\n steps { ${PROTOCOL_STEP_FIELDS} }\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Datasets (+ versions)\n// ---------------------------------------------------------------------------\n\nexport const GET_DATASET = `\n query LabsofscienceGetDataset($id: ID!) {\n labDataset(id: $id) {\n ${DATASET_FIELDS}\n versions { ${DATASET_VERSION_FIELDS} }\n }\n }\n`;\n\nexport const LIST_DATASETS = `\n query LabsofscienceListDatasets(\n $kind: LabDatasetKind\n $status: LabDatasetStatus\n $pagination: PaginationInput\n ) {\n labListDatasets(kind: $kind, status: $status, pagination: $pagination) {\n items { ${DATASET_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_DATASET = `\n mutation LabsofscienceCreateDataset($input: LabCreateDatasetInput!) {\n labCreateDataset(input: $input) {\n ${DATASET_FIELDS}\n }\n }\n`;\n\nexport const ADD_DATASET_VERSION = `\n mutation LabsofscienceAddDatasetVersion($input: LabAddDatasetVersionInput!) {\n labAddDatasetVersion(input: $input) {\n ${DATASET_VERSION_FIELDS}\n }\n }\n`;\n\nexport const ARCHIVE_DATASET = `\n mutation LabsofscienceArchiveDataset($id: ID!) {\n labArchiveDataset(id: $id)\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Analysis pipelines (+ runs)\n// ---------------------------------------------------------------------------\n\nexport const LIST_PIPELINES = `\n query LabsofscienceListPipelines {\n labListPipelines {\n ${PIPELINE_FIELDS}\n }\n }\n`;\n\nexport const CREATE_PIPELINE = `\n mutation LabsofscienceCreatePipeline($input: LabCreatePipelineInput!) {\n labCreatePipeline(input: $input) {\n ${PIPELINE_FIELDS}\n }\n }\n`;\n\nexport const LIST_PIPELINE_RUNS = `\n query LabsofscienceListPipelineRuns(\n $pipelineId: ID\n $status: LabPipelineRunStatus\n $pagination: PaginationInput\n ) {\n labListPipelineRuns(pipelineId: $pipelineId, status: $status, pagination: $pagination) {\n items { ${PIPELINE_RUN_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const RUN_PIPELINE = `\n mutation LabsofscienceRunPipeline($input: LabRunPipelineInput!) {\n labRunPipeline(input: $input) {\n ${PIPELINE_RUN_FIELDS}\n }\n }\n`;\n\nexport const TRANSITION_PIPELINE_RUN = `\n mutation LabsofscienceTransitionPipelineRun(\n $id: ID!\n $status: LabPipelineRunStatus!\n $log: String\n ) {\n labTransitionPipelineRun(id: $id, status: $status, log: $log) {\n ${PIPELINE_RUN_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Instruments (+ bookings)\n// ---------------------------------------------------------------------------\n\nexport const GET_INSTRUMENT = `\n query LabsofscienceGetInstrument($id: ID!) {\n labInstrument(id: $id) {\n ${INSTRUMENT_FIELDS}\n bookings { ${BOOKING_FIELDS} }\n }\n }\n`;\n\nexport const LIST_INSTRUMENTS = `\n query LabsofscienceListInstruments($status: LabInstrumentStatus) {\n labListInstruments(status: $status) {\n ${INSTRUMENT_FIELDS}\n }\n }\n`;\n\nexport const CREATE_INSTRUMENT = `\n mutation LabsofscienceCreateInstrument($input: LabCreateInstrumentInput!) {\n labCreateInstrument(input: $input) {\n ${INSTRUMENT_FIELDS}\n }\n }\n`;\n\nexport const BOOK_INSTRUMENT = `\n mutation LabsofscienceBookInstrument($input: LabBookInstrumentInput!) {\n labBookInstrument(input: $input) {\n ${BOOKING_FIELDS}\n }\n }\n`;\n\nexport const CANCEL_BOOKING = `\n mutation LabsofscienceCancelBooking($id: ID!) {\n labCancelBooking(id: $id) {\n ${BOOKING_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Inventory\n// ---------------------------------------------------------------------------\n\nexport const GET_INVENTORY_ITEM = `\n query LabsofscienceGetInventoryItem($id: ID!) {\n labInventoryItem(id: $id) {\n ${INVENTORY_FIELDS}\n }\n }\n`;\n\nexport const LIST_INVENTORY_ITEMS = `\n query LabsofscienceListInventoryItems(\n $category: LabInventoryCategory\n $status: LabInventoryStatus\n $pagination: PaginationInput\n ) {\n labListInventoryItems(category: $category, status: $status, pagination: $pagination) {\n items { ${INVENTORY_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_INVENTORY_ITEM = `\n mutation LabsofscienceCreateInventoryItem($input: LabCreateInventoryItemInput!) {\n labCreateInventoryItem(input: $input) {\n ${INVENTORY_FIELDS}\n }\n }\n`;\n\nexport const ADJUST_INVENTORY = `\n mutation LabsofscienceAdjustInventory($id: ID!, $input: LabAdjustInventoryInput!) {\n labAdjustInventory(id: $id, input: $input) {\n ${INVENTORY_FIELDS}\n }\n }\n`;\n\nexport const ARCHIVE_INVENTORY_ITEM = `\n mutation LabsofscienceArchiveInventoryItem($id: ID!) {\n labArchiveInventoryItem(id: $id)\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Notebook (ELN)\n// ---------------------------------------------------------------------------\n\nexport const LIST_NOTEBOOK_ENTRIES = `\n query LabsofscienceListNotebookEntries(\n $projectId: ID\n $experimentId: ID\n $status: LabNotebookEntryStatus\n $pagination: PaginationInput\n ) {\n labListNotebookEntries(\n projectId: $projectId\n experimentId: $experimentId\n status: $status\n pagination: $pagination\n ) {\n items { ${NOTEBOOK_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_NOTEBOOK_ENTRY = `\n mutation LabsofscienceCreateNotebookEntry($input: LabCreateNotebookEntryInput!) {\n labCreateNotebookEntry(input: $input) {\n ${NOTEBOOK_FIELDS}\n }\n }\n`;\n\nexport const SIGN_NOTEBOOK_ENTRY = `\n mutation LabsofscienceSignNotebookEntry($id: ID!) {\n labSignNotebookEntry(id: $id) {\n ${NOTEBOOK_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Health\n// ---------------------------------------------------------------------------\n\nexport const HEALTH = `\n query LabsofscienceHealth {\n labHealth\n }\n`;\n","/**\n * Shared zod schemas for the Labsofscience tool surface.\n *\n * Every backend enum is mirrored as a tight zod enum so Claude Desktop\n * grounds tool calls against the exact allowed values. The `JSON` scalar\n * inputs (variables, observations, parameters, definition) are modelled as a\n * permissive object record — the backend accepts arbitrary JSON, but a record\n * shape gives the LLM a typed hint.\n */\n\nimport { z } from 'zod';\n\nexport const ProjectStatusEnum = z\n .enum(['ACTIVE', 'ARCHIVED', 'COMPLETED', 'ON_HOLD', 'PLANNING'])\n .describe('Lifecycle status of a research project');\n\nexport const ProjectVisibilityEnum = z\n .enum(['PRIVATE', 'PUBLIC', 'WORKSPACE'])\n .describe('Visibility scope of a research project');\n\nexport const ExperimentStatusEnum = z\n .enum(['ABANDONED', 'ANALYSIS', 'COMPLETE', 'DESIGN', 'RUNNING'])\n .describe('Lifecycle status of an experiment');\n\nexport const RunStatusEnum = z\n .enum(['CANCELLED', 'FAILED', 'IN_PROGRESS', 'PLANNED', 'SUCCEEDED'])\n .describe('Status of an experiment run');\n\nexport const ProtocolStatusEnum = z\n .enum(['DEPRECATED', 'DRAFT', 'PUBLISHED'])\n .describe('Lifecycle status of a protocol');\n\nexport const StepKindEnum = z\n .enum(['ANALYSIS', 'CLEANUP', 'INCUBATION', 'MEASUREMENT', 'PREPARATION', 'SAFETY'])\n .describe('Kind of a protocol step');\n\nexport const DatasetKindEnum = z\n .enum(['PROCESSED', 'RAW', 'REFERENCE', 'RESULT'])\n .describe('Kind/classification of a dataset');\n\nexport const DatasetStatusEnum = z\n .enum(['ACTIVE', 'ARCHIVED', 'LOCKED'])\n .describe('Lifecycle status of a dataset');\n\nexport const PipelineRunStatusEnum = z\n .enum(['CANCELLED', 'FAILED', 'QUEUED', 'RUNNING', 'SUCCEEDED'])\n .describe('Execution status of an analysis-pipeline run');\n\nexport const InstrumentStatusEnum = z\n .enum(['AVAILABLE', 'IN_USE', 'MAINTENANCE', 'OFFLINE'])\n .describe('Availability status of a lab instrument');\n\nexport const InventoryCategoryEnum = z\n .enum(['BIOLOGICAL', 'CHEMICAL', 'CONSUMABLE', 'EQUIPMENT_PART', 'REAGENT', 'SAMPLE'])\n .describe('Category of an inventory item');\n\nexport const InventoryStatusEnum = z\n .enum(['EXPIRED', 'IN_STOCK', 'LOW', 'OUT_OF_STOCK', 'QUARANTINED'])\n .describe('Stock status of an inventory item');\n\nexport const NotebookEntryStatusEnum = z\n .enum(['DRAFT', 'SIGNED', 'SUBMITTED', 'VOID', 'WITNESSED'])\n .describe('Status of an electronic-lab-notebook (ELN) entry');\n\n/** Permissive JSON-object schema for `JSON` scalar inputs. */\nexport const JsonObject = z.record(z.string(), z.unknown());\n","/**\n * Labsofscience research-project tools.\n *\n * Surface (5): projects_{get,list,create,update,archive}. Backed by\n * labProject / labListProjects / labCreateProject / labUpdateProject /\n * labArchiveProject — all called by their REAL names in operations.ts.\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 { ProjectStatusEnum, ProjectVisibilityEnum } from './shared.js';\n\nexport function registerProjectTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'projects_get')),\n {\n title: 'Get Research Project',\n description: 'Fetch a single research project by ID, including its experiments.',\n inputSchema: { id: z.string().describe('Project ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n labProject: Record<string, unknown> | null;\n }>(ops.GET_PROJECT, { id });\n if (!data.labProject) return errorResult(`Project ${id} not found`);\n return jsonResult(data.labProject);\n } catch (error) {\n ctx.logger.error('labsofscience projects_get failed', { error: String(error) });\n return errorResult(\n `Failed to get project: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'projects_list')),\n {\n title: 'List Research Projects',\n description:\n 'List research projects in the bound workspace with optional status filter and pagination. Returns a connection ({ items, pageInfo }).',\n inputSchema: {\n status: ProjectStatusEnum.optional().describe('Filter by project status'),\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n cursor: z.string().optional().describe('Opaque pagination cursor'),\n },\n },\n async ({ status, limit, offset, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n labListProjects: Record<string, unknown>;\n }>(ops.LIST_PROJECTS, {\n status,\n pagination: { limit: limit ?? 50, offset: offset ?? 0, cursor },\n });\n return jsonResult(data.labListProjects);\n } catch (error) {\n ctx.logger.error('labsofscience projects_list failed', { error: String(error) });\n return errorResult(\n `Failed to list projects: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'projects_create')),\n {\n title: 'Create Research Project',\n description:\n 'Create a research project. `name` is required; `code` (if provided) should be unique within the workspace.',\n inputSchema: {\n name: z.string().min(1).describe('Project name'),\n code: z.string().optional().describe('Short project code (unique within workspace)'),\n description: z.string().optional().describe('Project description'),\n field: z.string().optional().describe('Scientific field / discipline'),\n principalInvestigatorId: z.string().optional().describe('User ID of the PI'),\n status: ProjectStatusEnum.optional().describe('Initial status (default PLANNING)'),\n visibility: ProjectVisibilityEnum.optional().describe('Visibility (default WORKSPACE)'),\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('Discovery tags'),\n },\n },\n async ({\n name,\n code,\n description,\n field,\n principalInvestigatorId,\n status,\n visibility,\n startDate,\n endDate,\n tags,\n }) => {\n try {\n const input: Record<string, unknown> = { name };\n if (code !== undefined) input.code = code;\n if (description !== undefined) input.description = description;\n if (field !== undefined) input.field = field;\n if (principalInvestigatorId !== undefined)\n input.principalInvestigatorId = principalInvestigatorId;\n if (status !== undefined) input.status = status;\n if (visibility !== undefined) input.visibility = visibility;\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 labCreateProject: Record<string, unknown>;\n }>(ops.CREATE_PROJECT, { input });\n return jsonResult(data.labCreateProject);\n } catch (error) {\n ctx.logger.error('labsofscience projects_create failed', { error: String(error) });\n return errorResult(\n `Failed to create project: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'projects_update')),\n {\n title: 'Update Research Project',\n description:\n 'Update a research project. At least one mutable field must be provided. Use `status` to advance the project lifecycle.',\n inputSchema: {\n id: z.string().describe('Project ID'),\n name: z.string().optional().describe('Updated name'),\n code: z.string().optional().describe('Updated code'),\n description: z.string().optional().describe('Updated description'),\n field: z.string().optional().describe('Updated field/discipline'),\n principalInvestigatorId: z.string().optional().describe('Updated PI user ID'),\n status: ProjectStatusEnum.optional().describe('Updated status'),\n visibility: ProjectVisibilityEnum.optional().describe('Updated visibility'),\n startDate: z.string().optional().describe('Updated start date (ISO-8601)'),\n endDate: z.string().optional().describe('Updated end date (ISO-8601)'),\n tags: z.array(z.string()).optional().describe('Updated tags'),\n },\n },\n async ({\n id,\n name,\n code,\n description,\n field,\n principalInvestigatorId,\n status,\n visibility,\n startDate,\n endDate,\n tags,\n }) => {\n try {\n const input: Record<string, unknown> = {};\n if (name !== undefined) input.name = name;\n if (code !== undefined) input.code = code;\n if (description !== undefined) input.description = description;\n if (field !== undefined) input.field = field;\n if (principalInvestigatorId !== undefined)\n input.principalInvestigatorId = principalInvestigatorId;\n if (status !== undefined) input.status = status;\n if (visibility !== undefined) input.visibility = visibility;\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('No updates specified — provide at least one mutable project field');\n }\n\n const data = await ctx.gql.workspace.request<{\n labUpdateProject: Record<string, unknown>;\n }>(ops.UPDATE_PROJECT, { id, input });\n return jsonResult(data.labUpdateProject);\n } catch (error) {\n ctx.logger.error('labsofscience projects_update failed', { error: String(error) });\n return errorResult(\n `Failed to update project: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'projects_archive')),\n {\n title: 'Archive Research Project',\n description: 'Archive a research project. Returns true on success.',\n inputSchema: { id: z.string().describe('Project ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ labArchiveProject: boolean }>(\n ops.ARCHIVE_PROJECT,\n { id },\n );\n return jsonResult({ archived: data.labArchiveProject, id });\n } catch (error) {\n ctx.logger.error('labsofscience projects_archive failed', { error: String(error) });\n return errorResult(\n `Failed to archive project: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * Labsofscience experiment tools.\n *\n * Surface (5): experiments_{get,list,create,update,transition}. Backed by\n * labExperiment / labListExperiments / labCreateExperiment /\n * labUpdateExperiment / labTransitionExperiment.\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 { ExperimentStatusEnum, JsonObject } from './shared.js';\n\nexport function registerExperimentTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'experiments_get')),\n {\n title: 'Get Experiment',\n description: 'Fetch a single experiment by ID, including its parent project and runs.',\n inputSchema: { id: z.string().describe('Experiment ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n labExperiment: Record<string, unknown> | null;\n }>(ops.GET_EXPERIMENT, { id });\n if (!data.labExperiment) return errorResult(`Experiment ${id} not found`);\n return jsonResult(data.labExperiment);\n } catch (error) {\n ctx.logger.error('labsofscience experiments_get failed', { error: String(error) });\n return errorResult(\n `Failed to get experiment: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'experiments_list')),\n {\n title: 'List Experiments',\n description:\n 'List experiments, optionally filtered by project and/or status, with pagination. Returns a connection ({ items, pageInfo }).',\n inputSchema: {\n projectId: z.string().optional().describe('Filter by project ID'),\n status: ExperimentStatusEnum.optional().describe('Filter by experiment status'),\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n cursor: z.string().optional().describe('Opaque pagination cursor'),\n },\n },\n async ({ projectId, status, limit, offset, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n labListExperiments: Record<string, unknown>;\n }>(ops.LIST_EXPERIMENTS, {\n projectId,\n status,\n pagination: { limit: limit ?? 50, offset: offset ?? 0, cursor },\n });\n return jsonResult(data.labListExperiments);\n } catch (error) {\n ctx.logger.error('labsofscience experiments_list failed', { error: String(error) });\n return errorResult(\n `Failed to list experiments: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'experiments_create')),\n {\n title: 'Create Experiment',\n description:\n 'Create an experiment under a project. `projectId` and `title` are required. `variables` is arbitrary JSON capturing the experimental design.',\n inputSchema: {\n projectId: z.string().min(1).describe('Owning project ID'),\n title: z.string().min(1).describe('Experiment title'),\n description: z.string().optional().describe('Experiment description'),\n hypothesis: z.string().optional().describe('Hypothesis under test'),\n protocolId: z.string().optional().describe('Protocol this experiment follows'),\n leadResearcherId: z.string().optional().describe('Lead researcher user ID'),\n variables: JsonObject.optional().describe('Experimental variables JSON'),\n tags: z.array(z.string()).optional().describe('Discovery tags'),\n },\n },\n async ({\n projectId,\n title,\n description,\n hypothesis,\n protocolId,\n leadResearcherId,\n variables,\n tags,\n }) => {\n try {\n const input: Record<string, unknown> = { projectId, title };\n if (description !== undefined) input.description = description;\n if (hypothesis !== undefined) input.hypothesis = hypothesis;\n if (protocolId !== undefined) input.protocolId = protocolId;\n if (leadResearcherId !== undefined) input.leadResearcherId = leadResearcherId;\n if (variables !== undefined) input.variables = variables;\n if (tags !== undefined) input.tags = tags;\n\n const data = await ctx.gql.workspace.request<{\n labCreateExperiment: Record<string, unknown>;\n }>(ops.CREATE_EXPERIMENT, { input });\n return jsonResult(data.labCreateExperiment);\n } catch (error) {\n ctx.logger.error('labsofscience experiments_create failed', { error: String(error) });\n return errorResult(\n `Failed to create experiment: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'experiments_update')),\n {\n title: 'Update Experiment',\n description:\n 'Update an experiment. At least one mutable field must be provided. To change lifecycle status use experiments_transition.',\n inputSchema: {\n id: z.string().describe('Experiment ID'),\n title: z.string().optional().describe('Updated title'),\n description: z.string().optional().describe('Updated description'),\n hypothesis: z.string().optional().describe('Updated hypothesis'),\n protocolId: z.string().optional().describe('Updated protocol ID'),\n leadResearcherId: z.string().optional().describe('Updated lead researcher user ID'),\n variables: JsonObject.optional().describe('Updated experimental variables JSON'),\n tags: z.array(z.string()).optional().describe('Updated tags'),\n },\n },\n async ({\n id,\n title,\n description,\n hypothesis,\n protocolId,\n leadResearcherId,\n variables,\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 (hypothesis !== undefined) input.hypothesis = hypothesis;\n if (protocolId !== undefined) input.protocolId = protocolId;\n if (leadResearcherId !== undefined) input.leadResearcherId = leadResearcherId;\n if (variables !== undefined) input.variables = variables;\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 mutable experiment field',\n );\n }\n\n const data = await ctx.gql.workspace.request<{\n labUpdateExperiment: Record<string, unknown>;\n }>(ops.UPDATE_EXPERIMENT, { id, input });\n return jsonResult(data.labUpdateExperiment);\n } catch (error) {\n ctx.logger.error('labsofscience experiments_update failed', { error: String(error) });\n return errorResult(\n `Failed to update experiment: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'experiments_transition')),\n {\n title: 'Transition Experiment',\n description:\n 'Advance an experiment through its lifecycle (DESIGN → RUNNING → ANALYSIS → COMPLETE, or ABANDONED). Transitions are validated server-side.',\n inputSchema: {\n id: z.string().describe('Experiment ID'),\n status: ExperimentStatusEnum.describe('Target status'),\n },\n },\n async ({ id, status }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n labTransitionExperiment: Record<string, unknown>;\n }>(ops.TRANSITION_EXPERIMENT, { id, status });\n return jsonResult(data.labTransitionExperiment);\n } catch (error) {\n ctx.logger.error('labsofscience experiments_transition failed', { error: String(error) });\n return errorResult(\n `Failed to transition experiment: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * Labsofscience experiment-run tools.\n *\n * Surface (3): runs_{list,start,complete}. Backed by labListRuns /\n * labStartRun / labCompleteRun. Runs are reproducible executions of an\n * experiment with auto-incremented runNumber.\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 { RunStatusEnum, JsonObject } from './shared.js';\n\nexport function registerRunTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'runs_list')),\n {\n title: 'List Experiment Runs',\n description:\n 'List experiment runs, optionally filtered by experiment and/or status, with pagination. Returns a connection ({ items, pageInfo }).',\n inputSchema: {\n experimentId: z.string().optional().describe('Filter by experiment ID'),\n status: RunStatusEnum.optional().describe('Filter by run status'),\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n cursor: z.string().optional().describe('Opaque pagination cursor'),\n },\n },\n async ({ experimentId, status, limit, offset, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n labListRuns: Record<string, unknown>;\n }>(ops.LIST_RUNS, {\n experimentId,\n status,\n pagination: { limit: limit ?? 50, offset: offset ?? 0, cursor },\n });\n return jsonResult(data.labListRuns);\n } catch (error) {\n ctx.logger.error('labsofscience runs_list failed', { error: String(error) });\n return errorResult(\n `Failed to list runs: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'runs_start')),\n {\n title: 'Start Experiment Run',\n description:\n 'Start a new reproducible run of an experiment (runNumber is auto-incremented). `parameters` is arbitrary JSON capturing the run configuration.',\n inputSchema: {\n experimentId: z.string().min(1).describe('Experiment being run'),\n parameters: JsonObject.optional().describe('Run parameters JSON'),\n notes: z.string().optional().describe('Free-text notes for the run'),\n },\n },\n async ({ experimentId, parameters, notes }) => {\n try {\n const input: Record<string, unknown> = { experimentId };\n if (parameters !== undefined) input.parameters = parameters;\n if (notes !== undefined) input.notes = notes;\n\n const data = await ctx.gql.workspace.request<{\n labStartRun: Record<string, unknown>;\n }>(ops.START_RUN, { input });\n return jsonResult(data.labStartRun);\n } catch (error) {\n ctx.logger.error('labsofscience runs_start failed', { error: String(error) });\n return errorResult(\n `Failed to start run: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'runs_complete')),\n {\n title: 'Complete Experiment Run',\n description:\n 'Record observations and complete a run with a terminal status (SUCCEEDED, FAILED, or CANCELLED).',\n inputSchema: {\n id: z.string().describe('Run ID'),\n status: RunStatusEnum.describe('Terminal run status'),\n observations: JsonObject.optional().describe('Recorded observations JSON'),\n notes: z.string().optional().describe('Closing notes for the run'),\n },\n },\n async ({ id, status, observations, notes }) => {\n try {\n const input: Record<string, unknown> = {};\n if (observations !== undefined) input.observations = observations;\n if (notes !== undefined) input.notes = notes;\n\n const data = await ctx.gql.workspace.request<{\n labCompleteRun: Record<string, unknown>;\n }>(ops.COMPLETE_RUN, {\n id,\n status,\n input: Object.keys(input).length > 0 ? input : undefined,\n });\n return jsonResult(data.labCompleteRun);\n } catch (error) {\n ctx.logger.error('labsofscience runs_complete failed', { error: String(error) });\n return errorResult(\n `Failed to complete run: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * Labsofscience protocol tools (+ steps).\n *\n * Surface (6): protocols_{get,list,create,update,add_step,publish}. Backed by\n * labProtocol / labListProtocols / labCreateProtocol / labUpdateProtocol /\n * labAddProtocolStep / labPublishProtocol.\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 { ProtocolStatusEnum, StepKindEnum } from './shared.js';\n\nexport function registerProtocolTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'protocols_get')),\n {\n title: 'Get Protocol',\n description: 'Fetch a single protocol by ID, including its ordered steps.',\n inputSchema: { id: z.string().describe('Protocol ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n labProtocol: Record<string, unknown> | null;\n }>(ops.GET_PROTOCOL, { id });\n if (!data.labProtocol) return errorResult(`Protocol ${id} not found`);\n return jsonResult(data.labProtocol);\n } catch (error) {\n ctx.logger.error('labsofscience protocols_get failed', { error: String(error) });\n return errorResult(\n `Failed to get protocol: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'protocols_list')),\n {\n title: 'List Protocols',\n description:\n 'List protocols, optionally filtered by status, with pagination. Returns a connection ({ items, pageInfo }).',\n inputSchema: {\n status: ProtocolStatusEnum.optional().describe('Filter by protocol status'),\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n cursor: z.string().optional().describe('Opaque pagination cursor'),\n },\n },\n async ({ status, limit, offset, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n labListProtocols: Record<string, unknown>;\n }>(ops.LIST_PROTOCOLS, {\n status,\n pagination: { limit: limit ?? 50, offset: offset ?? 0, cursor },\n });\n return jsonResult(data.labListProtocols);\n } catch (error) {\n ctx.logger.error('labsofscience protocols_list failed', { error: String(error) });\n return errorResult(\n `Failed to list protocols: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'protocols_create')),\n {\n title: 'Create Protocol',\n description:\n 'Create a draft protocol (standard operating procedure). `name` is required; add steps with protocols_add_step, then protocols_publish to freeze the version.',\n inputSchema: {\n name: z.string().min(1).describe('Protocol name'),\n summary: z.string().optional().describe('Short summary'),\n authorId: z.string().optional().describe('Author user ID'),\n estimatedMinutes: z\n .number()\n .int()\n .optional()\n .describe('Estimated total duration (minutes)'),\n materials: z.array(z.string()).optional().describe('Required materials list'),\n safetyNotes: z.string().optional().describe('Safety notes'),\n tags: z.array(z.string()).optional().describe('Discovery tags'),\n },\n },\n async ({ name, summary, authorId, estimatedMinutes, materials, safetyNotes, tags }) => {\n try {\n const input: Record<string, unknown> = { name };\n if (summary !== undefined) input.summary = summary;\n if (authorId !== undefined) input.authorId = authorId;\n if (estimatedMinutes !== undefined) input.estimatedMinutes = estimatedMinutes;\n if (materials !== undefined) input.materials = materials;\n if (safetyNotes !== undefined) input.safetyNotes = safetyNotes;\n if (tags !== undefined) input.tags = tags;\n\n const data = await ctx.gql.workspace.request<{\n labCreateProtocol: Record<string, unknown>;\n }>(ops.CREATE_PROTOCOL, { input });\n return jsonResult(data.labCreateProtocol);\n } catch (error) {\n ctx.logger.error('labsofscience protocols_create failed', { error: String(error) });\n return errorResult(\n `Failed to create protocol: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'protocols_update')),\n {\n title: 'Update Protocol',\n description: 'Update a (draft) protocol. At least one mutable field must be provided.',\n inputSchema: {\n id: z.string().describe('Protocol ID'),\n name: z.string().optional().describe('Updated name'),\n summary: z.string().optional().describe('Updated summary'),\n estimatedMinutes: z.number().int().optional().describe('Updated estimated duration'),\n materials: z.array(z.string()).optional().describe('Updated materials list'),\n safetyNotes: z.string().optional().describe('Updated safety notes'),\n tags: z.array(z.string()).optional().describe('Updated tags'),\n },\n },\n async ({ id, name, summary, estimatedMinutes, materials, safetyNotes, tags }) => {\n try {\n const input: Record<string, unknown> = {};\n if (name !== undefined) input.name = name;\n if (summary !== undefined) input.summary = summary;\n if (estimatedMinutes !== undefined) input.estimatedMinutes = estimatedMinutes;\n if (materials !== undefined) input.materials = materials;\n if (safetyNotes !== undefined) input.safetyNotes = safetyNotes;\n if (tags !== undefined) input.tags = tags;\n\n if (Object.keys(input).length === 0) {\n return errorResult('No updates specified — provide at least one mutable protocol field');\n }\n\n const data = await ctx.gql.workspace.request<{\n labUpdateProtocol: Record<string, unknown>;\n }>(ops.UPDATE_PROTOCOL, { id, input });\n return jsonResult(data.labUpdateProtocol);\n } catch (error) {\n ctx.logger.error('labsofscience protocols_update failed', { error: String(error) });\n return errorResult(\n `Failed to update protocol: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'protocols_add_step')),\n {\n title: 'Add Protocol Step',\n description:\n 'Append a step to a protocol. `instruction` is required; `kind` defaults to PREPARATION. If `ordinal` is omitted the step is appended at the end.',\n inputSchema: {\n protocolId: z.string().min(1).describe('Owning protocol ID'),\n instruction: z.string().min(1).describe('Step instruction text'),\n kind: StepKindEnum.optional().describe('Step kind (default PREPARATION)'),\n ordinal: z.number().int().optional().describe('Position in the protocol (1-based)'),\n durationMinutes: z.number().int().optional().describe('Step duration in minutes'),\n isCritical: z.boolean().optional().describe('Mark as a critical step (default false)'),\n },\n },\n async ({ protocolId, instruction, kind, ordinal, durationMinutes, isCritical }) => {\n try {\n const input: Record<string, unknown> = { protocolId, instruction };\n if (kind !== undefined) input.kind = kind;\n if (ordinal !== undefined) input.ordinal = ordinal;\n if (durationMinutes !== undefined) input.durationMinutes = durationMinutes;\n if (isCritical !== undefined) input.isCritical = isCritical;\n\n const data = await ctx.gql.workspace.request<{\n labAddProtocolStep: Record<string, unknown>;\n }>(ops.ADD_PROTOCOL_STEP, { input });\n return jsonResult(data.labAddProtocolStep);\n } catch (error) {\n ctx.logger.error('labsofscience protocols_add_step failed', { error: String(error) });\n return errorResult(\n `Failed to add protocol step: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'protocols_publish')),\n {\n title: 'Publish Protocol',\n description:\n 'Publish a draft protocol, freezing its version for reproducibility. Returns the published protocol with its steps.',\n inputSchema: { id: z.string().describe('Protocol ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n labPublishProtocol: Record<string, unknown>;\n }>(ops.PUBLISH_PROTOCOL, { id });\n return jsonResult(data.labPublishProtocol);\n } catch (error) {\n ctx.logger.error('labsofscience protocols_publish failed', { error: String(error) });\n return errorResult(\n `Failed to publish protocol: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * Labsofscience dataset tools (+ versions).\n *\n * Surface (5): datasets_{get,list,create,add_version,archive}. Backed by\n * labDataset / labListDatasets / labCreateDataset / labAddDatasetVersion /\n * labArchiveDataset. Dataset blobs live in wspace-files-svc (referenced via\n * fileId); versions are immutable snapshots.\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 { DatasetKindEnum, DatasetStatusEnum } from './shared.js';\n\nexport function registerDatasetTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'datasets_get')),\n {\n title: 'Get Dataset',\n description: 'Fetch a single dataset by ID, including its version history.',\n inputSchema: { id: z.string().describe('Dataset ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n labDataset: Record<string, unknown> | null;\n }>(ops.GET_DATASET, { id });\n if (!data.labDataset) return errorResult(`Dataset ${id} not found`);\n return jsonResult(data.labDataset);\n } catch (error) {\n ctx.logger.error('labsofscience datasets_get failed', { error: String(error) });\n return errorResult(\n `Failed to get dataset: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'datasets_list')),\n {\n title: 'List Datasets',\n description:\n 'List datasets, optionally filtered by kind and/or status, with pagination. Returns a connection ({ items, pageInfo }).',\n inputSchema: {\n kind: DatasetKindEnum.optional().describe('Filter by dataset kind'),\n status: DatasetStatusEnum.optional().describe('Filter by dataset status'),\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n cursor: z.string().optional().describe('Opaque pagination cursor'),\n },\n },\n async ({ kind, status, limit, offset, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n labListDatasets: Record<string, unknown>;\n }>(ops.LIST_DATASETS, {\n kind,\n status,\n pagination: { limit: limit ?? 50, offset: offset ?? 0, cursor },\n });\n return jsonResult(data.labListDatasets);\n } catch (error) {\n ctx.logger.error('labsofscience datasets_list failed', { error: String(error) });\n return errorResult(\n `Failed to list datasets: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'datasets_create')),\n {\n title: 'Create Dataset',\n description:\n 'Create a dataset record. `name` is required; `kind` defaults to RAW. Attach the actual bytes later via datasets_add_version.',\n inputSchema: {\n name: z.string().min(1).describe('Dataset name'),\n kind: DatasetKindEnum.optional().describe('Dataset kind (default RAW)'),\n description: z.string().optional().describe('Dataset description'),\n experimentId: z.string().optional().describe('Source experiment ID'),\n projectId: z.string().optional().describe('Owning project ID'),\n tags: z.array(z.string()).optional().describe('Discovery tags'),\n },\n },\n async ({ name, kind, description, experimentId, projectId, tags }) => {\n try {\n const input: Record<string, unknown> = { name };\n if (kind !== undefined) input.kind = kind;\n if (description !== undefined) input.description = description;\n if (experimentId !== undefined) input.experimentId = experimentId;\n if (projectId !== undefined) input.projectId = projectId;\n if (tags !== undefined) input.tags = tags;\n\n const data = await ctx.gql.workspace.request<{\n labCreateDataset: Record<string, unknown>;\n }>(ops.CREATE_DATASET, { input });\n return jsonResult(data.labCreateDataset);\n } catch (error) {\n ctx.logger.error('labsofscience datasets_create failed', { error: String(error) });\n return errorResult(\n `Failed to create dataset: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'datasets_add_version')),\n {\n title: 'Add Dataset Version',\n description:\n 'Append an immutable version to a dataset and bump its latestVersion. `fileId` references the snapshot bytes stored in wspace-files-svc.',\n inputSchema: {\n datasetId: z.string().min(1).describe('Target dataset ID'),\n fileId: z.string().optional().describe('wspace-files-svc File ID for the snapshot bytes'),\n sizeBytes: z\n .string()\n .optional()\n .describe('Snapshot size in bytes (string for large values)'),\n rowCount: z.number().int().optional().describe('Number of rows in the snapshot'),\n checksum: z.string().optional().describe('Content checksum'),\n changeNote: z.string().optional().describe('What changed in this version'),\n },\n },\n async ({ datasetId, fileId, sizeBytes, rowCount, checksum, changeNote }) => {\n try {\n const input: Record<string, unknown> = { datasetId };\n if (fileId !== undefined) input.fileId = fileId;\n if (sizeBytes !== undefined) input.sizeBytes = sizeBytes;\n if (rowCount !== undefined) input.rowCount = rowCount;\n if (checksum !== undefined) input.checksum = checksum;\n if (changeNote !== undefined) input.changeNote = changeNote;\n\n const data = await ctx.gql.workspace.request<{\n labAddDatasetVersion: Record<string, unknown>;\n }>(ops.ADD_DATASET_VERSION, { input });\n return jsonResult(data.labAddDatasetVersion);\n } catch (error) {\n ctx.logger.error('labsofscience datasets_add_version failed', { error: String(error) });\n return errorResult(\n `Failed to add dataset version: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'datasets_archive')),\n {\n title: 'Archive Dataset',\n description: 'Archive a dataset. Returns true on success.',\n inputSchema: { id: z.string().describe('Dataset ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ labArchiveDataset: boolean }>(\n ops.ARCHIVE_DATASET,\n { id },\n );\n return jsonResult({ archived: data.labArchiveDataset, id });\n } catch (error) {\n ctx.logger.error('labsofscience datasets_archive failed', { error: String(error) });\n return errorResult(\n `Failed to archive dataset: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * Labsofscience analysis-pipeline tools (+ runs).\n *\n * Surface (5): pipelines_{list,create,run}, pipeline_runs_{list,transition}.\n * Backed by labListPipelines / labCreatePipeline / labRunPipeline /\n * labListPipelineRuns / labTransitionPipelineRun. labListPipelines returns a\n * plain array (no pagination); pipeline runs are paginated connections.\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 { PipelineRunStatusEnum, JsonObject } from './shared.js';\n\nexport function registerPipelineTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'pipelines_list')),\n {\n title: 'List Analysis Pipelines',\n description: 'List all analysis pipelines in the bound workspace.',\n inputSchema: {},\n },\n async () => {\n try {\n const data = await ctx.gql.workspace.request<{\n labListPipelines: Array<Record<string, unknown>>;\n }>(ops.LIST_PIPELINES, {});\n return jsonResult(data.labListPipelines);\n } catch (error) {\n ctx.logger.error('labsofscience pipelines_list failed', { error: String(error) });\n return errorResult(\n `Failed to list pipelines: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'pipelines_create')),\n {\n title: 'Create Analysis Pipeline',\n description:\n 'Create a reproducible analysis pipeline. `name` is required; `definition` is arbitrary JSON describing the pipeline graph/steps.',\n inputSchema: {\n name: z.string().min(1).describe('Pipeline name'),\n engine: z.string().optional().describe('Execution engine (e.g. \"python\", \"nextflow\")'),\n description: z.string().optional().describe('Pipeline description'),\n definition: JsonObject.optional().describe('Pipeline definition JSON (graph/steps)'),\n projectId: z.string().optional().describe('Owning project ID'),\n tags: z.array(z.string()).optional().describe('Discovery tags'),\n },\n },\n async ({ name, engine, description, definition, projectId, tags }) => {\n try {\n const input: Record<string, unknown> = { name };\n if (engine !== undefined) input.engine = engine;\n if (description !== undefined) input.description = description;\n if (definition !== undefined) input.definition = definition;\n if (projectId !== undefined) input.projectId = projectId;\n if (tags !== undefined) input.tags = tags;\n\n const data = await ctx.gql.workspace.request<{\n labCreatePipeline: Record<string, unknown>;\n }>(ops.CREATE_PIPELINE, { input });\n return jsonResult(data.labCreatePipeline);\n } catch (error) {\n ctx.logger.error('labsofscience pipelines_create failed', { error: String(error) });\n return errorResult(\n `Failed to create pipeline: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'pipelines_run')),\n {\n title: 'Run Analysis Pipeline',\n description:\n 'Queue a reproducible analysis-pipeline run over a dataset version. `pipelineId` is required; provide `datasetVersionId` (or `datasetId`) for the input data.',\n inputSchema: {\n pipelineId: z.string().min(1).describe('Pipeline to run'),\n datasetId: z.string().optional().describe('Input dataset ID'),\n datasetVersionId: z.string().optional().describe('Specific input dataset-version ID'),\n parameters: JsonObject.optional().describe('Run parameters JSON'),\n },\n },\n async ({ pipelineId, datasetId, datasetVersionId, parameters }) => {\n try {\n const input: Record<string, unknown> = { pipelineId };\n if (datasetId !== undefined) input.datasetId = datasetId;\n if (datasetVersionId !== undefined) input.datasetVersionId = datasetVersionId;\n if (parameters !== undefined) input.parameters = parameters;\n\n const data = await ctx.gql.workspace.request<{\n labRunPipeline: Record<string, unknown>;\n }>(ops.RUN_PIPELINE, { input });\n return jsonResult(data.labRunPipeline);\n } catch (error) {\n ctx.logger.error('labsofscience pipelines_run failed', { error: String(error) });\n return errorResult(\n `Failed to run pipeline: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'pipeline_runs_list')),\n {\n title: 'List Pipeline Runs',\n description:\n 'List analysis-pipeline runs, optionally filtered by pipeline and/or status, with pagination. Returns a connection ({ items, pageInfo }).',\n inputSchema: {\n pipelineId: z.string().optional().describe('Filter by pipeline ID'),\n status: PipelineRunStatusEnum.optional().describe('Filter by run status'),\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n cursor: z.string().optional().describe('Opaque pagination cursor'),\n },\n },\n async ({ pipelineId, status, limit, offset, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n labListPipelineRuns: Record<string, unknown>;\n }>(ops.LIST_PIPELINE_RUNS, {\n pipelineId,\n status,\n pagination: { limit: limit ?? 50, offset: offset ?? 0, cursor },\n });\n return jsonResult(data.labListPipelineRuns);\n } catch (error) {\n ctx.logger.error('labsofscience pipeline_runs_list failed', { error: String(error) });\n return errorResult(\n `Failed to list pipeline runs: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'pipeline_runs_transition')),\n {\n title: 'Transition Pipeline Run',\n description:\n 'Advance a pipeline run through its execution lifecycle (QUEUED → RUNNING → SUCCEEDED/FAILED, or CANCELLED). Transitions are validated; `log` appends execution output.',\n inputSchema: {\n id: z.string().describe('Pipeline run ID'),\n status: PipelineRunStatusEnum.describe('Target run status'),\n log: z.string().optional().describe('Execution log to append'),\n },\n },\n async ({ id, status, log }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n labTransitionPipelineRun: Record<string, unknown>;\n }>(ops.TRANSITION_PIPELINE_RUN, { id, status, log });\n return jsonResult(data.labTransitionPipelineRun);\n } catch (error) {\n ctx.logger.error('labsofscience pipeline_runs_transition failed', {\n error: String(error),\n });\n return errorResult(\n `Failed to transition pipeline run: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * Labsofscience instrument tools (+ bookings).\n *\n * Surface (5): instruments_{get,list,create,book}, bookings_cancel. Backed by\n * labInstrument / labListInstruments / labCreateInstrument / labBookInstrument\n * / labCancelBooking. labListInstruments returns a plain array (no pagination).\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 { InstrumentStatusEnum } from './shared.js';\n\nexport function registerInstrumentTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'instruments_get')),\n {\n title: 'Get Instrument',\n description: 'Fetch a single lab instrument by ID, including its bookings.',\n inputSchema: { id: z.string().describe('Instrument ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n labInstrument: Record<string, unknown> | null;\n }>(ops.GET_INSTRUMENT, { id });\n if (!data.labInstrument) return errorResult(`Instrument ${id} not found`);\n return jsonResult(data.labInstrument);\n } catch (error) {\n ctx.logger.error('labsofscience instruments_get failed', { error: String(error) });\n return errorResult(\n `Failed to get instrument: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'instruments_list')),\n {\n title: 'List Instruments',\n description: 'List lab instruments, optionally filtered by availability status.',\n inputSchema: {\n status: InstrumentStatusEnum.optional().describe('Filter by instrument status'),\n },\n },\n async ({ status }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n labListInstruments: Array<Record<string, unknown>>;\n }>(ops.LIST_INSTRUMENTS, { status });\n return jsonResult(data.labListInstruments);\n } catch (error) {\n ctx.logger.error('labsofscience instruments_list failed', { error: String(error) });\n return errorResult(\n `Failed to list instruments: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'instruments_create')),\n {\n title: 'Create Instrument',\n description:\n 'Register a lab instrument. `name` is required. Set `requiresApproval` if bookings must be approved before use.',\n inputSchema: {\n name: z.string().min(1).describe('Instrument name'),\n model: z.string().optional().describe('Make/model'),\n location: z.string().optional().describe('Physical location'),\n custodianId: z.string().optional().describe('Custodian user ID'),\n requiresApproval: z.boolean().optional().describe('Bookings need approval (default false)'),\n tags: z.array(z.string()).optional().describe('Discovery tags'),\n },\n },\n async ({ name, model, location, custodianId, requiresApproval, tags }) => {\n try {\n const input: Record<string, unknown> = { name };\n if (model !== undefined) input.model = model;\n if (location !== undefined) input.location = location;\n if (custodianId !== undefined) input.custodianId = custodianId;\n if (requiresApproval !== undefined) input.requiresApproval = requiresApproval;\n if (tags !== undefined) input.tags = tags;\n\n const data = await ctx.gql.workspace.request<{\n labCreateInstrument: Record<string, unknown>;\n }>(ops.CREATE_INSTRUMENT, { input });\n return jsonResult(data.labCreateInstrument);\n } catch (error) {\n ctx.logger.error('labsofscience instruments_create failed', { error: String(error) });\n return errorResult(\n `Failed to create instrument: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'instruments_book')),\n {\n title: 'Book Instrument',\n description:\n 'Reserve an instrument for a time window. Overlapping bookings are rejected server-side. `startTime`/`endTime` are ISO-8601 DateTimes.',\n inputSchema: {\n instrumentId: z.string().min(1).describe('Instrument to book'),\n startTime: z.string().min(1).describe('Booking start (ISO-8601 DateTime)'),\n endTime: z.string().min(1).describe('Booking end (ISO-8601 DateTime)'),\n experimentId: z.string().optional().describe('Associated experiment ID'),\n purpose: z.string().optional().describe('Purpose of the booking'),\n },\n },\n async ({ instrumentId, startTime, endTime, experimentId, purpose }) => {\n try {\n const input: Record<string, unknown> = { instrumentId, startTime, endTime };\n if (experimentId !== undefined) input.experimentId = experimentId;\n if (purpose !== undefined) input.purpose = purpose;\n\n const data = await ctx.gql.workspace.request<{\n labBookInstrument: Record<string, unknown>;\n }>(ops.BOOK_INSTRUMENT, { input });\n return jsonResult(data.labBookInstrument);\n } catch (error) {\n ctx.logger.error('labsofscience instruments_book failed', { error: String(error) });\n return errorResult(\n `Failed to book instrument: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'bookings_cancel')),\n {\n title: 'Cancel Instrument Booking',\n description: 'Cancel an instrument booking by ID. Returns the cancelled booking.',\n inputSchema: { id: z.string().describe('Booking ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n labCancelBooking: Record<string, unknown>;\n }>(ops.CANCEL_BOOKING, { id });\n return jsonResult(data.labCancelBooking);\n } catch (error) {\n ctx.logger.error('labsofscience bookings_cancel failed', { error: String(error) });\n return errorResult(\n `Failed to cancel booking: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * Labsofscience inventory tools.\n *\n * Surface (5): inventory_{get,list,create,adjust,archive}. Backed by\n * labInventoryItem / labListInventoryItems / labCreateInventoryItem /\n * labAdjustInventory / labArchiveInventoryItem. Stock status is recomputed\n * server-side from quantity vs reorderLevel.\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 { InventoryCategoryEnum, InventoryStatusEnum } from './shared.js';\n\nexport function registerInventoryTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'inventory_get')),\n {\n title: 'Get Inventory Item',\n description: 'Fetch a single inventory item (reagent/consumable/sample/etc.) by ID.',\n inputSchema: { id: z.string().describe('Inventory item ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n labInventoryItem: Record<string, unknown> | null;\n }>(ops.GET_INVENTORY_ITEM, { id });\n if (!data.labInventoryItem) return errorResult(`Inventory item ${id} not found`);\n return jsonResult(data.labInventoryItem);\n } catch (error) {\n ctx.logger.error('labsofscience inventory_get failed', { error: String(error) });\n return errorResult(\n `Failed to get inventory item: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'inventory_list')),\n {\n title: 'List Inventory Items',\n description:\n 'List inventory items, optionally filtered by category and/or stock status, with pagination. Returns a connection ({ items, pageInfo }).',\n inputSchema: {\n category: InventoryCategoryEnum.optional().describe('Filter by category'),\n status: InventoryStatusEnum.optional().describe('Filter by stock status'),\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n cursor: z.string().optional().describe('Opaque pagination cursor'),\n },\n },\n async ({ category, status, limit, offset, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n labListInventoryItems: Record<string, unknown>;\n }>(ops.LIST_INVENTORY_ITEMS, {\n category,\n status,\n pagination: { limit: limit ?? 50, offset: offset ?? 0, cursor },\n });\n return jsonResult(data.labListInventoryItems);\n } catch (error) {\n ctx.logger.error('labsofscience inventory_list failed', { error: String(error) });\n return errorResult(\n `Failed to list inventory items: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'inventory_create')),\n {\n title: 'Create Inventory Item',\n description:\n 'Add an inventory item. `name` is required; `category` defaults to REAGENT. Set `reorderLevel` to drive LOW/OUT_OF_STOCK status.',\n inputSchema: {\n name: z.string().min(1).describe('Item name'),\n category: InventoryCategoryEnum.optional().describe('Category (default REAGENT)'),\n quantity: z.number().optional().describe('Initial quantity'),\n unit: z.string().optional().describe('Unit of measure (e.g. \"mL\", \"units\")'),\n reorderLevel: z.number().optional().describe('Reorder threshold'),\n location: z.string().optional().describe('Storage location'),\n vendor: z.string().optional().describe('Vendor/supplier'),\n catalogNumber: z.string().optional().describe('Vendor catalog number'),\n lotNumber: z.string().optional().describe('Lot/batch number'),\n expiresAt: z.string().optional().describe('Expiry date (ISO-8601 DateTime)'),\n sdsFileId: z.string().optional().describe('wspace-files-svc File ID for the SDS sheet'),\n tags: z.array(z.string()).optional().describe('Discovery tags'),\n },\n },\n async ({\n name,\n category,\n quantity,\n unit,\n reorderLevel,\n location,\n vendor,\n catalogNumber,\n lotNumber,\n expiresAt,\n sdsFileId,\n tags,\n }) => {\n try {\n const input: Record<string, unknown> = { name };\n if (category !== undefined) input.category = category;\n if (quantity !== undefined) input.quantity = quantity;\n if (unit !== undefined) input.unit = unit;\n if (reorderLevel !== undefined) input.reorderLevel = reorderLevel;\n if (location !== undefined) input.location = location;\n if (vendor !== undefined) input.vendor = vendor;\n if (catalogNumber !== undefined) input.catalogNumber = catalogNumber;\n if (lotNumber !== undefined) input.lotNumber = lotNumber;\n if (expiresAt !== undefined) input.expiresAt = expiresAt;\n if (sdsFileId !== undefined) input.sdsFileId = sdsFileId;\n if (tags !== undefined) input.tags = tags;\n\n const data = await ctx.gql.workspace.request<{\n labCreateInventoryItem: Record<string, unknown>;\n }>(ops.CREATE_INVENTORY_ITEM, { input });\n return jsonResult(data.labCreateInventoryItem);\n } catch (error) {\n ctx.logger.error('labsofscience inventory_create failed', { error: String(error) });\n return errorResult(\n `Failed to create inventory item: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'inventory_adjust')),\n {\n title: 'Adjust Inventory',\n description:\n 'Apply a signed quantity delta to an item and recompute stock status (positive = restock, negative = consume).',\n inputSchema: {\n id: z.string().describe('Inventory item ID'),\n delta: z.number().describe('Signed quantity delta (positive = restock)'),\n reason: z.string().optional().describe('Reason for the adjustment'),\n },\n },\n async ({ id, delta, reason }) => {\n try {\n const input: Record<string, unknown> = { delta };\n if (reason !== undefined) input.reason = reason;\n\n const data = await ctx.gql.workspace.request<{\n labAdjustInventory: Record<string, unknown>;\n }>(ops.ADJUST_INVENTORY, { id, input });\n return jsonResult(data.labAdjustInventory);\n } catch (error) {\n ctx.logger.error('labsofscience inventory_adjust failed', { error: String(error) });\n return errorResult(\n `Failed to adjust inventory: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'inventory_archive')),\n {\n title: 'Archive Inventory Item',\n description: 'Archive an inventory item. Returns true on success.',\n inputSchema: { id: z.string().describe('Inventory item ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ labArchiveInventoryItem: boolean }>(\n ops.ARCHIVE_INVENTORY_ITEM,\n { id },\n );\n return jsonResult({ archived: data.labArchiveInventoryItem, id });\n } catch (error) {\n ctx.logger.error('labsofscience inventory_archive failed', { error: String(error) });\n return errorResult(\n `Failed to archive inventory item: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * Labsofscience electronic-lab-notebook (ELN) tools.\n *\n * Surface (3): notebook_{list,create,sign}. Backed by labListNotebookEntries /\n * labCreateNotebookEntry / labSignNotebookEntry. Signing an entry locks its\n * editable content for record integrity. (There is no single-entry get query\n * in the schema — entries are retrieved via the paginated list.)\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 { NotebookEntryStatusEnum } from './shared.js';\n\nexport function registerNotebookTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'notebook_list')),\n {\n title: 'List Notebook Entries',\n description:\n 'List ELN entries, optionally filtered by project, experiment, and/or status, with pagination. Returns a connection ({ items, pageInfo }).',\n inputSchema: {\n projectId: z.string().optional().describe('Filter by project ID'),\n experimentId: z.string().optional().describe('Filter by experiment ID'),\n status: NotebookEntryStatusEnum.optional().describe('Filter by entry status'),\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n cursor: z.string().optional().describe('Opaque pagination cursor'),\n },\n },\n async ({ projectId, experimentId, status, limit, offset, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n labListNotebookEntries: Record<string, unknown>;\n }>(ops.LIST_NOTEBOOK_ENTRIES, {\n projectId,\n experimentId,\n status,\n pagination: { limit: limit ?? 50, offset: offset ?? 0, cursor },\n });\n return jsonResult(data.labListNotebookEntries);\n } catch (error) {\n ctx.logger.error('labsofscience notebook_list failed', { error: String(error) });\n return errorResult(\n `Failed to list notebook entries: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'notebook_create')),\n {\n title: 'Create Notebook Entry',\n description:\n 'Create an ELN entry under a project. `projectId` and `title` are required. Attach files via `fileIds` (wspace-files-svc File IDs).',\n inputSchema: {\n projectId: z.string().min(1).describe('Owning project ID'),\n title: z.string().min(1).describe('Entry title'),\n body: z.string().optional().describe('Entry body (rich text / markdown)'),\n experimentId: z.string().optional().describe('Associated experiment ID'),\n runId: z.string().optional().describe('Associated run ID'),\n fileIds: z.array(z.string()).optional().describe('Attached wspace-files-svc File IDs'),\n tags: z.array(z.string()).optional().describe('Discovery tags'),\n },\n },\n async ({ projectId, title, body, experimentId, runId, fileIds, tags }) => {\n try {\n const input: Record<string, unknown> = { projectId, title };\n if (body !== undefined) input.body = body;\n if (experimentId !== undefined) input.experimentId = experimentId;\n if (runId !== undefined) input.runId = runId;\n if (fileIds !== undefined) input.fileIds = fileIds;\n if (tags !== undefined) input.tags = tags;\n\n const data = await ctx.gql.workspace.request<{\n labCreateNotebookEntry: Record<string, unknown>;\n }>(ops.CREATE_NOTEBOOK_ENTRY, { input });\n return jsonResult(data.labCreateNotebookEntry);\n } catch (error) {\n ctx.logger.error('labsofscience notebook_create failed', { error: String(error) });\n return errorResult(\n `Failed to create notebook entry: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'notebook_sign')),\n {\n title: 'Sign Notebook Entry',\n description:\n 'Sign an ELN entry for record integrity (locks editable content). Returns the signed entry.',\n inputSchema: { id: z.string().describe('Notebook entry ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n labSignNotebookEntry: Record<string, unknown>;\n }>(ops.SIGN_NOTEBOOK_ENTRY, { id });\n return jsonResult(data.labSignNotebookEntry);\n } catch (error) {\n ctx.logger.error('labsofscience notebook_sign failed', { error: String(error) });\n return errorResult(\n `Failed to sign notebook entry: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * Labsofscience health tool.\n *\n * Surface (1): health. Maps to the @public labHealth query (no auth required)\n * — a liveness/identity probe for the Labsofscience 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: 'Labsofscience Health Check',\n description:\n 'Public health probe for the Labsofscience subgraph (labHealth). Requires no authentication.',\n inputSchema: {},\n },\n async () => {\n try {\n const data = await ctx.gql.workspace.request<{ labHealth: string }>(ops.HEALTH, {});\n return jsonResult({ ok: true, status: data.labHealth });\n } catch (error) {\n ctx.logger.error('labsofscience health failed', { error: String(error) });\n return errorResult(\n `Labsofscience 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_PROJECTS, LIST_INSTRUMENTS, LIST_PIPELINES } from './operations.js';\n\n/**\n * Read-only Labsofscience 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 registerLabsofscienceResources(\n server: McpServer,\n ctx: McpContext,\n track: (uri: string) => string,\n): void {\n const schemaUri = track(mcpResourceUri(ctx.productName, 'schema'));\n const projectsUri = track(mcpResourceUri(ctx.productName, 'projects'));\n const instrumentsUri = track(mcpResourceUri(ctx.productName, 'instruments'));\n const pipelinesUri = track(mcpResourceUri(ctx.productName, 'pipelines'));\n\n // <product>://schema — domain overview\n server.registerResource(\n 'labsofscience-schema',\n schemaUri,\n {\n title: 'Labsofscience Domain Schema',\n description:\n 'Overview of the Labsofscience research 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 = `# Labsofscience Domain (Overview)\n\nScience & discovery platform — a research LIMS / ELN.\n\n## Entities\n- LabProject — a research project (has experiments)\n- LabExperiment — an experiment under a project (has runs)\n- LabExperimentRun — a reproducible run of an experiment\n- LabProtocol (+LabProtocolStep) — a versioned SOP with ordered steps\n- LabDataset (+LabDatasetVersion) — a dataset with immutable version snapshots\n- LabAnalysisPipeline (+LabPipelineRun) — reproducible analysis pipelines and runs\n- LabInstrument (+LabInstrumentBooking) — lab instruments and time-window bookings\n- LabInventoryItem — reagents/consumables/samples with stock tracking\n- LabNotebookEntry — electronic-lab-notebook (ELN) entries (signable)\n\n## Enums\n- LabProjectStatus: PLANNING, ACTIVE, ON_HOLD, COMPLETED, ARCHIVED\n- LabProjectVisibility: PRIVATE, WORKSPACE, PUBLIC\n- LabExperimentStatus: DESIGN, RUNNING, ANALYSIS, COMPLETE, ABANDONED\n- LabRunStatus: PLANNED, IN_PROGRESS, SUCCEEDED, FAILED, CANCELLED\n- LabProtocolStatus: DRAFT, PUBLISHED, DEPRECATED\n- LabStepKind: PREPARATION, INCUBATION, MEASUREMENT, ANALYSIS, CLEANUP, SAFETY\n- LabDatasetKind: RAW, PROCESSED, RESULT, REFERENCE\n- LabDatasetStatus: ACTIVE, LOCKED, ARCHIVED\n- LabPipelineRunStatus: QUEUED, RUNNING, SUCCEEDED, FAILED, CANCELLED\n- LabInstrumentStatus: AVAILABLE, IN_USE, MAINTENANCE, OFFLINE\n- LabBookingStatus: REQUESTED, CONFIRMED, COMPLETED, CANCELLED\n- LabInventoryCategory: REAGENT, CHEMICAL, BIOLOGICAL, CONSUMABLE, SAMPLE, EQUIPMENT_PART\n- LabInventoryStatus: IN_STOCK, LOW, OUT_OF_STOCK, EXPIRED, QUARANTINED\n- LabNotebookEntryStatus: DRAFT, SUBMITTED, SIGNED, WITNESSED, VOID\n\n## Tool groups\nprojects, experiments, runs, protocols, datasets, pipelines, instruments, inventory, notebook, health.\nList queries return { items, pageInfo } connections and accept a PaginationInput { limit, offset, cursor };\ninstruments_list and pipelines_list return plain arrays. 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>://projects — research project directory\n server.registerResource(\n 'labsofscience-projects',\n projectsUri,\n {\n title: 'Labsofscience Project Directory',\n description: 'The first 50 research projects in the bound workspace.',\n mimeType: 'application/json',\n },\n async () => {\n ctx.logger.debug(`Resource ${projectsUri} requested`);\n try {\n const data = await ctx.gql.workspace.request<{ labListProjects: unknown }>(LIST_PROJECTS, {\n pagination: { limit: 50, offset: 0 },\n });\n return {\n contents: [\n {\n uri: projectsUri,\n text: JSON.stringify(data.labListProjects, null, 2),\n mimeType: 'application/json',\n },\n ],\n };\n } catch (error) {\n return {\n contents: [\n {\n uri: projectsUri,\n text: JSON.stringify({\n error: error instanceof Error ? error.message : String(error),\n }),\n mimeType: 'application/json',\n },\n ],\n };\n }\n },\n );\n\n // <product>://instruments — instrument catalog\n server.registerResource(\n 'labsofscience-instruments',\n instrumentsUri,\n {\n title: 'Labsofscience Instrument Catalog',\n description: 'All lab instruments in the bound workspace.',\n mimeType: 'application/json',\n },\n async () => {\n ctx.logger.debug(`Resource ${instrumentsUri} requested`);\n try {\n const data = await ctx.gql.workspace.request<{ labListInstruments: unknown }>(\n LIST_INSTRUMENTS,\n {},\n );\n return {\n contents: [\n {\n uri: instrumentsUri,\n text: JSON.stringify(data.labListInstruments, null, 2),\n mimeType: 'application/json',\n },\n ],\n };\n } catch (error) {\n return {\n contents: [\n {\n uri: instrumentsUri,\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>://pipelines — analysis pipeline catalog\n server.registerResource(\n 'labsofscience-pipelines',\n pipelinesUri,\n {\n title: 'Labsofscience Analysis Pipelines',\n description: 'All analysis pipelines in the bound workspace.',\n mimeType: 'application/json',\n },\n async () => {\n ctx.logger.debug(`Resource ${pipelinesUri} requested`);\n try {\n const data = await ctx.gql.workspace.request<{ labListPipelines: unknown }>(\n LIST_PIPELINES,\n {},\n );\n return {\n contents: [\n {\n uri: pipelinesUri,\n text: JSON.stringify(data.labListPipelines, null, 2),\n mimeType: 'application/json',\n },\n ],\n };\n } catch (error) {\n return {\n contents: [\n {\n uri: pipelinesUri,\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 * Labsofscience MCP prompts — guided multi-step workflows. Names are\n * product-prefixed via mcpPromptName and tracked at function entry.\n */\nexport function registerLabsofsciencePrompts(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n const p = ctx.productName;\n const setupName = track(mcpPromptName(p, 'experiment-setup'));\n const opsName = track(mcpPromptName(p, 'lab-operations'));\n\n // <product>-experiment-setup — stand up a project + protocol + experiment + run\n server.registerPrompt(\n setupName,\n {\n title: 'Experiment Setup',\n description:\n 'Guide for standing up a reproducible experiment end to end: create the project, author + publish a protocol, create the experiment, start a run, and register a dataset.',\n argsSchema: {\n projectName: z.string().optional().describe('Research project name'),\n field: z.string().optional().describe('Scientific field / discipline'),\n },\n },\n ({ projectName, field }) => {\n ctx.logger.debug(`Prompt ${setupName} called`, { projectName, field });\n const nameNote = projectName\n ? `Use the project name \"${projectName}\".`\n : 'Ask the user for the project name.';\n const fieldNote = field ? `Field: ${field}.` : 'Optionally capture the scientific field.';\n return {\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: `Help me set up a reproducible Labsofscience experiment.\n\n1. **Create Project**: Use ${p}_projects_create. ${nameNote} ${fieldNote} Optionally set principalInvestigatorId and visibility.\n2. **Author Protocol**: Use ${p}_protocols_create, then add ordered steps with ${p}_protocols_add_step (set kind per step), and ${p}_protocols_publish to freeze the version.\n3. **Create Experiment**: Use ${p}_experiments_create under the new projectId, referencing the published protocolId and a hypothesis + variables JSON.\n4. **Start a Run**: Use ${p}_runs_start with the experimentId and parameters; later close it with ${p}_runs_complete (status SUCCEEDED/FAILED) and observations.\n5. **Register Dataset**: Use ${p}_datasets_create for the run output, then ${p}_datasets_add_version with the fileId snapshot.\n6. **Advance**: Use ${p}_experiments_transition to move DESIGN → RUNNING → ANALYSIS → COMPLETE.\n\nShow results at each step and confirm before publishing the protocol.`,\n },\n },\n ],\n };\n },\n );\n\n // <product>-lab-operations — daily lab operations\n server.registerPrompt(\n opsName,\n {\n title: 'Lab Operations',\n description:\n 'Daily lab operations workflow: check instrument availability + bookings, restock low inventory, run analysis pipelines, and sign off notebook entries.',\n argsSchema: {\n projectId: z.string().optional().describe('Project ID to focus on'),\n },\n },\n ({ projectId }) => {\n ctx.logger.debug(`Prompt ${opsName} called`, { projectId });\n const projectNote = projectId\n ? `Focus on project \"${projectId}\".`\n : `First list projects with ${p}_projects_list and pick one.`;\n return {\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: `Run daily Labsofscience lab operations. ${projectNote}\n\n1. **Instruments**: Use ${p}_instruments_list (status AVAILABLE) to see free instruments; book one with ${p}_instruments_book for an upcoming run, or cancel stale holds with ${p}_bookings_cancel.\n2. **Inventory**: Use ${p}_inventory_list with status=LOW (and OUT_OF_STOCK) to find items to restock, then ${p}_inventory_adjust with a positive delta to record receipts.\n3. **Pipelines**: Use ${p}_pipelines_list and ${p}_pipeline_runs_list (status QUEUED/RUNNING) to monitor analysis; trigger new work with ${p}_pipelines_run and advance with ${p}_pipeline_runs_transition.\n4. **Notebook**: Use ${p}_notebook_list (status SUBMITTED) for the project and sign approved entries with ${p}_notebook_sign.\n5. **Experiments**: Use ${p}_experiments_list filtered by projectId to review status and surface runs needing completion via ${p}_runs_list.\n\nSummarize what needs attention after each step.`,\n },\n },\n ],\n };\n },\n );\n}\n","/**\n * Labsofscience module — domain module for the future-products ecosystem program.\n *\n * Covers all @key entities of wspace-labsofscience-svc grouped into per-entity\n * sub-APIs: projects, experiments, runs, protocols, datasets, pipelines,\n * instruments, inventory, notebook, health. Mirrors the rich kadaikodi/\n * vibecontrols modules' structure (tools/<entity>.ts + resources.ts +\n * prompts.ts) and the canonical tags module's typing discipline.\n *\n * Backend: ~/products/labsofscience/wspace-labsofscience-svc/\n * (Hive service name `labsofscience`). All operations run against the WORKSPACE\n * gateway; the @public labHealth probe is exposed as `<product>_health`.\n */\n\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { McpContext, McpModule, ModuleRegistration } from '../../core/index.js';\nimport { registerProjectTools } from './tools/projects.js';\nimport { registerExperimentTools } from './tools/experiments.js';\nimport { registerRunTools } from './tools/runs.js';\nimport { registerProtocolTools } from './tools/protocols.js';\nimport { registerDatasetTools } from './tools/datasets.js';\nimport { registerPipelineTools } from './tools/pipelines.js';\nimport { registerInstrumentTools } from './tools/instruments.js';\nimport { registerInventoryTools } from './tools/inventory.js';\nimport { registerNotebookTools } from './tools/notebook.js';\nimport { registerHealthTools } from './tools/health.js';\nimport { registerLabsofscienceResources } from './resources.js';\nimport { registerLabsofsciencePrompts } from './prompts.js';\n\nconst labsofscienceModule: McpModule = {\n id: 'labsofscience',\n version: '0.0.1',\n displayName: 'Labsofscience',\n dependsOn: ['auth'],\n capabilities: { tools: {}, resources: {}, prompts: {} },\n\n register(server: McpServer, ctx: McpContext): ModuleRegistration {\n const tools: string[] = [];\n const resources: string[] = [];\n const prompts: string[] = [];\n\n const trackTool = (n: string): string => {\n tools.push(n);\n return n;\n };\n const trackResource = (uri: string): string => {\n resources.push(uri);\n return uri;\n };\n const trackPrompt = (n: string): string => {\n prompts.push(n);\n return n;\n };\n\n registerProjectTools(server, ctx, trackTool);\n registerExperimentTools(server, ctx, trackTool);\n registerRunTools(server, ctx, trackTool);\n registerProtocolTools(server, ctx, trackTool);\n registerDatasetTools(server, ctx, trackTool);\n registerPipelineTools(server, ctx, trackTool);\n registerInstrumentTools(server, ctx, trackTool);\n registerInventoryTools(server, ctx, trackTool);\n registerNotebookTools(server, ctx, trackTool);\n registerHealthTools(server, ctx, trackTool);\n\n registerLabsofscienceResources(server, ctx, trackResource);\n registerLabsofsciencePrompts(server, ctx, trackPrompt);\n\n return { tools, resources, prompts };\n },\n};\n\nexport default labsofscienceModule;\n"]}
1
+ {"version":3,"sources":["../../../src/core/errors.ts","../../../src/core/tool-name.ts","../../../src/core/result.ts","../../../src/modules/labsofscience/operations.ts","../../../src/modules/labsofscience/tools/shared.ts","../../../src/modules/labsofscience/tools/projects.ts","../../../src/modules/labsofscience/tools/experiments.ts","../../../src/modules/labsofscience/tools/runs.ts","../../../src/modules/labsofscience/tools/protocols.ts","../../../src/modules/labsofscience/tools/datasets.ts","../../../src/modules/labsofscience/tools/pipelines.ts","../../../src/modules/labsofscience/tools/instruments.ts","../../../src/modules/labsofscience/tools/inventory.ts","../../../src/modules/labsofscience/tools/notebook.ts","../../../src/modules/labsofscience/tools/health.ts","../../../src/modules/labsofscience/resources.ts","../../../src/modules/labsofscience/prompts.ts","../../../src/modules/labsofscience/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 Labsofscience MCP module.\n *\n * Labsofscience is the science & discovery platform — a research LIMS / ELN\n * (projects, experiments, runs, protocols, datasets, analysis pipelines,\n * instruments, inventory, notebook). Backend subgraph:\n * ~/products/labsofscience/wspace-labsofscience-svc/ (Hive service name\n * `labsofscience`).\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 — Labsofscience inputs do NOT carry a workspaceId.\n *\n * Every Query/Mutation root field is named by its REAL backend name (all are\n * consistently `lab*`-prefixed). ALL list queries — including\n * labListInstruments and labListPipelines — return `{ items, pageInfo }`\n * connections and take a `PaginationInput { limit, offset, cursor }` (BOFF-3611:\n * an earlier version of this module treated those two as plain arrays and\n * selected fields directly on the Connection type, which the gateway rejects\n * as a GraphQL validation error at runtime — do not reintroduce that shape).\n *\n * Uses template-string interpolation (not gql tagged fragments) to match the\n * canonical vibecontrols/kadaikodi modules' operations files.\n */\n\n// ---------------------------------------------------------------------------\n// Field fragments\n// ---------------------------------------------------------------------------\n\nexport const PROJECT_FIELDS = `\n id code name description field status visibility principalInvestigatorId\n startDate endDate tags workspaceId createdAt updatedAt\n`;\n\nexport const EXPERIMENT_FIELDS = `\n id title description hypothesis status projectId protocolId leadResearcherId\n variables tags workspaceId createdAt updatedAt\n`;\n\nexport const RUN_FIELDS = `\n id experimentId runNumber status parameters observations notes performedById\n startedAt completedAt workspaceId createdAt updatedAt\n`;\n\nexport const PROTOCOL_STEP_FIELDS = `\n id protocolId ordinal instruction kind durationMinutes isCritical\n workspaceId createdAt updatedAt\n`;\n\nexport const PROTOCOL_FIELDS = `\n id name summary status version estimatedMinutes materials safetyNotes\n authorId publishedAt tags workspaceId createdAt updatedAt\n`;\n\nexport const DATASET_VERSION_FIELDS = `\n id datasetId version sizeBytes rowCount checksum changeNote\n file { id } workspaceId createdAt updatedAt\n`;\n\nexport const DATASET_FIELDS = `\n id name description kind status latestVersion experimentId projectId\n tags workspaceId createdAt updatedAt\n`;\n\nexport const PIPELINE_FIELDS = `\n id name description engine definition version isActive projectId tags\n workspaceId createdAt updatedAt\n`;\n\nexport const PIPELINE_RUN_FIELDS = `\n id pipelineId datasetId datasetVersionId outputDatasetId status parameters\n log triggeredById startedAt finishedAt workspaceId createdAt updatedAt\n`;\n\nexport const BOOKING_FIELDS = `\n id instrumentId experimentId bookedById startTime endTime status purpose\n workspaceId createdAt updatedAt\n`;\n\nexport const INSTRUMENT_FIELDS = `\n id name model location status requiresApproval custodianId tags\n workspaceId createdAt updatedAt\n`;\n\nexport const INVENTORY_FIELDS = `\n id name category status quantity unit reorderLevel location vendor\n catalogNumber lotNumber expiresAt sds { id } tags workspaceId\n createdAt updatedAt\n`;\n\nexport const NOTEBOOK_FIELDS = `\n id title body status projectId experimentId runId authorId signedById\n signedAt witnessedById witnessedAt files { id } tags workspaceId\n createdAt updatedAt\n`;\n\nconst PAGE_INFO = `pageInfo { cursor hasMore }`;\n\n// ---------------------------------------------------------------------------\n// Projects\n// ---------------------------------------------------------------------------\n\nexport const GET_PROJECT = `\n query LabsofscienceGetProject($id: ID!) {\n labProject(id: $id) {\n ${PROJECT_FIELDS}\n experiments { id title status }\n }\n }\n`;\n\nexport const LIST_PROJECTS = `\n query LabsofscienceListProjects($status: LabProjectStatus, $pagination: PaginationInput) {\n labListProjects(status: $status, pagination: $pagination) {\n items { ${PROJECT_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_PROJECT = `\n mutation LabsofscienceCreateProject($input: LabCreateProjectInput!) {\n labCreateProject(input: $input) {\n ${PROJECT_FIELDS}\n }\n }\n`;\n\nexport const UPDATE_PROJECT = `\n mutation LabsofscienceUpdateProject($id: ID!, $input: LabUpdateProjectInput!) {\n labUpdateProject(id: $id, input: $input) {\n ${PROJECT_FIELDS}\n }\n }\n`;\n\nexport const ARCHIVE_PROJECT = `\n mutation LabsofscienceArchiveProject($id: ID!) {\n labArchiveProject(id: $id)\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Experiments\n// ---------------------------------------------------------------------------\n\nexport const GET_EXPERIMENT = `\n query LabsofscienceGetExperiment($id: ID!) {\n labExperiment(id: $id) {\n ${EXPERIMENT_FIELDS}\n project { id name }\n runs { id runNumber status }\n }\n }\n`;\n\nexport const LIST_EXPERIMENTS = `\n query LabsofscienceListExperiments(\n $projectId: ID\n $status: LabExperimentStatus\n $pagination: PaginationInput\n ) {\n labListExperiments(projectId: $projectId, status: $status, pagination: $pagination) {\n items { ${EXPERIMENT_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_EXPERIMENT = `\n mutation LabsofscienceCreateExperiment($input: LabCreateExperimentInput!) {\n labCreateExperiment(input: $input) {\n ${EXPERIMENT_FIELDS}\n }\n }\n`;\n\nexport const UPDATE_EXPERIMENT = `\n mutation LabsofscienceUpdateExperiment($id: ID!, $input: LabUpdateExperimentInput!) {\n labUpdateExperiment(id: $id, input: $input) {\n ${EXPERIMENT_FIELDS}\n }\n }\n`;\n\nexport const TRANSITION_EXPERIMENT = `\n mutation LabsofscienceTransitionExperiment($id: ID!, $status: LabExperimentStatus!) {\n labTransitionExperiment(id: $id, status: $status) {\n ${EXPERIMENT_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Experiment runs\n// ---------------------------------------------------------------------------\n\nexport const LIST_RUNS = `\n query LabsofscienceListRuns(\n $experimentId: ID\n $status: LabRunStatus\n $pagination: PaginationInput\n ) {\n labListRuns(experimentId: $experimentId, status: $status, pagination: $pagination) {\n items { ${RUN_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const START_RUN = `\n mutation LabsofscienceStartRun($input: LabCreateRunInput!) {\n labStartRun(input: $input) {\n ${RUN_FIELDS}\n }\n }\n`;\n\nexport const COMPLETE_RUN = `\n mutation LabsofscienceCompleteRun(\n $id: ID!\n $status: LabRunStatus!\n $input: LabRecordRunResultsInput\n ) {\n labCompleteRun(id: $id, status: $status, input: $input) {\n ${RUN_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Protocols (+ steps)\n// ---------------------------------------------------------------------------\n\nexport const GET_PROTOCOL = `\n query LabsofscienceGetProtocol($id: ID!) {\n labProtocol(id: $id) {\n ${PROTOCOL_FIELDS}\n steps { ${PROTOCOL_STEP_FIELDS} }\n }\n }\n`;\n\nexport const LIST_PROTOCOLS = `\n query LabsofscienceListProtocols($status: LabProtocolStatus, $pagination: PaginationInput) {\n labListProtocols(status: $status, pagination: $pagination) {\n items { ${PROTOCOL_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_PROTOCOL = `\n mutation LabsofscienceCreateProtocol($input: LabCreateProtocolInput!) {\n labCreateProtocol(input: $input) {\n ${PROTOCOL_FIELDS}\n }\n }\n`;\n\nexport const UPDATE_PROTOCOL = `\n mutation LabsofscienceUpdateProtocol($id: ID!, $input: LabUpdateProtocolInput!) {\n labUpdateProtocol(id: $id, input: $input) {\n ${PROTOCOL_FIELDS}\n }\n }\n`;\n\nexport const ADD_PROTOCOL_STEP = `\n mutation LabsofscienceAddProtocolStep($input: LabAddProtocolStepInput!) {\n labAddProtocolStep(input: $input) {\n ${PROTOCOL_STEP_FIELDS}\n }\n }\n`;\n\nexport const PUBLISH_PROTOCOL = `\n mutation LabsofsciencePublishProtocol($id: ID!) {\n labPublishProtocol(id: $id) {\n ${PROTOCOL_FIELDS}\n steps { ${PROTOCOL_STEP_FIELDS} }\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Datasets (+ versions)\n// ---------------------------------------------------------------------------\n\nexport const GET_DATASET = `\n query LabsofscienceGetDataset($id: ID!) {\n labDataset(id: $id) {\n ${DATASET_FIELDS}\n versions { ${DATASET_VERSION_FIELDS} }\n }\n }\n`;\n\nexport const LIST_DATASETS = `\n query LabsofscienceListDatasets(\n $kind: LabDatasetKind\n $status: LabDatasetStatus\n $pagination: PaginationInput\n ) {\n labListDatasets(kind: $kind, status: $status, pagination: $pagination) {\n items { ${DATASET_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_DATASET = `\n mutation LabsofscienceCreateDataset($input: LabCreateDatasetInput!) {\n labCreateDataset(input: $input) {\n ${DATASET_FIELDS}\n }\n }\n`;\n\nexport const ADD_DATASET_VERSION = `\n mutation LabsofscienceAddDatasetVersion($input: LabAddDatasetVersionInput!) {\n labAddDatasetVersion(input: $input) {\n ${DATASET_VERSION_FIELDS}\n }\n }\n`;\n\nexport const ARCHIVE_DATASET = `\n mutation LabsofscienceArchiveDataset($id: ID!) {\n labArchiveDataset(id: $id)\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Analysis pipelines (+ runs)\n// ---------------------------------------------------------------------------\n\nexport const LIST_PIPELINES = `\n query LabsofscienceListPipelines($pagination: PaginationInput) {\n labListPipelines(pagination: $pagination) {\n items { ${PIPELINE_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_PIPELINE = `\n mutation LabsofscienceCreatePipeline($input: LabCreatePipelineInput!) {\n labCreatePipeline(input: $input) {\n ${PIPELINE_FIELDS}\n }\n }\n`;\n\nexport const LIST_PIPELINE_RUNS = `\n query LabsofscienceListPipelineRuns(\n $pipelineId: ID\n $status: LabPipelineRunStatus\n $pagination: PaginationInput\n ) {\n labListPipelineRuns(pipelineId: $pipelineId, status: $status, pagination: $pagination) {\n items { ${PIPELINE_RUN_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const RUN_PIPELINE = `\n mutation LabsofscienceRunPipeline($input: LabRunPipelineInput!) {\n labRunPipeline(input: $input) {\n ${PIPELINE_RUN_FIELDS}\n }\n }\n`;\n\nexport const TRANSITION_PIPELINE_RUN = `\n mutation LabsofscienceTransitionPipelineRun(\n $id: ID!\n $status: LabPipelineRunStatus!\n $log: String\n ) {\n labTransitionPipelineRun(id: $id, status: $status, log: $log) {\n ${PIPELINE_RUN_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Instruments (+ bookings)\n// ---------------------------------------------------------------------------\n\nexport const GET_INSTRUMENT = `\n query LabsofscienceGetInstrument($id: ID!) {\n labInstrument(id: $id) {\n ${INSTRUMENT_FIELDS}\n bookings { ${BOOKING_FIELDS} }\n }\n }\n`;\n\nexport const LIST_INSTRUMENTS = `\n query LabsofscienceListInstruments(\n $status: LabInstrumentStatus\n $search: String\n $pagination: PaginationInput\n ) {\n labListInstruments(status: $status, search: $search, pagination: $pagination) {\n items { ${INSTRUMENT_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_INSTRUMENT = `\n mutation LabsofscienceCreateInstrument($input: LabCreateInstrumentInput!) {\n labCreateInstrument(input: $input) {\n ${INSTRUMENT_FIELDS}\n }\n }\n`;\n\nexport const BOOK_INSTRUMENT = `\n mutation LabsofscienceBookInstrument($input: LabBookInstrumentInput!) {\n labBookInstrument(input: $input) {\n ${BOOKING_FIELDS}\n }\n }\n`;\n\nexport const CANCEL_BOOKING = `\n mutation LabsofscienceCancelBooking($id: ID!) {\n labCancelBooking(id: $id) {\n ${BOOKING_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Inventory\n// ---------------------------------------------------------------------------\n\nexport const GET_INVENTORY_ITEM = `\n query LabsofscienceGetInventoryItem($id: ID!) {\n labInventoryItem(id: $id) {\n ${INVENTORY_FIELDS}\n }\n }\n`;\n\nexport const LIST_INVENTORY_ITEMS = `\n query LabsofscienceListInventoryItems(\n $category: LabInventoryCategory\n $status: LabInventoryStatus\n $pagination: PaginationInput\n ) {\n labListInventoryItems(category: $category, status: $status, pagination: $pagination) {\n items { ${INVENTORY_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_INVENTORY_ITEM = `\n mutation LabsofscienceCreateInventoryItem($input: LabCreateInventoryItemInput!) {\n labCreateInventoryItem(input: $input) {\n ${INVENTORY_FIELDS}\n }\n }\n`;\n\nexport const ADJUST_INVENTORY = `\n mutation LabsofscienceAdjustInventory($id: ID!, $input: LabAdjustInventoryInput!) {\n labAdjustInventory(id: $id, input: $input) {\n ${INVENTORY_FIELDS}\n }\n }\n`;\n\nexport const ARCHIVE_INVENTORY_ITEM = `\n mutation LabsofscienceArchiveInventoryItem($id: ID!) {\n labArchiveInventoryItem(id: $id)\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Notebook (ELN)\n// ---------------------------------------------------------------------------\n\nexport const LIST_NOTEBOOK_ENTRIES = `\n query LabsofscienceListNotebookEntries(\n $projectId: ID\n $experimentId: ID\n $status: LabNotebookEntryStatus\n $pagination: PaginationInput\n ) {\n labListNotebookEntries(\n projectId: $projectId\n experimentId: $experimentId\n status: $status\n pagination: $pagination\n ) {\n items { ${NOTEBOOK_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const GET_NOTEBOOK_ENTRY = `\n query LabsofscienceGetNotebookEntry($id: ID!) {\n labNotebookEntry(id: $id) {\n ${NOTEBOOK_FIELDS}\n }\n }\n`;\n\nexport const CREATE_NOTEBOOK_ENTRY = `\n mutation LabsofscienceCreateNotebookEntry($input: LabCreateNotebookEntryInput!) {\n labCreateNotebookEntry(input: $input) {\n ${NOTEBOOK_FIELDS}\n }\n }\n`;\n\nexport const SIGN_NOTEBOOK_ENTRY = `\n mutation LabsofscienceSignNotebookEntry($id: ID!) {\n labSignNotebookEntry(id: $id) {\n ${NOTEBOOK_FIELDS}\n }\n }\n`;\n\nexport const WITNESS_NOTEBOOK_ENTRY = `\n mutation LabsofscienceWitnessNotebookEntry($id: ID!) {\n labWitnessNotebookEntry(id: $id) {\n ${NOTEBOOK_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Health\n// ---------------------------------------------------------------------------\n\nexport const HEALTH = `\n query LabsofscienceHealth {\n labHealth\n }\n`;\n","/**\n * Shared zod schemas for the Labsofscience tool surface.\n *\n * Every backend enum is mirrored as a tight zod enum so Claude Desktop\n * grounds tool calls against the exact allowed values. The `JSON` scalar\n * inputs (variables, observations, parameters, definition) are modelled as a\n * permissive object record — the backend accepts arbitrary JSON, but a record\n * shape gives the LLM a typed hint.\n */\n\nimport { z } from 'zod';\n\nexport const ProjectStatusEnum = z\n .enum(['ACTIVE', 'ARCHIVED', 'COMPLETED', 'ON_HOLD', 'PLANNING'])\n .describe('Lifecycle status of a research project');\n\nexport const ProjectVisibilityEnum = z\n .enum(['PRIVATE', 'PUBLIC', 'WORKSPACE'])\n .describe('Visibility scope of a research project');\n\nexport const ExperimentStatusEnum = z\n .enum(['ABANDONED', 'ANALYSIS', 'COMPLETE', 'DESIGN', 'RUNNING'])\n .describe('Lifecycle status of an experiment');\n\nexport const RunStatusEnum = z\n .enum(['CANCELLED', 'FAILED', 'IN_PROGRESS', 'PLANNED', 'SUCCEEDED'])\n .describe('Status of an experiment run');\n\nexport const ProtocolStatusEnum = z\n .enum(['DEPRECATED', 'DRAFT', 'PUBLISHED'])\n .describe('Lifecycle status of a protocol');\n\nexport const StepKindEnum = z\n .enum(['ANALYSIS', 'CLEANUP', 'INCUBATION', 'MEASUREMENT', 'PREPARATION', 'SAFETY'])\n .describe('Kind of a protocol step');\n\nexport const DatasetKindEnum = z\n .enum(['PROCESSED', 'RAW', 'REFERENCE', 'RESULT'])\n .describe('Kind/classification of a dataset');\n\nexport const DatasetStatusEnum = z\n .enum(['ACTIVE', 'ARCHIVED', 'LOCKED'])\n .describe('Lifecycle status of a dataset');\n\nexport const PipelineRunStatusEnum = z\n .enum(['CANCELLED', 'FAILED', 'QUEUED', 'RUNNING', 'SUCCEEDED'])\n .describe('Execution status of an analysis-pipeline run');\n\nexport const InstrumentStatusEnum = z\n .enum(['AVAILABLE', 'IN_USE', 'MAINTENANCE', 'OFFLINE'])\n .describe('Availability status of a lab instrument');\n\nexport const InventoryCategoryEnum = z\n .enum(['BIOLOGICAL', 'CHEMICAL', 'CONSUMABLE', 'EQUIPMENT_PART', 'REAGENT', 'SAMPLE'])\n .describe('Category of an inventory item');\n\nexport const InventoryStatusEnum = z\n .enum(['EXPIRED', 'IN_STOCK', 'LOW', 'OUT_OF_STOCK', 'QUARANTINED'])\n .describe('Stock status of an inventory item');\n\nexport const NotebookEntryStatusEnum = z\n .enum(['DRAFT', 'SIGNED', 'SUBMITTED', 'VOID', 'WITNESSED'])\n .describe('Status of an electronic-lab-notebook (ELN) entry');\n\n/** Permissive JSON-object schema for `JSON` scalar inputs. */\nexport const JsonObject = z.record(z.string(), z.unknown());\n","/**\n * Labsofscience research-project tools.\n *\n * Surface (5): projects_{get,list,create,update,archive}. Backed by\n * labProject / labListProjects / labCreateProject / labUpdateProject /\n * labArchiveProject — all called by their REAL names in operations.ts.\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 { ProjectStatusEnum, ProjectVisibilityEnum } from './shared.js';\n\nexport function registerProjectTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'projects_get')),\n {\n title: 'Get Research Project',\n description: 'Fetch a single research project by ID, including its experiments.',\n inputSchema: { id: z.string().describe('Project ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n labProject: Record<string, unknown> | null;\n }>(ops.GET_PROJECT, { id });\n if (!data.labProject) return errorResult(`Project ${id} not found`);\n return jsonResult(data.labProject);\n } catch (error) {\n ctx.logger.error('labsofscience projects_get failed', { error: String(error) });\n return errorResult(\n `Failed to get project: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'projects_list')),\n {\n title: 'List Research Projects',\n description:\n 'List research projects in the bound workspace with optional status filter and pagination. Returns a connection ({ items, pageInfo }).',\n inputSchema: {\n status: ProjectStatusEnum.optional().describe('Filter by project status'),\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n cursor: z.string().optional().describe('Opaque pagination cursor'),\n },\n },\n async ({ status, limit, offset, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n labListProjects: Record<string, unknown>;\n }>(ops.LIST_PROJECTS, {\n status,\n pagination: { limit: limit ?? 50, offset: offset ?? 0, cursor },\n });\n return jsonResult(data.labListProjects);\n } catch (error) {\n ctx.logger.error('labsofscience projects_list failed', { error: String(error) });\n return errorResult(\n `Failed to list projects: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'projects_create')),\n {\n title: 'Create Research Project',\n description:\n 'Create a research project. `name` is required; `code` (if provided) should be unique within the workspace.',\n inputSchema: {\n name: z.string().min(1).describe('Project name'),\n code: z.string().optional().describe('Short project code (unique within workspace)'),\n description: z.string().optional().describe('Project description'),\n field: z.string().optional().describe('Scientific field / discipline'),\n principalInvestigatorId: z.string().optional().describe('User ID of the PI'),\n status: ProjectStatusEnum.optional().describe('Initial status (default PLANNING)'),\n visibility: ProjectVisibilityEnum.optional().describe('Visibility (default WORKSPACE)'),\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('Discovery tags'),\n },\n },\n async ({\n name,\n code,\n description,\n field,\n principalInvestigatorId,\n status,\n visibility,\n startDate,\n endDate,\n tags,\n }) => {\n try {\n const input: Record<string, unknown> = { name };\n if (code !== undefined) input.code = code;\n if (description !== undefined) input.description = description;\n if (field !== undefined) input.field = field;\n if (principalInvestigatorId !== undefined)\n input.principalInvestigatorId = principalInvestigatorId;\n if (status !== undefined) input.status = status;\n if (visibility !== undefined) input.visibility = visibility;\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 labCreateProject: Record<string, unknown>;\n }>(ops.CREATE_PROJECT, { input });\n return jsonResult(data.labCreateProject);\n } catch (error) {\n ctx.logger.error('labsofscience projects_create failed', { error: String(error) });\n return errorResult(\n `Failed to create project: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'projects_update')),\n {\n title: 'Update Research Project',\n description:\n 'Update a research project. At least one mutable field must be provided. Use `status` to advance the project lifecycle.',\n inputSchema: {\n id: z.string().describe('Project ID'),\n name: z.string().optional().describe('Updated name'),\n code: z.string().optional().describe('Updated code'),\n description: z.string().optional().describe('Updated description'),\n field: z.string().optional().describe('Updated field/discipline'),\n principalInvestigatorId: z.string().optional().describe('Updated PI user ID'),\n status: ProjectStatusEnum.optional().describe('Updated status'),\n visibility: ProjectVisibilityEnum.optional().describe('Updated visibility'),\n startDate: z.string().optional().describe('Updated start date (ISO-8601)'),\n endDate: z.string().optional().describe('Updated end date (ISO-8601)'),\n tags: z.array(z.string()).optional().describe('Updated tags'),\n },\n },\n async ({\n id,\n name,\n code,\n description,\n field,\n principalInvestigatorId,\n status,\n visibility,\n startDate,\n endDate,\n tags,\n }) => {\n try {\n const input: Record<string, unknown> = {};\n if (name !== undefined) input.name = name;\n if (code !== undefined) input.code = code;\n if (description !== undefined) input.description = description;\n if (field !== undefined) input.field = field;\n if (principalInvestigatorId !== undefined)\n input.principalInvestigatorId = principalInvestigatorId;\n if (status !== undefined) input.status = status;\n if (visibility !== undefined) input.visibility = visibility;\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('No updates specified — provide at least one mutable project field');\n }\n\n const data = await ctx.gql.workspace.request<{\n labUpdateProject: Record<string, unknown>;\n }>(ops.UPDATE_PROJECT, { id, input });\n return jsonResult(data.labUpdateProject);\n } catch (error) {\n ctx.logger.error('labsofscience projects_update failed', { error: String(error) });\n return errorResult(\n `Failed to update project: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'projects_archive')),\n {\n title: 'Archive Research Project',\n description: 'Archive a research project. Returns true on success.',\n inputSchema: { id: z.string().describe('Project ID') },\n // BOFF-3611: irreversible via this tool surface — see datasets.ts's\n // datasets_archive for why this is an explicit per-tool override\n // rather than a fleet-wide tool-name.ts regex change.\n annotations: { destructiveHint: true },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ labArchiveProject: boolean }>(\n ops.ARCHIVE_PROJECT,\n { id },\n );\n return jsonResult({ archived: data.labArchiveProject, id });\n } catch (error) {\n ctx.logger.error('labsofscience projects_archive failed', { error: String(error) });\n return errorResult(\n `Failed to archive project: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * Labsofscience experiment tools.\n *\n * Surface (5): experiments_{get,list,create,update,transition}. Backed by\n * labExperiment / labListExperiments / labCreateExperiment /\n * labUpdateExperiment / labTransitionExperiment.\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 { ExperimentStatusEnum, JsonObject } from './shared.js';\n\nexport function registerExperimentTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'experiments_get')),\n {\n title: 'Get Experiment',\n description: 'Fetch a single experiment by ID, including its parent project and runs.',\n inputSchema: { id: z.string().describe('Experiment ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n labExperiment: Record<string, unknown> | null;\n }>(ops.GET_EXPERIMENT, { id });\n if (!data.labExperiment) return errorResult(`Experiment ${id} not found`);\n return jsonResult(data.labExperiment);\n } catch (error) {\n ctx.logger.error('labsofscience experiments_get failed', { error: String(error) });\n return errorResult(\n `Failed to get experiment: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'experiments_list')),\n {\n title: 'List Experiments',\n description:\n 'List experiments, optionally filtered by project and/or status, with pagination. Returns a connection ({ items, pageInfo }).',\n inputSchema: {\n projectId: z.string().optional().describe('Filter by project ID'),\n status: ExperimentStatusEnum.optional().describe('Filter by experiment status'),\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n cursor: z.string().optional().describe('Opaque pagination cursor'),\n },\n },\n async ({ projectId, status, limit, offset, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n labListExperiments: Record<string, unknown>;\n }>(ops.LIST_EXPERIMENTS, {\n projectId,\n status,\n pagination: { limit: limit ?? 50, offset: offset ?? 0, cursor },\n });\n return jsonResult(data.labListExperiments);\n } catch (error) {\n ctx.logger.error('labsofscience experiments_list failed', { error: String(error) });\n return errorResult(\n `Failed to list experiments: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'experiments_create')),\n {\n title: 'Create Experiment',\n description:\n 'Create an experiment under a project. `projectId` and `title` are required. `variables` is arbitrary JSON capturing the experimental design.',\n inputSchema: {\n projectId: z.string().min(1).describe('Owning project ID'),\n title: z.string().min(1).describe('Experiment title'),\n description: z.string().optional().describe('Experiment description'),\n hypothesis: z.string().optional().describe('Hypothesis under test'),\n protocolId: z.string().optional().describe('Protocol this experiment follows'),\n leadResearcherId: z.string().optional().describe('Lead researcher user ID'),\n variables: JsonObject.optional().describe('Experimental variables JSON'),\n tags: z.array(z.string()).optional().describe('Discovery tags'),\n },\n },\n async ({\n projectId,\n title,\n description,\n hypothesis,\n protocolId,\n leadResearcherId,\n variables,\n tags,\n }) => {\n try {\n const input: Record<string, unknown> = { projectId, title };\n if (description !== undefined) input.description = description;\n if (hypothesis !== undefined) input.hypothesis = hypothesis;\n if (protocolId !== undefined) input.protocolId = protocolId;\n if (leadResearcherId !== undefined) input.leadResearcherId = leadResearcherId;\n if (variables !== undefined) input.variables = variables;\n if (tags !== undefined) input.tags = tags;\n\n const data = await ctx.gql.workspace.request<{\n labCreateExperiment: Record<string, unknown>;\n }>(ops.CREATE_EXPERIMENT, { input });\n return jsonResult(data.labCreateExperiment);\n } catch (error) {\n ctx.logger.error('labsofscience experiments_create failed', { error: String(error) });\n return errorResult(\n `Failed to create experiment: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'experiments_update')),\n {\n title: 'Update Experiment',\n description:\n 'Update an experiment. At least one mutable field must be provided. To change lifecycle status use experiments_transition.',\n inputSchema: {\n id: z.string().describe('Experiment ID'),\n title: z.string().optional().describe('Updated title'),\n description: z.string().optional().describe('Updated description'),\n hypothesis: z.string().optional().describe('Updated hypothesis'),\n protocolId: z.string().optional().describe('Updated protocol ID'),\n leadResearcherId: z.string().optional().describe('Updated lead researcher user ID'),\n variables: JsonObject.optional().describe('Updated experimental variables JSON'),\n tags: z.array(z.string()).optional().describe('Updated tags'),\n },\n },\n async ({\n id,\n title,\n description,\n hypothesis,\n protocolId,\n leadResearcherId,\n variables,\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 (hypothesis !== undefined) input.hypothesis = hypothesis;\n if (protocolId !== undefined) input.protocolId = protocolId;\n if (leadResearcherId !== undefined) input.leadResearcherId = leadResearcherId;\n if (variables !== undefined) input.variables = variables;\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 mutable experiment field',\n );\n }\n\n const data = await ctx.gql.workspace.request<{\n labUpdateExperiment: Record<string, unknown>;\n }>(ops.UPDATE_EXPERIMENT, { id, input });\n return jsonResult(data.labUpdateExperiment);\n } catch (error) {\n ctx.logger.error('labsofscience experiments_update failed', { error: String(error) });\n return errorResult(\n `Failed to update experiment: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'experiments_transition')),\n {\n title: 'Transition Experiment',\n description:\n 'Advance an experiment through its lifecycle (DESIGN → RUNNING → ANALYSIS → COMPLETE, or ABANDONED). Transitions are validated server-side.',\n inputSchema: {\n id: z.string().describe('Experiment ID'),\n status: ExperimentStatusEnum.describe('Target status'),\n },\n },\n async ({ id, status }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n labTransitionExperiment: Record<string, unknown>;\n }>(ops.TRANSITION_EXPERIMENT, { id, status });\n return jsonResult(data.labTransitionExperiment);\n } catch (error) {\n ctx.logger.error('labsofscience experiments_transition failed', { error: String(error) });\n return errorResult(\n `Failed to transition experiment: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * Labsofscience experiment-run tools.\n *\n * Surface (3): runs_{list,start,complete}. Backed by labListRuns /\n * labStartRun / labCompleteRun. Runs are reproducible executions of an\n * experiment with auto-incremented runNumber.\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 { RunStatusEnum, JsonObject } from './shared.js';\n\nexport function registerRunTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'runs_list')),\n {\n title: 'List Experiment Runs',\n description:\n 'List experiment runs, optionally filtered by experiment and/or status, with pagination. Returns a connection ({ items, pageInfo }).',\n inputSchema: {\n experimentId: z.string().optional().describe('Filter by experiment ID'),\n status: RunStatusEnum.optional().describe('Filter by run status'),\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n cursor: z.string().optional().describe('Opaque pagination cursor'),\n },\n },\n async ({ experimentId, status, limit, offset, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n labListRuns: Record<string, unknown>;\n }>(ops.LIST_RUNS, {\n experimentId,\n status,\n pagination: { limit: limit ?? 50, offset: offset ?? 0, cursor },\n });\n return jsonResult(data.labListRuns);\n } catch (error) {\n ctx.logger.error('labsofscience runs_list failed', { error: String(error) });\n return errorResult(\n `Failed to list runs: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'runs_start')),\n {\n title: 'Start Experiment Run',\n description:\n 'Start a new reproducible run of an experiment (runNumber is auto-incremented). `parameters` is arbitrary JSON capturing the run configuration.',\n inputSchema: {\n experimentId: z.string().min(1).describe('Experiment being run'),\n parameters: JsonObject.optional().describe('Run parameters JSON'),\n notes: z.string().optional().describe('Free-text notes for the run'),\n },\n },\n async ({ experimentId, parameters, notes }) => {\n try {\n const input: Record<string, unknown> = { experimentId };\n if (parameters !== undefined) input.parameters = parameters;\n if (notes !== undefined) input.notes = notes;\n\n const data = await ctx.gql.workspace.request<{\n labStartRun: Record<string, unknown>;\n }>(ops.START_RUN, { input });\n return jsonResult(data.labStartRun);\n } catch (error) {\n ctx.logger.error('labsofscience runs_start failed', { error: String(error) });\n return errorResult(\n `Failed to start run: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'runs_complete')),\n {\n title: 'Complete Experiment Run',\n description:\n 'Record observations and complete a run with a terminal status (SUCCEEDED, FAILED, or CANCELLED).',\n inputSchema: {\n id: z.string().describe('Run ID'),\n status: RunStatusEnum.describe('Terminal run status'),\n observations: JsonObject.optional().describe('Recorded observations JSON'),\n notes: z.string().optional().describe('Closing notes for the run'),\n },\n },\n async ({ id, status, observations, notes }) => {\n try {\n const input: Record<string, unknown> = {};\n if (observations !== undefined) input.observations = observations;\n if (notes !== undefined) input.notes = notes;\n\n const data = await ctx.gql.workspace.request<{\n labCompleteRun: Record<string, unknown>;\n }>(ops.COMPLETE_RUN, {\n id,\n status,\n input: Object.keys(input).length > 0 ? input : undefined,\n });\n return jsonResult(data.labCompleteRun);\n } catch (error) {\n ctx.logger.error('labsofscience runs_complete failed', { error: String(error) });\n return errorResult(\n `Failed to complete run: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * Labsofscience protocol tools (+ steps).\n *\n * Surface (6): protocols_{get,list,create,update,add_step,publish}. Backed by\n * labProtocol / labListProtocols / labCreateProtocol / labUpdateProtocol /\n * labAddProtocolStep / labPublishProtocol.\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 { ProtocolStatusEnum, StepKindEnum } from './shared.js';\n\nexport function registerProtocolTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'protocols_get')),\n {\n title: 'Get Protocol',\n description: 'Fetch a single protocol by ID, including its ordered steps.',\n inputSchema: { id: z.string().describe('Protocol ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n labProtocol: Record<string, unknown> | null;\n }>(ops.GET_PROTOCOL, { id });\n if (!data.labProtocol) return errorResult(`Protocol ${id} not found`);\n return jsonResult(data.labProtocol);\n } catch (error) {\n ctx.logger.error('labsofscience protocols_get failed', { error: String(error) });\n return errorResult(\n `Failed to get protocol: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'protocols_list')),\n {\n title: 'List Protocols',\n description:\n 'List protocols, optionally filtered by status, with pagination. Returns a connection ({ items, pageInfo }).',\n inputSchema: {\n status: ProtocolStatusEnum.optional().describe('Filter by protocol status'),\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n cursor: z.string().optional().describe('Opaque pagination cursor'),\n },\n },\n async ({ status, limit, offset, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n labListProtocols: Record<string, unknown>;\n }>(ops.LIST_PROTOCOLS, {\n status,\n pagination: { limit: limit ?? 50, offset: offset ?? 0, cursor },\n });\n return jsonResult(data.labListProtocols);\n } catch (error) {\n ctx.logger.error('labsofscience protocols_list failed', { error: String(error) });\n return errorResult(\n `Failed to list protocols: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'protocols_create')),\n {\n title: 'Create Protocol',\n description:\n 'Create a draft protocol (standard operating procedure). `name` is required; add steps with protocols_add_step, then protocols_publish to freeze the version.',\n inputSchema: {\n name: z.string().min(1).describe('Protocol name'),\n summary: z.string().optional().describe('Short summary'),\n authorId: z.string().optional().describe('Author user ID'),\n estimatedMinutes: z\n .number()\n .int()\n .optional()\n .describe('Estimated total duration (minutes)'),\n materials: z.array(z.string()).optional().describe('Required materials list'),\n safetyNotes: z.string().optional().describe('Safety notes'),\n tags: z.array(z.string()).optional().describe('Discovery tags'),\n },\n },\n async ({ name, summary, authorId, estimatedMinutes, materials, safetyNotes, tags }) => {\n try {\n const input: Record<string, unknown> = { name };\n if (summary !== undefined) input.summary = summary;\n if (authorId !== undefined) input.authorId = authorId;\n if (estimatedMinutes !== undefined) input.estimatedMinutes = estimatedMinutes;\n if (materials !== undefined) input.materials = materials;\n if (safetyNotes !== undefined) input.safetyNotes = safetyNotes;\n if (tags !== undefined) input.tags = tags;\n\n const data = await ctx.gql.workspace.request<{\n labCreateProtocol: Record<string, unknown>;\n }>(ops.CREATE_PROTOCOL, { input });\n return jsonResult(data.labCreateProtocol);\n } catch (error) {\n ctx.logger.error('labsofscience protocols_create failed', { error: String(error) });\n return errorResult(\n `Failed to create protocol: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'protocols_update')),\n {\n title: 'Update Protocol',\n description: 'Update a (draft) protocol. At least one mutable field must be provided.',\n inputSchema: {\n id: z.string().describe('Protocol ID'),\n name: z.string().optional().describe('Updated name'),\n summary: z.string().optional().describe('Updated summary'),\n estimatedMinutes: z.number().int().optional().describe('Updated estimated duration'),\n materials: z.array(z.string()).optional().describe('Updated materials list'),\n safetyNotes: z.string().optional().describe('Updated safety notes'),\n tags: z.array(z.string()).optional().describe('Updated tags'),\n },\n },\n async ({ id, name, summary, estimatedMinutes, materials, safetyNotes, tags }) => {\n try {\n const input: Record<string, unknown> = {};\n if (name !== undefined) input.name = name;\n if (summary !== undefined) input.summary = summary;\n if (estimatedMinutes !== undefined) input.estimatedMinutes = estimatedMinutes;\n if (materials !== undefined) input.materials = materials;\n if (safetyNotes !== undefined) input.safetyNotes = safetyNotes;\n if (tags !== undefined) input.tags = tags;\n\n if (Object.keys(input).length === 0) {\n return errorResult('No updates specified — provide at least one mutable protocol field');\n }\n\n const data = await ctx.gql.workspace.request<{\n labUpdateProtocol: Record<string, unknown>;\n }>(ops.UPDATE_PROTOCOL, { id, input });\n return jsonResult(data.labUpdateProtocol);\n } catch (error) {\n ctx.logger.error('labsofscience protocols_update failed', { error: String(error) });\n return errorResult(\n `Failed to update protocol: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'protocols_add_step')),\n {\n title: 'Add Protocol Step',\n description:\n 'Append a step to a protocol. `instruction` is required; `kind` defaults to PREPARATION. If `ordinal` is omitted the step is appended at the end.',\n inputSchema: {\n protocolId: z.string().min(1).describe('Owning protocol ID'),\n instruction: z.string().min(1).describe('Step instruction text'),\n kind: StepKindEnum.optional().describe('Step kind (default PREPARATION)'),\n ordinal: z.number().int().optional().describe('Position in the protocol (1-based)'),\n durationMinutes: z.number().int().optional().describe('Step duration in minutes'),\n isCritical: z.boolean().optional().describe('Mark as a critical step (default false)'),\n },\n },\n async ({ protocolId, instruction, kind, ordinal, durationMinutes, isCritical }) => {\n try {\n const input: Record<string, unknown> = { protocolId, instruction };\n if (kind !== undefined) input.kind = kind;\n if (ordinal !== undefined) input.ordinal = ordinal;\n if (durationMinutes !== undefined) input.durationMinutes = durationMinutes;\n if (isCritical !== undefined) input.isCritical = isCritical;\n\n const data = await ctx.gql.workspace.request<{\n labAddProtocolStep: Record<string, unknown>;\n }>(ops.ADD_PROTOCOL_STEP, { input });\n return jsonResult(data.labAddProtocolStep);\n } catch (error) {\n ctx.logger.error('labsofscience protocols_add_step failed', { error: String(error) });\n return errorResult(\n `Failed to add protocol step: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'protocols_publish')),\n {\n title: 'Publish Protocol',\n description:\n 'Publish a draft protocol, freezing its version for reproducibility. Returns the published protocol with its steps.',\n inputSchema: { id: z.string().describe('Protocol ID') },\n // BOFF-3611: irreversible via this tool surface — publishing freezes\n // the version; there is no \"unpublish\" mutation. Explicit override —\n // see datasets.ts's datasets_archive for why per-tool, not a\n // fleet-wide tool-name.ts regex change.\n annotations: { destructiveHint: true },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n labPublishProtocol: Record<string, unknown>;\n }>(ops.PUBLISH_PROTOCOL, { id });\n return jsonResult(data.labPublishProtocol);\n } catch (error) {\n ctx.logger.error('labsofscience protocols_publish failed', { error: String(error) });\n return errorResult(\n `Failed to publish protocol: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * Labsofscience dataset tools (+ versions).\n *\n * Surface (5): datasets_{get,list,create,add_version,archive}. Backed by\n * labDataset / labListDatasets / labCreateDataset / labAddDatasetVersion /\n * labArchiveDataset. Dataset blobs live in wspace-files-svc (referenced via\n * fileId); versions are immutable snapshots.\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 { DatasetKindEnum, DatasetStatusEnum } from './shared.js';\n\nexport function registerDatasetTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'datasets_get')),\n {\n title: 'Get Dataset',\n description: 'Fetch a single dataset by ID, including its version history.',\n inputSchema: { id: z.string().describe('Dataset ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n labDataset: Record<string, unknown> | null;\n }>(ops.GET_DATASET, { id });\n if (!data.labDataset) return errorResult(`Dataset ${id} not found`);\n return jsonResult(data.labDataset);\n } catch (error) {\n ctx.logger.error('labsofscience datasets_get failed', { error: String(error) });\n return errorResult(\n `Failed to get dataset: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'datasets_list')),\n {\n title: 'List Datasets',\n description:\n 'List datasets, optionally filtered by kind and/or status, with pagination. Returns a connection ({ items, pageInfo }).',\n inputSchema: {\n kind: DatasetKindEnum.optional().describe('Filter by dataset kind'),\n status: DatasetStatusEnum.optional().describe('Filter by dataset status'),\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n cursor: z.string().optional().describe('Opaque pagination cursor'),\n },\n },\n async ({ kind, status, limit, offset, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n labListDatasets: Record<string, unknown>;\n }>(ops.LIST_DATASETS, {\n kind,\n status,\n pagination: { limit: limit ?? 50, offset: offset ?? 0, cursor },\n });\n return jsonResult(data.labListDatasets);\n } catch (error) {\n ctx.logger.error('labsofscience datasets_list failed', { error: String(error) });\n return errorResult(\n `Failed to list datasets: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'datasets_create')),\n {\n title: 'Create Dataset',\n description:\n 'Create a dataset record. `name` is required; `kind` defaults to RAW. Attach the actual bytes later via datasets_add_version.',\n inputSchema: {\n name: z.string().min(1).describe('Dataset name'),\n kind: DatasetKindEnum.optional().describe('Dataset kind (default RAW)'),\n description: z.string().optional().describe('Dataset description'),\n experimentId: z.string().optional().describe('Source experiment ID'),\n projectId: z.string().optional().describe('Owning project ID'),\n tags: z.array(z.string()).optional().describe('Discovery tags'),\n },\n },\n async ({ name, kind, description, experimentId, projectId, tags }) => {\n try {\n const input: Record<string, unknown> = { name };\n if (kind !== undefined) input.kind = kind;\n if (description !== undefined) input.description = description;\n if (experimentId !== undefined) input.experimentId = experimentId;\n if (projectId !== undefined) input.projectId = projectId;\n if (tags !== undefined) input.tags = tags;\n\n const data = await ctx.gql.workspace.request<{\n labCreateDataset: Record<string, unknown>;\n }>(ops.CREATE_DATASET, { input });\n return jsonResult(data.labCreateDataset);\n } catch (error) {\n ctx.logger.error('labsofscience datasets_create failed', { error: String(error) });\n return errorResult(\n `Failed to create dataset: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'datasets_add_version')),\n {\n title: 'Add Dataset Version',\n description:\n 'Append an immutable version to a dataset and bump its latestVersion. `fileId` references the snapshot bytes stored in wspace-files-svc.',\n inputSchema: {\n datasetId: z.string().min(1).describe('Target dataset ID'),\n fileId: z.string().optional().describe('wspace-files-svc File ID for the snapshot bytes'),\n sizeBytes: z\n .string()\n .optional()\n .describe('Snapshot size in bytes (string for large values)'),\n rowCount: z.number().int().optional().describe('Number of rows in the snapshot'),\n checksum: z.string().optional().describe('Content checksum'),\n changeNote: z.string().optional().describe('What changed in this version'),\n },\n },\n async ({ datasetId, fileId, sizeBytes, rowCount, checksum, changeNote }) => {\n try {\n const input: Record<string, unknown> = { datasetId };\n if (fileId !== undefined) input.fileId = fileId;\n if (sizeBytes !== undefined) input.sizeBytes = sizeBytes;\n if (rowCount !== undefined) input.rowCount = rowCount;\n if (checksum !== undefined) input.checksum = checksum;\n if (changeNote !== undefined) input.changeNote = changeNote;\n\n const data = await ctx.gql.workspace.request<{\n labAddDatasetVersion: Record<string, unknown>;\n }>(ops.ADD_DATASET_VERSION, { input });\n return jsonResult(data.labAddDatasetVersion);\n } catch (error) {\n ctx.logger.error('labsofscience datasets_add_version failed', { error: String(error) });\n return errorResult(\n `Failed to add dataset version: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'datasets_archive')),\n {\n title: 'Archive Dataset',\n description: 'Archive a dataset. Returns true on success.',\n inputSchema: { id: z.string().describe('Dataset ID') },\n // BOFF-3611: irreversible via this tool surface — the backend has no\n // \"unarchive\" mutation. Explicit override because tool-name.ts's\n // fleet-wide inference only matches \"delete\"; declaring it here (not\n // by widening that shared regex) keeps the blast radius to this tool.\n annotations: { destructiveHint: true },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ labArchiveDataset: boolean }>(\n ops.ARCHIVE_DATASET,\n { id },\n );\n return jsonResult({ archived: data.labArchiveDataset, id });\n } catch (error) {\n ctx.logger.error('labsofscience datasets_archive failed', { error: String(error) });\n return errorResult(\n `Failed to archive dataset: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * Labsofscience analysis-pipeline tools (+ runs).\n *\n * Surface (5): pipelines_{list,create,run}, pipeline_runs_{list,transition}.\n * Backed by labListPipelines / labCreatePipeline / labRunPipeline /\n * labListPipelineRuns / labTransitionPipelineRun. Both pipelines and pipeline\n * runs are paginated `{ items, pageInfo }` connections (BOFF-3611: an earlier\n * version selected fields directly on labListPipelines' Connection type,\n * which the gateway rejects — see operations.ts's LIST_PIPELINES).\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 { PipelineRunStatusEnum, JsonObject } from './shared.js';\n\nexport function registerPipelineTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'pipelines_list')),\n {\n title: 'List Analysis Pipelines',\n description:\n 'List analysis pipelines in the bound workspace, with pagination. Returns a connection ({ items, pageInfo }).',\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 cursor: z.string().optional().describe('Opaque pagination cursor'),\n },\n },\n async ({ limit, offset, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n labListPipelines: Record<string, unknown>;\n }>(ops.LIST_PIPELINES, {\n pagination: { limit: limit ?? 50, offset: offset ?? 0, cursor },\n });\n return jsonResult(data.labListPipelines);\n } catch (error) {\n ctx.logger.error('labsofscience pipelines_list failed', { error: String(error) });\n return errorResult(\n `Failed to list pipelines: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'pipelines_create')),\n {\n title: 'Create Analysis Pipeline',\n description:\n 'Create a reproducible analysis pipeline. `name` is required; `definition` is arbitrary JSON describing the pipeline graph/steps.',\n inputSchema: {\n name: z.string().min(1).describe('Pipeline name'),\n engine: z.string().optional().describe('Execution engine (e.g. \"python\", \"nextflow\")'),\n description: z.string().optional().describe('Pipeline description'),\n definition: JsonObject.optional().describe('Pipeline definition JSON (graph/steps)'),\n projectId: z.string().optional().describe('Owning project ID'),\n tags: z.array(z.string()).optional().describe('Discovery tags'),\n },\n },\n async ({ name, engine, description, definition, projectId, tags }) => {\n try {\n const input: Record<string, unknown> = { name };\n if (engine !== undefined) input.engine = engine;\n if (description !== undefined) input.description = description;\n if (definition !== undefined) input.definition = definition;\n if (projectId !== undefined) input.projectId = projectId;\n if (tags !== undefined) input.tags = tags;\n\n const data = await ctx.gql.workspace.request<{\n labCreatePipeline: Record<string, unknown>;\n }>(ops.CREATE_PIPELINE, { input });\n return jsonResult(data.labCreatePipeline);\n } catch (error) {\n ctx.logger.error('labsofscience pipelines_create failed', { error: String(error) });\n return errorResult(\n `Failed to create pipeline: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'pipelines_run')),\n {\n title: 'Run Analysis Pipeline',\n description:\n 'Queue a reproducible analysis-pipeline run over a dataset version. `pipelineId` is required; provide `datasetVersionId` (or `datasetId`) for the input data.',\n inputSchema: {\n pipelineId: z.string().min(1).describe('Pipeline to run'),\n datasetId: z.string().optional().describe('Input dataset ID'),\n datasetVersionId: z.string().optional().describe('Specific input dataset-version ID'),\n parameters: JsonObject.optional().describe('Run parameters JSON'),\n },\n },\n async ({ pipelineId, datasetId, datasetVersionId, parameters }) => {\n try {\n const input: Record<string, unknown> = { pipelineId };\n if (datasetId !== undefined) input.datasetId = datasetId;\n if (datasetVersionId !== undefined) input.datasetVersionId = datasetVersionId;\n if (parameters !== undefined) input.parameters = parameters;\n\n const data = await ctx.gql.workspace.request<{\n labRunPipeline: Record<string, unknown>;\n }>(ops.RUN_PIPELINE, { input });\n return jsonResult(data.labRunPipeline);\n } catch (error) {\n ctx.logger.error('labsofscience pipelines_run failed', { error: String(error) });\n return errorResult(\n `Failed to run pipeline: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'pipeline_runs_list')),\n {\n title: 'List Pipeline Runs',\n description:\n 'List analysis-pipeline runs, optionally filtered by pipeline and/or status, with pagination. Returns a connection ({ items, pageInfo }).',\n inputSchema: {\n pipelineId: z.string().optional().describe('Filter by pipeline ID'),\n status: PipelineRunStatusEnum.optional().describe('Filter by run status'),\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n cursor: z.string().optional().describe('Opaque pagination cursor'),\n },\n },\n async ({ pipelineId, status, limit, offset, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n labListPipelineRuns: Record<string, unknown>;\n }>(ops.LIST_PIPELINE_RUNS, {\n pipelineId,\n status,\n pagination: { limit: limit ?? 50, offset: offset ?? 0, cursor },\n });\n return jsonResult(data.labListPipelineRuns);\n } catch (error) {\n ctx.logger.error('labsofscience pipeline_runs_list failed', { error: String(error) });\n return errorResult(\n `Failed to list pipeline runs: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'pipeline_runs_transition')),\n {\n title: 'Transition Pipeline Run',\n description:\n 'Advance a pipeline run through its execution lifecycle (QUEUED → RUNNING → SUCCEEDED/FAILED, or CANCELLED). Transitions are validated; `log` appends execution output.',\n inputSchema: {\n id: z.string().describe('Pipeline run ID'),\n status: PipelineRunStatusEnum.describe('Target run status'),\n log: z.string().optional().describe('Execution log to append'),\n },\n },\n async ({ id, status, log }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n labTransitionPipelineRun: Record<string, unknown>;\n }>(ops.TRANSITION_PIPELINE_RUN, { id, status, log });\n return jsonResult(data.labTransitionPipelineRun);\n } catch (error) {\n ctx.logger.error('labsofscience pipeline_runs_transition failed', {\n error: String(error),\n });\n return errorResult(\n `Failed to transition pipeline run: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * Labsofscience instrument tools (+ bookings).\n *\n * Surface (5): instruments_{get,list,create,book}, bookings_cancel. Backed by\n * labInstrument / labListInstruments / labCreateInstrument / labBookInstrument\n * / labCancelBooking. labListInstruments is a paginated `{ items, pageInfo }`\n * connection (BOFF-3611: an earlier version selected fields directly on its\n * Connection type, which the gateway rejects — see operations.ts's\n * LIST_INSTRUMENTS).\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 { InstrumentStatusEnum } from './shared.js';\n\nexport function registerInstrumentTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'instruments_get')),\n {\n title: 'Get Instrument',\n description: 'Fetch a single lab instrument by ID, including its bookings.',\n inputSchema: { id: z.string().describe('Instrument ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n labInstrument: Record<string, unknown> | null;\n }>(ops.GET_INSTRUMENT, { id });\n if (!data.labInstrument) return errorResult(`Instrument ${id} not found`);\n return jsonResult(data.labInstrument);\n } catch (error) {\n ctx.logger.error('labsofscience instruments_get failed', { error: String(error) });\n return errorResult(\n `Failed to get instrument: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'instruments_list')),\n {\n title: 'List Instruments',\n description:\n 'List lab instruments, optionally filtered by availability status and/or a name/model search term, with pagination. Returns a connection ({ items, pageInfo }).',\n inputSchema: {\n status: InstrumentStatusEnum.optional().describe('Filter by instrument status'),\n search: z.string().optional().describe('Search by name or model'),\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n cursor: z.string().optional().describe('Opaque pagination cursor'),\n },\n },\n async ({ status, search, limit, offset, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n labListInstruments: Record<string, unknown>;\n }>(ops.LIST_INSTRUMENTS, {\n status,\n search,\n pagination: { limit: limit ?? 50, offset: offset ?? 0, cursor },\n });\n return jsonResult(data.labListInstruments);\n } catch (error) {\n ctx.logger.error('labsofscience instruments_list failed', { error: String(error) });\n return errorResult(\n `Failed to list instruments: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'instruments_create')),\n {\n title: 'Create Instrument',\n description:\n 'Register a lab instrument. `name` is required. Set `requiresApproval` if bookings must be approved before use.',\n inputSchema: {\n name: z.string().min(1).describe('Instrument name'),\n model: z.string().optional().describe('Make/model'),\n location: z.string().optional().describe('Physical location'),\n custodianId: z.string().optional().describe('Custodian user ID'),\n requiresApproval: z.boolean().optional().describe('Bookings need approval (default false)'),\n tags: z.array(z.string()).optional().describe('Discovery tags'),\n },\n },\n async ({ name, model, location, custodianId, requiresApproval, tags }) => {\n try {\n const input: Record<string, unknown> = { name };\n if (model !== undefined) input.model = model;\n if (location !== undefined) input.location = location;\n if (custodianId !== undefined) input.custodianId = custodianId;\n if (requiresApproval !== undefined) input.requiresApproval = requiresApproval;\n if (tags !== undefined) input.tags = tags;\n\n const data = await ctx.gql.workspace.request<{\n labCreateInstrument: Record<string, unknown>;\n }>(ops.CREATE_INSTRUMENT, { input });\n return jsonResult(data.labCreateInstrument);\n } catch (error) {\n ctx.logger.error('labsofscience instruments_create failed', { error: String(error) });\n return errorResult(\n `Failed to create instrument: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'instruments_book')),\n {\n title: 'Book Instrument',\n description:\n 'Reserve an instrument for a time window. Overlapping bookings are rejected server-side. `startTime`/`endTime` are ISO-8601 DateTimes.',\n inputSchema: {\n instrumentId: z.string().min(1).describe('Instrument to book'),\n startTime: z.string().min(1).describe('Booking start (ISO-8601 DateTime)'),\n endTime: z.string().min(1).describe('Booking end (ISO-8601 DateTime)'),\n experimentId: z.string().optional().describe('Associated experiment ID'),\n purpose: z.string().optional().describe('Purpose of the booking'),\n },\n },\n async ({ instrumentId, startTime, endTime, experimentId, purpose }) => {\n try {\n const input: Record<string, unknown> = { instrumentId, startTime, endTime };\n if (experimentId !== undefined) input.experimentId = experimentId;\n if (purpose !== undefined) input.purpose = purpose;\n\n const data = await ctx.gql.workspace.request<{\n labBookInstrument: Record<string, unknown>;\n }>(ops.BOOK_INSTRUMENT, { input });\n return jsonResult(data.labBookInstrument);\n } catch (error) {\n ctx.logger.error('labsofscience instruments_book failed', { error: String(error) });\n return errorResult(\n `Failed to book instrument: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'bookings_cancel')),\n {\n title: 'Cancel Instrument Booking',\n description: 'Cancel an instrument booking by ID. Returns the cancelled booking.',\n inputSchema: { id: z.string().describe('Booking ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n labCancelBooking: Record<string, unknown>;\n }>(ops.CANCEL_BOOKING, { id });\n return jsonResult(data.labCancelBooking);\n } catch (error) {\n ctx.logger.error('labsofscience bookings_cancel failed', { error: String(error) });\n return errorResult(\n `Failed to cancel booking: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * Labsofscience inventory tools.\n *\n * Surface (5): inventory_{get,list,create,adjust,archive}. Backed by\n * labInventoryItem / labListInventoryItems / labCreateInventoryItem /\n * labAdjustInventory / labArchiveInventoryItem. Stock status is recomputed\n * server-side from quantity vs reorderLevel.\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 { InventoryCategoryEnum, InventoryStatusEnum } from './shared.js';\n\nexport function registerInventoryTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'inventory_get')),\n {\n title: 'Get Inventory Item',\n description: 'Fetch a single inventory item (reagent/consumable/sample/etc.) by ID.',\n inputSchema: { id: z.string().describe('Inventory item ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n labInventoryItem: Record<string, unknown> | null;\n }>(ops.GET_INVENTORY_ITEM, { id });\n if (!data.labInventoryItem) return errorResult(`Inventory item ${id} not found`);\n return jsonResult(data.labInventoryItem);\n } catch (error) {\n ctx.logger.error('labsofscience inventory_get failed', { error: String(error) });\n return errorResult(\n `Failed to get inventory item: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'inventory_list')),\n {\n title: 'List Inventory Items',\n description:\n 'List inventory items, optionally filtered by category and/or stock status, with pagination. Returns a connection ({ items, pageInfo }).',\n inputSchema: {\n category: InventoryCategoryEnum.optional().describe('Filter by category'),\n status: InventoryStatusEnum.optional().describe('Filter by stock status'),\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n cursor: z.string().optional().describe('Opaque pagination cursor'),\n },\n },\n async ({ category, status, limit, offset, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n labListInventoryItems: Record<string, unknown>;\n }>(ops.LIST_INVENTORY_ITEMS, {\n category,\n status,\n pagination: { limit: limit ?? 50, offset: offset ?? 0, cursor },\n });\n return jsonResult(data.labListInventoryItems);\n } catch (error) {\n ctx.logger.error('labsofscience inventory_list failed', { error: String(error) });\n return errorResult(\n `Failed to list inventory items: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'inventory_create')),\n {\n title: 'Create Inventory Item',\n description:\n 'Add an inventory item. `name` is required; `category` defaults to REAGENT. Set `reorderLevel` to drive LOW/OUT_OF_STOCK status.',\n inputSchema: {\n name: z.string().min(1).describe('Item name'),\n category: InventoryCategoryEnum.optional().describe('Category (default REAGENT)'),\n quantity: z.number().optional().describe('Initial quantity'),\n unit: z.string().optional().describe('Unit of measure (e.g. \"mL\", \"units\")'),\n reorderLevel: z.number().optional().describe('Reorder threshold'),\n location: z.string().optional().describe('Storage location'),\n vendor: z.string().optional().describe('Vendor/supplier'),\n catalogNumber: z.string().optional().describe('Vendor catalog number'),\n lotNumber: z.string().optional().describe('Lot/batch number'),\n expiresAt: z.string().optional().describe('Expiry date (ISO-8601 DateTime)'),\n sdsFileId: z.string().optional().describe('wspace-files-svc File ID for the SDS sheet'),\n tags: z.array(z.string()).optional().describe('Discovery tags'),\n },\n },\n async ({\n name,\n category,\n quantity,\n unit,\n reorderLevel,\n location,\n vendor,\n catalogNumber,\n lotNumber,\n expiresAt,\n sdsFileId,\n tags,\n }) => {\n try {\n const input: Record<string, unknown> = { name };\n if (category !== undefined) input.category = category;\n if (quantity !== undefined) input.quantity = quantity;\n if (unit !== undefined) input.unit = unit;\n if (reorderLevel !== undefined) input.reorderLevel = reorderLevel;\n if (location !== undefined) input.location = location;\n if (vendor !== undefined) input.vendor = vendor;\n if (catalogNumber !== undefined) input.catalogNumber = catalogNumber;\n if (lotNumber !== undefined) input.lotNumber = lotNumber;\n if (expiresAt !== undefined) input.expiresAt = expiresAt;\n if (sdsFileId !== undefined) input.sdsFileId = sdsFileId;\n if (tags !== undefined) input.tags = tags;\n\n const data = await ctx.gql.workspace.request<{\n labCreateInventoryItem: Record<string, unknown>;\n }>(ops.CREATE_INVENTORY_ITEM, { input });\n return jsonResult(data.labCreateInventoryItem);\n } catch (error) {\n ctx.logger.error('labsofscience inventory_create failed', { error: String(error) });\n return errorResult(\n `Failed to create inventory item: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'inventory_adjust')),\n {\n title: 'Adjust Inventory',\n description:\n 'Apply a signed quantity delta to an item and recompute stock status (positive = restock, negative = consume).',\n inputSchema: {\n id: z.string().describe('Inventory item ID'),\n delta: z.number().describe('Signed quantity delta (positive = restock)'),\n reason: z.string().optional().describe('Reason for the adjustment'),\n },\n },\n async ({ id, delta, reason }) => {\n try {\n const input: Record<string, unknown> = { delta };\n if (reason !== undefined) input.reason = reason;\n\n const data = await ctx.gql.workspace.request<{\n labAdjustInventory: Record<string, unknown>;\n }>(ops.ADJUST_INVENTORY, { id, input });\n return jsonResult(data.labAdjustInventory);\n } catch (error) {\n ctx.logger.error('labsofscience inventory_adjust failed', { error: String(error) });\n return errorResult(\n `Failed to adjust inventory: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'inventory_archive')),\n {\n title: 'Archive Inventory Item',\n description: 'Archive an inventory item. Returns true on success.',\n inputSchema: { id: z.string().describe('Inventory item ID') },\n // BOFF-3611: irreversible via this tool surface — see datasets.ts's\n // datasets_archive for why this is an explicit per-tool override\n // rather than a fleet-wide tool-name.ts regex change.\n annotations: { destructiveHint: true },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ labArchiveInventoryItem: boolean }>(\n ops.ARCHIVE_INVENTORY_ITEM,\n { id },\n );\n return jsonResult({ archived: data.labArchiveInventoryItem, id });\n } catch (error) {\n ctx.logger.error('labsofscience inventory_archive failed', { error: String(error) });\n return errorResult(\n `Failed to archive inventory item: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * Labsofscience electronic-lab-notebook (ELN) tools.\n *\n * Surface (5): notebook_{list,get,create,sign,witness}. Backed by\n * labListNotebookEntries / labNotebookEntry / labCreateNotebookEntry /\n * labSignNotebookEntry / labWitnessNotebookEntry. Signing an entry locks its\n * editable content for record integrity; a SIGNED entry can then be witnessed\n * by a second party. Both are one-way lifecycle transitions — there is no\n * \"unsign\"/\"unwitness\" mutation — so notebook_sign and notebook_witness carry\n * an explicit destructiveHint annotation (BOFF-3611).\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 { NotebookEntryStatusEnum } from './shared.js';\n\nexport function registerNotebookTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'notebook_list')),\n {\n title: 'List Notebook Entries',\n description:\n 'List ELN entries, optionally filtered by project, experiment, and/or status, with pagination. Returns a connection ({ items, pageInfo }).',\n inputSchema: {\n projectId: z.string().optional().describe('Filter by project ID'),\n experimentId: z.string().optional().describe('Filter by experiment ID'),\n status: NotebookEntryStatusEnum.optional().describe('Filter by entry status'),\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n cursor: z.string().optional().describe('Opaque pagination cursor'),\n },\n },\n async ({ projectId, experimentId, status, limit, offset, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n labListNotebookEntries: Record<string, unknown>;\n }>(ops.LIST_NOTEBOOK_ENTRIES, {\n projectId,\n experimentId,\n status,\n pagination: { limit: limit ?? 50, offset: offset ?? 0, cursor },\n });\n return jsonResult(data.labListNotebookEntries);\n } catch (error) {\n ctx.logger.error('labsofscience notebook_list failed', { error: String(error) });\n return errorResult(\n `Failed to list notebook entries: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'notebook_get')),\n {\n title: 'Get Notebook Entry',\n description: 'Fetch a single ELN entry by ID.',\n inputSchema: { id: z.string().describe('Notebook entry ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n labNotebookEntry: Record<string, unknown> | null;\n }>(ops.GET_NOTEBOOK_ENTRY, { id });\n if (!data.labNotebookEntry) return errorResult(`Notebook entry ${id} not found`);\n return jsonResult(data.labNotebookEntry);\n } catch (error) {\n ctx.logger.error('labsofscience notebook_get failed', { error: String(error) });\n return errorResult(\n `Failed to get notebook entry: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'notebook_create')),\n {\n title: 'Create Notebook Entry',\n description:\n 'Create an ELN entry under a project. `projectId` and `title` are required. Attach files via `fileIds` (wspace-files-svc File IDs).',\n inputSchema: {\n projectId: z.string().min(1).describe('Owning project ID'),\n title: z.string().min(1).describe('Entry title'),\n body: z.string().optional().describe('Entry body (rich text / markdown)'),\n experimentId: z.string().optional().describe('Associated experiment ID'),\n runId: z.string().optional().describe('Associated run ID'),\n fileIds: z.array(z.string()).optional().describe('Attached wspace-files-svc File IDs'),\n tags: z.array(z.string()).optional().describe('Discovery tags'),\n },\n },\n async ({ projectId, title, body, experimentId, runId, fileIds, tags }) => {\n try {\n const input: Record<string, unknown> = { projectId, title };\n if (body !== undefined) input.body = body;\n if (experimentId !== undefined) input.experimentId = experimentId;\n if (runId !== undefined) input.runId = runId;\n if (fileIds !== undefined) input.fileIds = fileIds;\n if (tags !== undefined) input.tags = tags;\n\n const data = await ctx.gql.workspace.request<{\n labCreateNotebookEntry: Record<string, unknown>;\n }>(ops.CREATE_NOTEBOOK_ENTRY, { input });\n return jsonResult(data.labCreateNotebookEntry);\n } catch (error) {\n ctx.logger.error('labsofscience notebook_create failed', { error: String(error) });\n return errorResult(\n `Failed to create notebook entry: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'notebook_sign')),\n {\n title: 'Sign Notebook Entry',\n description:\n 'Sign an ELN entry for record integrity (locks editable content). Returns the signed entry.',\n inputSchema: { id: z.string().describe('Notebook entry ID') },\n // BOFF-3611: irreversible — there is no \"unsign\" mutation. Explicit\n // override — see datasets.ts's datasets_archive for why per-tool,\n // not a fleet-wide tool-name.ts regex change.\n annotations: { destructiveHint: true },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n labSignNotebookEntry: Record<string, unknown>;\n }>(ops.SIGN_NOTEBOOK_ENTRY, { id });\n return jsonResult(data.labSignNotebookEntry);\n } catch (error) {\n ctx.logger.error('labsofscience notebook_sign failed', { error: String(error) });\n return errorResult(\n `Failed to sign notebook entry: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'notebook_witness')),\n {\n title: 'Witness Notebook Entry',\n description:\n 'Witness a SIGNED ELN entry as a second party for record integrity. Returns the witnessed entry.',\n inputSchema: { id: z.string().describe('Notebook entry ID') },\n // BOFF-3611: irreversible — there is no \"unwitness\" mutation. Explicit\n // override — see datasets.ts's datasets_archive for why per-tool,\n // not a fleet-wide tool-name.ts regex change.\n annotations: { destructiveHint: true },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n labWitnessNotebookEntry: Record<string, unknown>;\n }>(ops.WITNESS_NOTEBOOK_ENTRY, { id });\n return jsonResult(data.labWitnessNotebookEntry);\n } catch (error) {\n ctx.logger.error('labsofscience notebook_witness failed', { error: String(error) });\n return errorResult(\n `Failed to witness notebook entry: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * Labsofscience health tool.\n *\n * Surface (1): health. Maps to the @public labHealth query (no auth required)\n * — a liveness/identity probe for the Labsofscience 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: 'Labsofscience Health Check',\n description:\n 'Public health probe for the Labsofscience subgraph (labHealth). Requires no authentication.',\n inputSchema: {},\n },\n async () => {\n try {\n const data = await ctx.gql.workspace.request<{ labHealth: string }>(ops.HEALTH, {});\n return jsonResult({ ok: true, status: data.labHealth });\n } catch (error) {\n ctx.logger.error('labsofscience health failed', { error: String(error) });\n return errorResult(\n `Labsofscience 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_PROJECTS, LIST_INSTRUMENTS, LIST_PIPELINES } from './operations.js';\n\n/**\n * Read-only Labsofscience 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 registerLabsofscienceResources(\n server: McpServer,\n ctx: McpContext,\n track: (uri: string) => string,\n): void {\n const schemaUri = track(mcpResourceUri(ctx.productName, 'schema'));\n const projectsUri = track(mcpResourceUri(ctx.productName, 'projects'));\n const instrumentsUri = track(mcpResourceUri(ctx.productName, 'instruments'));\n const pipelinesUri = track(mcpResourceUri(ctx.productName, 'pipelines'));\n\n // <product>://schema — domain overview\n server.registerResource(\n 'labsofscience-schema',\n schemaUri,\n {\n title: 'Labsofscience Domain Schema',\n description:\n 'Overview of the Labsofscience research 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 = `# Labsofscience Domain (Overview)\n\nScience & discovery platform — a research LIMS / ELN.\n\n## Entities\n- LabProject — a research project (has experiments)\n- LabExperiment — an experiment under a project (has runs)\n- LabExperimentRun — a reproducible run of an experiment\n- LabProtocol (+LabProtocolStep) — a versioned SOP with ordered steps\n- LabDataset (+LabDatasetVersion) — a dataset with immutable version snapshots\n- LabAnalysisPipeline (+LabPipelineRun) — reproducible analysis pipelines and runs\n- LabInstrument (+LabInstrumentBooking) — lab instruments and time-window bookings\n- LabInventoryItem — reagents/consumables/samples with stock tracking\n- LabNotebookEntry — electronic-lab-notebook (ELN) entries (signable)\n\n## Enums\n- LabProjectStatus: PLANNING, ACTIVE, ON_HOLD, COMPLETED, ARCHIVED\n- LabProjectVisibility: PRIVATE, WORKSPACE, PUBLIC\n- LabExperimentStatus: DESIGN, RUNNING, ANALYSIS, COMPLETE, ABANDONED\n- LabRunStatus: PLANNED, IN_PROGRESS, SUCCEEDED, FAILED, CANCELLED\n- LabProtocolStatus: DRAFT, PUBLISHED, DEPRECATED\n- LabStepKind: PREPARATION, INCUBATION, MEASUREMENT, ANALYSIS, CLEANUP, SAFETY\n- LabDatasetKind: RAW, PROCESSED, RESULT, REFERENCE\n- LabDatasetStatus: ACTIVE, LOCKED, ARCHIVED\n- LabPipelineRunStatus: QUEUED, RUNNING, SUCCEEDED, FAILED, CANCELLED\n- LabInstrumentStatus: AVAILABLE, IN_USE, MAINTENANCE, OFFLINE\n- LabBookingStatus: REQUESTED, CONFIRMED, COMPLETED, CANCELLED\n- LabInventoryCategory: REAGENT, CHEMICAL, BIOLOGICAL, CONSUMABLE, SAMPLE, EQUIPMENT_PART\n- LabInventoryStatus: IN_STOCK, LOW, OUT_OF_STOCK, EXPIRED, QUARANTINED\n- LabNotebookEntryStatus: DRAFT, SUBMITTED, SIGNED, WITNESSED, VOID\n\n## Tool groups\nprojects, experiments, runs, protocols, datasets, pipelines, instruments, inventory, notebook, health.\nEvery list query — including instruments_list and pipelines_list — returns { items, pageInfo }\nconnections and accepts a PaginationInput { limit, offset, cursor }. All run against the WORKSPACE\ngateway (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>://projects — research project directory\n server.registerResource(\n 'labsofscience-projects',\n projectsUri,\n {\n title: 'Labsofscience Project Directory',\n description: 'The first 50 research projects in the bound workspace.',\n mimeType: 'application/json',\n },\n async () => {\n ctx.logger.debug(`Resource ${projectsUri} requested`);\n try {\n const data = await ctx.gql.workspace.request<{ labListProjects: unknown }>(LIST_PROJECTS, {\n pagination: { limit: 50, offset: 0 },\n });\n return {\n contents: [\n {\n uri: projectsUri,\n text: JSON.stringify(data.labListProjects, null, 2),\n mimeType: 'application/json',\n },\n ],\n };\n } catch (error) {\n return {\n contents: [\n {\n uri: projectsUri,\n text: JSON.stringify({\n error: error instanceof Error ? error.message : String(error),\n }),\n mimeType: 'application/json',\n },\n ],\n };\n }\n },\n );\n\n // <product>://instruments — instrument catalog\n server.registerResource(\n 'labsofscience-instruments',\n instrumentsUri,\n {\n title: 'Labsofscience Instrument Catalog',\n description: 'The first 50 lab instruments in the bound workspace.',\n mimeType: 'application/json',\n },\n async () => {\n ctx.logger.debug(`Resource ${instrumentsUri} requested`);\n try {\n const data = await ctx.gql.workspace.request<{ labListInstruments: unknown }>(\n LIST_INSTRUMENTS,\n { pagination: { limit: 50, offset: 0 } },\n );\n return {\n contents: [\n {\n uri: instrumentsUri,\n text: JSON.stringify(data.labListInstruments, null, 2),\n mimeType: 'application/json',\n },\n ],\n };\n } catch (error) {\n return {\n contents: [\n {\n uri: instrumentsUri,\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>://pipelines — analysis pipeline catalog\n server.registerResource(\n 'labsofscience-pipelines',\n pipelinesUri,\n {\n title: 'Labsofscience Analysis Pipelines',\n description: 'The first 50 analysis pipelines in the bound workspace.',\n mimeType: 'application/json',\n },\n async () => {\n ctx.logger.debug(`Resource ${pipelinesUri} requested`);\n try {\n const data = await ctx.gql.workspace.request<{ labListPipelines: unknown }>(\n LIST_PIPELINES,\n { pagination: { limit: 50, offset: 0 } },\n );\n return {\n contents: [\n {\n uri: pipelinesUri,\n text: JSON.stringify(data.labListPipelines, null, 2),\n mimeType: 'application/json',\n },\n ],\n };\n } catch (error) {\n return {\n contents: [\n {\n uri: pipelinesUri,\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 * Labsofscience MCP prompts — guided multi-step workflows. Names are\n * product-prefixed via mcpPromptName and tracked at function entry.\n */\nexport function registerLabsofsciencePrompts(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n const p = ctx.productName;\n const setupName = track(mcpPromptName(p, 'experiment-setup'));\n const opsName = track(mcpPromptName(p, 'lab-operations'));\n\n // <product>-experiment-setup — stand up a project + protocol + experiment + run\n server.registerPrompt(\n setupName,\n {\n title: 'Experiment Setup',\n description:\n 'Guide for standing up a reproducible experiment end to end: create the project, author + publish a protocol, create the experiment, start a run, and register a dataset.',\n argsSchema: {\n projectName: z.string().optional().describe('Research project name'),\n field: z.string().optional().describe('Scientific field / discipline'),\n },\n },\n ({ projectName, field }) => {\n ctx.logger.debug(`Prompt ${setupName} called`, { projectName, field });\n const nameNote = projectName\n ? `Use the project name \"${projectName}\".`\n : 'Ask the user for the project name.';\n const fieldNote = field ? `Field: ${field}.` : 'Optionally capture the scientific field.';\n return {\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: `Help me set up a reproducible Labsofscience experiment.\n\n1. **Create Project**: Use ${p}_projects_create. ${nameNote} ${fieldNote} Optionally set principalInvestigatorId and visibility.\n2. **Author Protocol**: Use ${p}_protocols_create, then add ordered steps with ${p}_protocols_add_step (set kind per step), and ${p}_protocols_publish to freeze the version.\n3. **Create Experiment**: Use ${p}_experiments_create under the new projectId, referencing the published protocolId and a hypothesis + variables JSON.\n4. **Start a Run**: Use ${p}_runs_start with the experimentId and parameters; later close it with ${p}_runs_complete (status SUCCEEDED/FAILED) and observations.\n5. **Register Dataset**: Use ${p}_datasets_create for the run output, then ${p}_datasets_add_version with the fileId snapshot.\n6. **Advance**: Use ${p}_experiments_transition to move DESIGN → RUNNING → ANALYSIS → COMPLETE.\n\nShow results at each step and confirm before publishing the protocol.`,\n },\n },\n ],\n };\n },\n );\n\n // <product>-lab-operations — daily lab operations\n server.registerPrompt(\n opsName,\n {\n title: 'Lab Operations',\n description:\n 'Daily lab operations workflow: check instrument availability + bookings, restock low inventory, run analysis pipelines, and sign off notebook entries.',\n argsSchema: {\n projectId: z.string().optional().describe('Project ID to focus on'),\n },\n },\n ({ projectId }) => {\n ctx.logger.debug(`Prompt ${opsName} called`, { projectId });\n const projectNote = projectId\n ? `Focus on project \"${projectId}\".`\n : `First list projects with ${p}_projects_list and pick one.`;\n return {\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: `Run daily Labsofscience lab operations. ${projectNote}\n\n1. **Instruments**: Use ${p}_instruments_list (status AVAILABLE) to see free instruments; book one with ${p}_instruments_book for an upcoming run, or cancel stale holds with ${p}_bookings_cancel.\n2. **Inventory**: Use ${p}_inventory_list with status=LOW (and OUT_OF_STOCK) to find items to restock, then ${p}_inventory_adjust with a positive delta to record receipts.\n3. **Pipelines**: Use ${p}_pipelines_list and ${p}_pipeline_runs_list (status QUEUED/RUNNING) to monitor analysis; trigger new work with ${p}_pipelines_run and advance with ${p}_pipeline_runs_transition.\n4. **Notebook**: Use ${p}_notebook_list (status SUBMITTED) for the project and sign approved entries with ${p}_notebook_sign.\n5. **Experiments**: Use ${p}_experiments_list filtered by projectId to review status and surface runs needing completion via ${p}_runs_list.\n\nSummarize what needs attention after each step.`,\n },\n },\n ],\n };\n },\n );\n}\n","/**\n * Labsofscience module — domain module for the future-products ecosystem program.\n *\n * Covers all @key entities of wspace-labsofscience-svc grouped into per-entity\n * sub-APIs: projects, experiments, runs, protocols, datasets, pipelines,\n * instruments, inventory, notebook, health. Mirrors the rich kadaikodi/\n * vibecontrols modules' structure (tools/<entity>.ts + resources.ts +\n * prompts.ts) and the canonical tags module's typing discipline.\n *\n * Backend: ~/products/labsofscience/wspace-labsofscience-svc/\n * (Hive service name `labsofscience`). All operations run against the WORKSPACE\n * gateway; the @public labHealth probe is exposed as `<product>_health`.\n */\n\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { McpContext, McpModule, ModuleRegistration } from '../../core/index.js';\nimport { registerProjectTools } from './tools/projects.js';\nimport { registerExperimentTools } from './tools/experiments.js';\nimport { registerRunTools } from './tools/runs.js';\nimport { registerProtocolTools } from './tools/protocols.js';\nimport { registerDatasetTools } from './tools/datasets.js';\nimport { registerPipelineTools } from './tools/pipelines.js';\nimport { registerInstrumentTools } from './tools/instruments.js';\nimport { registerInventoryTools } from './tools/inventory.js';\nimport { registerNotebookTools } from './tools/notebook.js';\nimport { registerHealthTools } from './tools/health.js';\nimport { registerLabsofscienceResources } from './resources.js';\nimport { registerLabsofsciencePrompts } from './prompts.js';\n\nconst labsofscienceModule: McpModule = {\n id: 'labsofscience',\n version: '0.0.1',\n displayName: 'Labsofscience',\n dependsOn: ['auth'],\n capabilities: { tools: {}, resources: {}, prompts: {} },\n\n register(server: McpServer, ctx: McpContext): ModuleRegistration {\n const tools: string[] = [];\n const resources: string[] = [];\n const prompts: string[] = [];\n\n const trackTool = (n: string): string => {\n tools.push(n);\n return n;\n };\n const trackResource = (uri: string): string => {\n resources.push(uri);\n return uri;\n };\n const trackPrompt = (n: string): string => {\n prompts.push(n);\n return n;\n };\n\n registerProjectTools(server, ctx, trackTool);\n registerExperimentTools(server, ctx, trackTool);\n registerRunTools(server, ctx, trackTool);\n registerProtocolTools(server, ctx, trackTool);\n registerDatasetTools(server, ctx, trackTool);\n registerPipelineTools(server, ctx, trackTool);\n registerInstrumentTools(server, ctx, trackTool);\n registerInventoryTools(server, ctx, trackTool);\n registerNotebookTools(server, ctx, trackTool);\n registerHealthTools(server, ctx, trackTool);\n\n registerLabsofscienceResources(server, ctx, trackResource);\n registerLabsofsciencePrompts(server, ctx, trackPrompt);\n\n return { tools, resources, prompts };\n },\n};\n\nexport default labsofscienceModule;\n"]}