@pipeworx/noirlab-datalab

Connect: https://gateway.pipeworx.io/noirlab-datalab/mcp · Install: one-click buttons

No MCP client? Skip the connection: POST https://gateway.pipeworx.io/v1/tools/search_packs {"query":"..."} to find a tool below, GET /v1/tools/<name> for its schema, POST the same URL with arguments for the data — see For AI agents.

Tools: 3

NSF NOIRLab’s Astro Data Lab — the DECam, Mayall and Blanco survey catalogues (Legacy Surveys/DECaLS, DES, DELVE, DECaPS, SMASH, NSC) alongside mirrored all-sky catalogues (Gaia DR3, AllWISE, CatWISE, 2MASS, SDSS, DESI), queryable as database tables. Around 130 schemas and tens of billions of rows.

Tools

  • datalab_tables(schema?, table?, limit?) — list the survey data releases, one release’s tables, or one table’s columns. Call it first: table names are survey-specific and a guessed name is a query error, not an empty result.
  • datalab_query(sql, limit?) — run a read-only ADQL SELECT. A TOP n is injected when you omit one, so a bare query cannot scan a billion-row table unbounded.
  • datalab_cone_search(table, ra, dec, radius?, columns?, limit?) — sources within a radius of a sky position, nearest first, with exact angular separation in degrees.

Auth

Keyless — but only through the IVOA TAP endpoint. See the first trap below.

Data sources

Traps

  • /query/query?sql= is NOT anonymous, despite being the documented front door. It is what the datalab Python client uses and what the docs lead with, but without a login it answers 401 The provided security token is invalid — and the widely-quoted X-DL-AuthToken: anonymous.0.0.anon_access answers HTTP 200 with the body Error in query(). Try checking that you are logged in. A 200 carrying a failure is the worst shape a failure can take, and it is why this pack speaks TAP only. Measured 2026-09-17.
  • TAP reports every error as HTTP 200. Syntax errors, unknown tables, timeouts: all come back 200 with a VOTable whose single INFO element carries QUERY_STATUS="ERROR". Read as data that is an empty result set. Every response is checked for that element before it is parsed.
  • ADQL geometry is not implemented, and neither is Q3C. CONTAINS(POINT('ICRS',ra,dec), CIRCLE('ICRS',…)) parses and is handed to PostgreSQL verbatim, which answers function circle(numeric, numeric, numeric) does not exist. The Q3C functions the backend actually has (q3c_radial_query) are rejected by the ADQL parser one layer up. So both obvious cone-search spellings fail. datalab_cone_search builds the search from trigonometry both layers accept: an indexable RA/Dec box (RA widened by 1/cos(dec), wrapping at 0h) to narrow the scan, then an exact great-circle distance to trim the box corners off and order by true separation.
  • Row limits are SELECT TOP n, not LIMIT n. ADQL, not PostgreSQL.
  • Zero rows is usually footprint, not absence. The DECam surveys cover the southern sky and the Galactic plane selectively, so a northern target legitimately returns nothing from ls_dr10 or des_dr2. The zero-result note says to re-check against gaia_dr3.gaia_source, which is all-sky.

Tools

  • datalab_query — Run an ADQL (SQL) query against NSF NOIRLab Astro Data Lab — the DECam, Mayall and Blanco
  • datalab_tables — List the schemas and tables available in NOIRLab Astro Data Lab, with each table’s
  • datalab_cone_search — Find catalogue sources within a radius of a sky position, in any NOIRLab Data Lab table —

Tools

  • datalab_cone_search — Find catalogue sources within a radius of a sky position, in any NOIRLab Data Lab table —
  • datalab_query — Run an ADQL (SQL) query against NSF NOIRLab Astro Data Lab — the DECam, Mayall and Blanco
  • datalab_tables — List the schemas and tables available in NOIRLab Astro Data Lab, with each table's

Regenerated from source · build September 18, 2026