naftiko: 1.0.0-alpha2 info: label: Thermo Fisher Scientific Lab Data Management description: Workflow capability for laboratory data management combining SampleManager LIMS and NanoDrop Ultra spectrophotometer APIs. Covers sample lifecycle, result entry, instrument measurements, and LIMS integration for life science laboratories. tags: - Life Sciences - Laboratory - LIMS - Spectrophotometry - Sample Management - Automation created: '2026-05-03' modified: '2026-05-06' binds: - namespace: env keys: SAMPLEMANAGER_TOKEN: SAMPLEMANAGER_TOKEN NANODROP_HOST: NANODROP_HOST capability: consumes: - type: http namespace: samplemanager baseUri: https://{server}:56105/smpwcfrestvgsm description: Thermo Scientific SampleManager LIMS REST API. authentication: type: bearer token: '{{SAMPLEMANAGER_TOKEN}}' resources: - name: samples path: /mobile/samples description: Laboratory sample records. operations: - name: get-samples method: GET description: Retrieve laboratory samples with filtering by status and date. inputParameters: - name: status in: query type: string required: false description: Sample status filter (A, C, X, L). - name: from_date in: query type: string required: false description: From date filter (YYYY-MM-DD). - name: to_date in: query type: string required: false description: To date filter (YYYY-MM-DD). - name: pagesize in: query type: integer required: false description: Records per page. - name: page in: query type: integer required: false description: Page number. outputRawFormat: json outputParameters: - name: result type: object value: $. - name: sample-by-id path: /mobile/samples/{sampleId} description: Retrieve a specific sample by identity. operations: - name: get-sample-by-id method: GET description: Get details for a specific laboratory sample. inputParameters: - name: sampleId in: path type: string required: true description: Sample identity or barcode. outputRawFormat: json outputParameters: - name: result type: object value: $. - name: sample-results path: /mobile/samples/{sampleId}/results description: Test results for a sample. operations: - name: get-sample-results method: GET description: Get all test results for a specific sample. inputParameters: - name: sampleId in: path type: string required: true description: Sample identity. outputRawFormat: json outputParameters: - name: result type: object value: $. - name: results-entry path: /mobile/results description: Submit test results. operations: - name: submit-results method: POST description: Submit test results for samples in SampleManager. outputRawFormat: json outputParameters: - name: result type: object value: $. body: type: json data: sample_id: '{{tools.sample_id}}' results: '{{tools.results}}' - name: entity-browse path: /mobile/browses/{entity} description: Browse SampleManager entities. operations: - name: browse-entity method: GET description: Browse records for any SampleManager entity type. inputParameters: - name: entity in: path type: string required: true description: Entity name (SAMPLE, TEST, RESULT, CUSTOMER, etc.). - name: criteria in: query type: string required: false description: Filter criteria. - name: pagesize in: query type: integer required: false description: Records per page. - name: page in: query type: integer required: false description: Page number. outputRawFormat: json outputParameters: - name: result type: object value: $. - name: workflow-trigger path: /mobile/workflows/{workflowName}/trigger description: Trigger SampleManager workflows. operations: - name: trigger-workflow method: POST description: Trigger a named workflow in SampleManager. inputParameters: - name: workflowName in: path type: string required: true description: Workflow name to trigger. outputRawFormat: json outputParameters: - name: result type: object value: $. body: type: json data: {} - type: http namespace: nanodrop baseUri: http://{{NANODROP_HOST}}:8080 description: NanoDrop Ultra instrument local REST API. resources: - name: instrument-status path: /api/status description: Instrument status and metadata. operations: - name: get-instrument-status method: GET description: Get current status and readiness of the NanoDrop Ultra instrument. outputRawFormat: json outputParameters: - name: result type: object value: $. - name: measure path: /api/measure description: Perform a sample measurement. operations: - name: perform-measurement method: POST description: Initiate a sample measurement using the specified method. outputRawFormat: json outputParameters: - name: result type: object value: $. body: type: json data: method: '{{tools.method}}' sample_id: '{{tools.sample_id}}' sample_name: '{{tools.sample_name}}' operator: '{{tools.operator}}' - name: measurements path: /api/measurements description: Stored measurement records. operations: - name: get-measurements method: GET description: Retrieve stored measurements with date and method filtering. inputParameters: - name: from_date in: query type: string required: false description: From date filter. - name: to_date in: query type: string required: false description: To date filter. - name: method in: query type: string required: false description: Method filter. - name: sample_id in: query type: string required: false description: Sample ID filter. - name: limit in: query type: integer required: false description: Maximum records to return. outputRawFormat: json outputParameters: - name: result type: object value: $. - name: measurement-by-id path: /api/measurements/{measurementId} description: Retrieve a specific measurement with full spectrum data. operations: - name: get-measurement-by-id method: GET description: Get full measurement data including spectrum for a specific measurement ID. inputParameters: - name: measurementId in: path type: string required: true description: Unique measurement identifier. outputRawFormat: json outputParameters: - name: result type: object value: $. - name: methods path: /api/methods description: Available measurement methods. operations: - name: get-methods method: GET description: List available measurement methods configured on the instrument. outputRawFormat: json outputParameters: - name: result type: object value: $. - name: export path: /api/export description: Export measurement data. operations: - name: export-measurements method: POST description: Export measurements in CSV, JSON, or XML format for LIMS integration. outputRawFormat: json outputParameters: - name: result type: object value: $. body: type: json data: format: '{{tools.format}}' from_date: '{{tools.from_date}}' to_date: '{{tools.to_date}}' exposes: - type: rest port: 8080 namespace: thermo-fisher-lab-api description: Unified REST API for Thermo Fisher Scientific lab data management workflows. resources: - path: /v1/samples name: samples description: Laboratory sample management. operations: - method: GET name: list-samples description: List laboratory samples from SampleManager LIMS. call: samplemanager.get-samples outputParameters: - type: object mapping: $. - path: /v1/samples/{sampleId} name: sample description: Individual sample data. operations: - method: GET name: get-sample description: Get details for a specific laboratory sample. call: samplemanager.get-sample-by-id with: sampleId: rest.sampleId outputParameters: - type: object mapping: $. - path: /v1/samples/{sampleId}/results name: sample-results description: Test results for a sample. operations: - method: GET name: get-sample-results description: Get test results for a specific sample. call: samplemanager.get-sample-results with: sampleId: rest.sampleId outputParameters: - type: object mapping: $. - path: /v1/results name: results description: Submit test results. operations: - method: POST name: submit-results description: Submit test results to SampleManager LIMS. call: samplemanager.submit-results outputParameters: - type: object mapping: $. - path: /v1/entities/{entity} name: entities description: Browse SampleManager entities. operations: - method: GET name: browse-entity description: Browse SampleManager entity records. call: samplemanager.browse-entity with: entity: rest.entity outputParameters: - type: object mapping: $. - path: /v1/workflows/{workflowName}/trigger name: workflow-trigger description: Trigger laboratory workflows. operations: - method: POST name: trigger-workflow description: Trigger a SampleManager workflow. call: samplemanager.trigger-workflow with: workflowName: rest.workflowName outputParameters: - type: object mapping: $. - path: /v1/instrument/status name: instrument-status description: NanoDrop instrument status. operations: - method: GET name: get-instrument-status description: Check NanoDrop Ultra instrument readiness. call: nanodrop.get-instrument-status outputParameters: - type: object mapping: $. - path: /v1/spectrophotometry/measurements name: spectrophotometry-measurements description: NanoDrop spectrophotometric measurements. operations: - method: GET name: list-measurements description: List stored NanoDrop measurements. call: nanodrop.get-measurements outputParameters: - type: object mapping: $. - method: POST name: perform-measurement description: Perform a NanoDrop measurement. call: nanodrop.perform-measurement outputParameters: - type: object mapping: $. - path: /v1/spectrophotometry/measurements/{measurementId} name: spectrophotometry-measurement description: Individual NanoDrop measurement with spectrum. operations: - method: GET name: get-measurement description: Get full measurement data including absorbance spectrum. call: nanodrop.get-measurement-by-id with: measurementId: rest.measurementId outputParameters: - type: object mapping: $. - path: /v1/spectrophotometry/export name: spectrophotometry-export description: Export NanoDrop measurement data. operations: - method: POST name: export-measurements description: Export NanoDrop data for LIMS integration. call: nanodrop.export-measurements outputParameters: - type: object mapping: $. - type: mcp port: 9090 namespace: thermo-fisher-lab-mcp transport: http description: MCP server for AI-assisted laboratory data management using Thermo Fisher Scientific APIs. tools: - name: lims-list-samples description: List laboratory samples from SampleManager LIMS with optional status and date filtering. hints: readOnly: true idempotent: true call: samplemanager.get-samples outputParameters: - type: array mapping: $.samples - name: lims-get-sample description: Get details for a specific laboratory sample by identity or barcode. hints: readOnly: true idempotent: true call: samplemanager.get-sample-by-id with: sampleId: tools.sampleId outputParameters: - type: object mapping: $. - name: lims-get-sample-results description: Get all analytical test results for a specific laboratory sample. hints: readOnly: true idempotent: true call: samplemanager.get-sample-results with: sampleId: tools.sampleId outputParameters: - type: object mapping: $. - name: lims-submit-results description: Submit analytical test results for samples in SampleManager LIMS. hints: readOnly: false call: samplemanager.submit-results outputParameters: - type: object mapping: $. - name: lims-browse-entity description: Browse any SampleManager LIMS entity type (SAMPLE, TEST, RESULT, CUSTOMER, BATCH_HEADER, ANALYSIS). hints: readOnly: true idempotent: true call: samplemanager.browse-entity with: entity: tools.entity outputParameters: - type: object mapping: $. - name: lims-trigger-workflow description: Trigger a named automated workflow in SampleManager LIMS. hints: readOnly: false call: samplemanager.trigger-workflow with: workflowName: tools.workflowName outputParameters: - type: object mapping: $. - name: nanodrop-get-status description: Check the operational status and readiness of the NanoDrop Ultra spectrophotometer. hints: readOnly: true idempotent: true call: nanodrop.get-instrument-status outputParameters: - type: object mapping: $. - name: nanodrop-perform-measurement description: Perform a UV-Vis spectrophotometric measurement on loaded sample (DNA, RNA, protein quantification). hints: readOnly: false call: nanodrop.perform-measurement outputParameters: - type: object mapping: $. - name: nanodrop-list-measurements description: List stored NanoDrop Ultra measurements with concentration, purity ratios, and spectra. hints: readOnly: true idempotent: true call: nanodrop.get-measurements outputParameters: - type: object mapping: $. - name: nanodrop-get-measurement description: Get full NanoDrop measurement data including complete UV-Vis absorbance spectrum. hints: readOnly: true idempotent: true call: nanodrop.get-measurement-by-id with: measurementId: tools.measurementId outputParameters: - type: object mapping: $. - name: nanodrop-get-methods description: List available measurement methods on the NanoDrop Ultra (DNA-50, RNA-40, Protein A280, etc.). hints: readOnly: true idempotent: true call: nanodrop.get-methods outputParameters: - type: object mapping: $. - name: nanodrop-export-data description: Export NanoDrop Ultra measurements in JSON, CSV, or XML format for LIMS or ELN integration. hints: readOnly: true idempotent: true call: nanodrop.export-measurements outputParameters: - type: object mapping: $.