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
global_search
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.