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, Aunty). 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. To show the interactive report (plate maps, spectra, images) or a bounded processed-CSV sample, call get_run_report for the same run.
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. Hosts that support MCP Apps render the interactive report View when this tool is called.
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, failed, or stalled raw file on a run. Processed artifacts are skipped. The instrument must have a Lambda processor. Prefer this over looping reprocess_file for bulk retries after a parser fix, to kick stuck uploads, or to recover files that never reported back from processing.
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.
report_view_items
readOnly
Return a paginated window of run report items (images, PDFs, spectra, or videos) with download URLs. Used by the Data Hub run report view. Call `get_run_report` instead.
report_view_file_url
readOnly
Return a short-lived download URL for one file on a run, found by numeric id or by filename suffix. The view reads CSV and JSON bodies from that URL itself. Used by the Data Hub run report view. Call `get_run_report` instead.
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, completed, or stalled raw file on an instrument that has a Lambda processor. A file is stalled when it has been in 'processing' longer than the configured stall window (20 minutes by default, past the Lambda's 15-minute limit) or has no processing-started timestamp. Processed artifacts are rejected. Transitions the file back to 'processing'. Use this to retry after a parser fix, transient Lambda failure, a stuck upload that never entered processing, or a file that never reported back from 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.
feedback
send_feedback
Report a bug or request about Data Hub itself (the web app, MCP tools, or the watcher). Show the user this draft and get their approval before calling. For a problem with a specific run's data, use add_run_comment instead. Any read token can call this.
list_feedback
readOnly
List feedback reports. Workspace admins see every report; everyone else sees only their own. Descriptions longer than 280 characters are shortened. Use get_feedback for the full report.
get_feedback
readOnly
Get one feedback report, including the full description. Workspace admins can read any report; everyone else can read only their own.
update_feedback
idempotent
Set a feedback report's status to open, resolved, or declined, with an optional note shown to the reporter. Workspace admin only, and requires the write scope. Changing the status to resolved or declined notifies the reporter. Editing only the note does not.