@pipeworx/esa-gaia
Connect: https://gateway.pipeworx.io/esa-gaia/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
ESA Gaia DR3 — positions, parallaxes (hence distances), proper motions, photometry and astrophysical parameters for 1.8 billion stars, queried over the ESA archive’s TAP service.
Tools
gaia_cone_search(ra, dec, radius_arcmin?, max_magnitude?, min_parallax_mas?, limit?)— every star inside a radius of a sky position, nearest first, with distances derived from parallax.gaia_source_by_id(source_id)— one star’s full astrometric and photometric record.gaia_adql_query(query, limit?)— an arbitrary read-only ADQL SELECT against the archive, row-capped at 2,000.
Auth
Keyless — the synchronous TAP endpoint needs no account.
Data sources
- https://gea.esac.esa.int/tap-server/tap/sync — IVOA TAP, ADQL,
FORMAT=json. Main tablegaiadr3.gaia_source.
Things the next person would otherwise rediscover
- TAP answers a REJECTED query with HTTP 200 and a VOTable
<INFO>element carrying the error, so a naive caller books a failure as an empty result. A JSON body with nodataarray is therefore treated as an error and the<INFO>text surfaced. - Parallax is in milliarcseconds and can be NEGATIVE. It is a measurement
with noise, not a distance: roughly a fifth of faint sources have a negative
value.
1000/parallaxis a distance in parsecs only when the parallax is positive and well determined, sodistance_pcis null — with adistance_notesaying why — for a negative parallax or a signal-to-noise below 5. Inverting it anyway produces a confident-looking number that means nothing. source_idis a 64-bit integer.JSON.parsehas already lost precision above 2^53 by the time the body is parsed, so ids are re-rendered as strings on the way out and accepted as strings on the way in.source_idvalues are release-specific — a DR2 id does not resolve in DR3.- The anonymous sync endpoint caps results at 2,000 rows and truncates a
larger
TOPsilently, so the cap is applied here explicitly rather than trusted to the server. - Gaia is dense. A 1-degree cone in the galactic plane is millions of stars;
radius_arcmindefaults to 3 and is capped at 60 for that reason.
Tools
- gaia_cone_search — “What stars are within 6 arcminutes of this position?” / “find the stars in the Pleiades core” — search ESA Gaia DR3, the 1.8-billion-star reference catalogue, for every star inside a radius of a sky
- gaia_source_by_id — Look up one star in ESA Gaia DR3 by its source_id and return its full astrometric and photometric record: position, parallax with its uncertainty, derived distance in parsecs and light years, proper m
- gaia_adql_query — Run a read-only ADQL (SQL-like) query against the ESA Gaia archive — the full DR3 catalogue plus its cross-match and variability tables — for questions a cone search cannot express: colour-magnitude c
Tools
gaia_adql_query— Run a read-only ADQL (SQL-like) query against the ESA Gaia archive — the full DR3 catalogue plus its cross-match and variability tables — for questions a cone search cannot express: colour-magnitude cgaia_cone_search— What stars are within 6 arcminutes of this position? / find the stars in the Pleiades core — search ESA Gaia DR3, the 1.8-billion-star reference catalogue, for every star inside a radius of a sky posigaia_source_by_id— Look up one star in ESA Gaia DR3 by its source_id and return its full astrometric and photometric record: position, parallax with its uncertainty, derived distance in parsecs and light years, proper m