Data Hub

Tools

Catalog of Data Hub MCP tools for instruments, runs, files, watchers, and discovery.

ForDevelopers and integrators

All tools return JSON encoded as a single text content block. Error cases set isError: true and return a plain-text message. Each tool below carries its annotations (readOnly, idempotent, destructive) and the schema of its JSON response.

Connecting requires the read scope. Every tool without a readOnly annotation also requires write. See MCP overview for authentication and client setup.

Instruments

list_instruments

readOnly
List all registered lab instruments with run counts, watcher status, and file patterns. Optionally filter by status.

get_instrument

readOnly
Get detailed information about a specific instrument, including watcher online/offline counts and file patterns.

get_instrument_filter_options

readOnly
Return the valid search_runs metadata filter values for one instrument (wavelengths, dye channels, etc.). Prefer the datahub://instruments/{id}/filter-options resource when the client supports resources.

Runs

search_runs

readOnly
Search instrument runs with filtering, pagination, and sorting. Supports run status filters and instrument-metadata filters (plate reader, gel-doc, qPCR, Hina microscope, Epson scanner). Prefer global_search when the query may match filenames, instrument names, or attributor names rather than run IDs. Discover valid metadata filter values via get_instrument_filter_options or datahub://instruments/{id}/filter-options.

get_run

readOnly
Get details for a specific instrument run by its natural key (instrument ID + run ID). Returns metadata, timestamps, instrument info, and attributions by default. Pass include to attach the first page of files, comments, and/or a failure_summary without extra tool calls. For processed measurement samples prefer get_run_report.

get_run_report

readOnly
Return an analysis-ready summary for a run: file counts, failure summary, image/report file refs, and a bounded processed-CSV sample (columns + first rows). Prefer this over downloading full CSVs when comparing or summarizing experimental results.

list_run_files

readOnly
List files associated with a run (raw uploads and processed artifacts) with their status, category, and size. Paginated — runs can have thousands of files. Filter by status to gather fileIds for request_run_upload (e.g. status=['detected']). Use get_file for full per-file detail including metadata and S3 location.

reprocess_run

destructive
Re-run Lambda processing for every uploaded, completed, or failed file on a run. The instrument must have a Lambda processor. Prefer this over looping reprocess_file for bulk retries after a parser fix or to kick stuck uploads.

delete_run

idempotentdestructive
Soft-delete a run (sets deleted_at). Does not remove files or S3 objects. Use restore_run to undo. Idempotent: deleting an already-deleted run succeeds as a no-op.

restore_run

idempotent
Restore a soft-deleted run by clearing deleted_at. Idempotent: restoring a run that is not deleted succeeds as a no-op.

request_run_upload

idempotent
Queue specific detected files for watcher upload (max 100). Requires an online watcher. Idempotent for files already in upload_requested.

request_run_upload_all

idempotent
Queue every detected file on a run for watcher upload. Requires an online watcher.

Run attribution

claim_run

idempotent
Mark a run as performed by the authenticated user. Idempotent — claiming a run you already claimed is a no-op. Only self-attribution is supported; you cannot claim a run on behalf of another user. Prefer claim_runs when attributing multiple runs.

claim_runs

idempotent
Mark multiple runs on one instrument as performed by the authenticated user (max 100). Idempotent per run. Returns claimed runs and any runIds that were not found; a missing ID does not fail the whole batch. Only self-attribution is supported.

unclaim_run

idempotentdestructive
Remove the authenticated user's attribution from a run. Idempotent — unclaiming a run you don't currently claim is a no-op. Only self-attribution is supported; you cannot remove another user's attribution.

list_run_attributors

readOnly
List distinct users who have claimed at least one run on a given instrument. Use the returned userId with search_runs ranBy=<userId>.

Comments

list_run_comments

readOnly
List comments on a run (oldest first), including author display info.

add_run_comment

Add a comment on a run as the authenticated user. Author is taken from the token — you cannot comment as another user.

edit_run_comment

Edit one of your own comments. Returns an error if the comment is missing or authored by someone else.

delete_run_comment

idempotentdestructive
Soft-delete one of your own comments. Idempotent if already deleted.

Files

get_file

readOnly
Get detailed metadata for a single file by its numeric ID, including status, S3 location, size, extracted metadata, and any error message.

get_file_download_url

readOnly
Get a short-lived pre-signed S3 URL to download the raw file contents. URL expires after 15 minutes.

get_run_archive

readOnly
Get a downloadable ZIP archive of every active, uploaded file in a run. If the archive is already cached, returns a short-lived (15 min) pre-signed S3 URL the caller can fetch directly without auth — paste it into a browser or share it as a download link. If the archive isn't cached, kicks off an async build and returns `{ status: 'building', jobId, retryAfterSeconds }`; call this tool again after the suggested wait to poll for completion. Most archives finish in a few seconds; large runs may take a minute or two. Mirrors the REST `download-archive` route, including its dedup-by-fingerprint cache, so concurrent callers share a single Lambda invocation.

reprocess_file

destructive
Re-run the Lambda processing workflow for an uploaded, failed, or completed file on an instrument that has a Lambda processor. Transitions the file back to 'processing'. Use this to retry after a parser fix, transient Lambda failure, or a stuck upload that never entered processing.

dismiss_file

idempotentdestructive
Soft-delete a detected or upload_requested file (UI 'dismiss'). Uploaded files cannot be dismissed — delete the run instead. Idempotent: dismissing an already-dismissed file succeeds as a no-op.

Watchers

list_watchers

readOnly
List watcher agents with effective status, hostname, instrument assignment, and last heartbeat. Optionally include deregistered watchers or filter by effective status.

get_watcher

readOnly
Get watcher detail including config YAML, OS info, effective status, and deregistration actor when applicable.

list_watcher_events

readOnly
Paginated watcher event log (uploads, errors, config sync, update lifecycle). Useful after get_watcher_heartbeats when diagnosing failures.

get_watcher_heartbeats

readOnly
Get recent heartbeat history for a watcher agent, useful for diagnosing connectivity gaps and error trends. Returns up to 100 most recent heartbeats within the lookback window.

Discovery

readOnly
Fuzzy search across runs, files, instruments, users, and comments (same backend as the UI ⌘K palette). Prefer this over search_runs when the query may match a filename, instrument display name, attributor name, user, or comment body. The users scope returns workspace member names/emails to any authenticated caller (no row-level member privacy). Use search_runs for date/status/metadata filters. Queries shorter than 2 characters are rejected.

get_me

readOnly
Return the authenticated user's identity (id, name, email, image, isAdmin). Use the returned id with search_runs ranBy=, or pass ranBy="me" instead.

get_system_status

readOnly
Get a dashboard-level overview: per-instrument run counts, watcher health (online/offline/no_watcher), and pending upload counts.

On this page