Open projects and tools
Open astronomy tools
A read-only set of 46 astronomy tools for AI agents and scripts, with a benchmark for how well language models use them. They are clients of public services and offline calculators, and need no CASPER account.
Available now These tools and the benchmark are in use today: every registered CASPER member can use the tools from CASPER, with no project access needed. The open package (a public repository, a Python package and an archive record) is released separately, and this page will link to it as soon as it is public.
What they are
The tools cover the everyday needs of an astronomer who asks an AI assistant for help: converting positions and times, moving a star to another epoch, working with units, magnitudes and fluxes, cosmology and extinction, planning observations, searching the literature, and querying public archives and virtual observatory services. Every tool is read-only.
They are designed to be open, documented, citable and measured. The set is meant to be usable as a Python library, as a command line program and as a Model Context Protocol server, with any language model. Every tool returns units, assumptions or the service and query that produced the result, so that an answer can be checked.
Browse the 46 tools
46 tools
No tool matches. Try fewer or different words.
Offline calculators (17)
Run on your own machine, no network: coordinates, time, units, cosmology, extinction, spectral lines and observing planning.
-
astro_angular_separationAngular separation (deg, arcmin, arcsec) and position angle (from north through east) between two points, plus the east/north offset in arcseconds.
-
astro_barycentric_correctionLight-travel-time (to BJD_TDB or HJD_TDB) and radial-velocity correction (km/s, to add to the observed velocity) for a target at an observatory, using astropy's built-in ephemeris (no download).
-
astro_best_nightsBest nights to observe a field over a date range (up to 366 nights): per night the dark hours, hours the target is above a minimum altitude in the dark with the Moon far enough or down, Moon illumination; returns the top nights.
-
astro_convert_coordinatesConvert a position between ICRS, FK5 (J2000), FK4 (B1950), Galactic, ecliptic (J2000) and supergalactic, and between sexagesimal and degrees. A string right ascension is HOURS ('18h36m56.3s', '18:36:56.3'); numbers are degrees. Returns the target frame plus ICRS, Galactic and ecliptic for reference.
-
astro_convert_timeConvert times between UTC, TAI, TT, TDB and UT1 and between ISO, JD, MJD, Unix and decimal years. Returns UTC/TAI/TT/TDB, JD and MJD, TT-UTC and UT1-UTC. 1900-2100, up to 200 times.
-
astro_convert_unitsConvert a value between astronomical/physical units (astropy), with optional equivalencies: 'spectral' (wavelength/frequency/energy), 'spectral_density' (F_nu/F_lambda at a wavelength), 'parallax', 'temperature', Doppler.
-
astro_cosmologyRedshift and distance in a selectable cosmology (Planck18 default; planck15, planck13, wmap9, or a custom flat/open one from h0, om0, ode0): comoving, luminosity and angular-diameter distances, distance modulus, lookback time, age, proper scale (kpc/arcsec); optionally the absolute magnitude (NO K-correction) and luminosity. Or solve z from a luminosity distance.
-
astro_extinction_lawA(lambda)/A(V) and A(lambda) from the Cardelli-Clayton-Mathis (1989) extinction law for a given E(B-V) and R_V (default 3.1), 1000-33333 Angstrom. The dust column along a sightline is YOUR input: this package bundles no dust map (no offline map is available), so it cannot look up E(B-V) for a position.
-
astro_fov_checkWhich of a list of targets (up to 2000) fall inside a circular field around a centre, of a radius you give: separation, position angle and east/north offsets. A first-cut membership test, not a fibre or detector configuration.
-
astro_list_sitesThe observatories bundled for planning (La Palma WHT/INT/GTC, Paranal, Cerro Pachon, Siding Spring) with latitude, longitude (east positive) and height.
-
astro_magnitude_fluxMagnitude and flux density in the AB, ST or Vega system (Vega bands U B V R I J H Ks bundled). Returns Jy, mJy, uJy, erg/s/cm2/Hz and, with a wavelength, erg/s/cm2/Angstrom.
-
astro_night_infoThe timeline of a night at an observatory: sunset, civil/nautical/astronomical twilight (evening and morning), night length, local sidereal time at start/mid/end, moonrise, moonset and Moon illumination. Times UTC (optionally also a fixed local offset).
-
astro_propagate_proper_motionMove a star's ICRS position from one epoch to another using its proper motion (mas/yr; pmra is mu_alpha* = includes cos dec, as in Gaia) and optionally parallax and radial velocity. Epochs: a Julian year (2016.0 or 'J2016.0', the Gaia DR3 epoch) or an ISO date.
-
astro_redshift_convertz and velocity (relativistic Doppler and cz) and rest and observed wavelength: give z, or a velocity, or rest and observed wavelengths; with only one wavelength it computes the other.
-
astro_sidereal_timeLocal and Greenwich sidereal time (mean and apparent) at an observatory for given UTC times.
-
astro_spectral_linesLook up standard spectral lines from a small bundled table (hydrogen Lyman/Balmer/Paschen/Brackett, [OII], [OIII], [NII], [SII], [OI], He I/II, Ca II H&K and triplet, Mg b, Na D, UV lines): vacuum and air rest wavelengths, shifted by a redshift or velocity, optionally only those landing in an observed wavelength window.
-
astro_target_visibilityVisibility of up to 20 targets over one night at an observatory: altitude, azimuth, airmass and Moon separation every N minutes, maximum altitude and when, hours above a minimum altitude, first/last time above it, and a warning near a bright Moon. Geometric altitudes, Pickering airmass.
Literature (10)
Search NASA ADS and arXiv. The ADS tools need your own ADS token.
-
ads_citationsThe papers that CITE one paper, from ADS (use year_from for recent ones, sort 'date desc' for the newest first).
-
ads_get_paperFull ADS record of one paper by bibcode: abstract, all metadata, keywords, citation and read counts, links, provenance.
-
ads_librariesList the ADS libraries (reading lists) of the ADS account that owns your token. Read-only.
-
ads_libraryRead the papers of one ADS library by its id (the code in the library's ADS address), with their metadata. Read-only; 50 papers per page.
-
ads_object_literatureWhat has been written about an astronomical object: ADS papers that mention it (name resolved through SIMBAD/NED by ADS), refereed by default, most cited first. Use it for 'what is known about NGC 6397', then ads_get_paper on the best hits. Summaries of abstracts are not a review of the papers.
-
ads_referencesThe papers that one paper CITES (its reference list), from ADS, most cited first by default.
-
ads_searchSearch NASA ADS for papers. Give any of: query (ADS syntax, e.g. 'abs:"Gaia" AND bibstem:A&A'), author ('Lastname, F'), first_author, title words, abstract words, object (a name ADS resolves via SIMBAD/NED), bibcode, year_from/year_to, refereed_only. Returns title, authors, year, venue, citation count, DOI/arXiv links and provenance (the exact ADS query). Needs an ADS API token in ADS_API_TOKEN ('ads_not_configured' if absent).
-
arxiv_get_paperMetadata and abstract of ONE arXiv paper by identifier (new '2101.01234', versioned '2101.01234v2' or old 'astro-ph/0601001'), with journal reference if the authors gave one.
-
arxiv_recentRecent arXiv submissions of a category (the listing of the last days), newest first, with the start of each abstract. Example uses: 'what is new in astro-ph.GA'.
-
arxiv_searchSearch arXiv (all of it, or one category). Give any of: query (words), title, author ('Lastname' or 'Lastname, F'), abstract words, category (e.g. astro-ph.GA). Needs no token. arXiv asks for one request every three seconds: calls queue and repeats are cached. Preprints are not peer reviewed.
Public archives and services (19)
Clients of public services such as SIMBAD, NED, VizieR, the CDS cross-match, the Gaia archive and the Virtual Observatory registry.
-
archive_listThe archives archive_search knows (SDSS, Pan-STARRS, Legacy Surveys, DESI, MAST, ESO, IRSA, HEASARC, CADC, ALMA, Gaia): what each holds, its products, whether it can be queried from here, and its web links.
-
archive_searchSearch ONE archive around a position (or named object) and return metadata, links and a small table: never the data themselves. archive: see archive_list (sdss, panstarrs, legacy_survey, desi, mast, eso, irsa, heasarc, cadc, alma, gaia_dr3). `product` picks the table where an archive has several; `table` picks another IRSA/HEASARC table. Example: archive_search(archive='mast', target='M 51', radius_arcmin=3).
-
astro_services_statusProbe every upstream service this server uses with a tiny request and report reachable or not, HTTP status and time. Useful when an archive answers with an error.
-
cds_crossmatchCDS cross-match of a SMALL list of positions (at most 100) against a catalogue: for each position the nearest source within the radius. catalogue: gaia_dr3, 2mass, allwise, panstarrs, sdss, simbad, or 'vizier:<table id>'. Example: cds_crossmatch(positions=[[279.2347, 38.7837]], catalogue='gaia_dr3', radius_arcsec=5).
-
gaia_adqlRun ONE read-only ADQL SELECT on the Gaia archive (gaiadr3.gaia_source, gaiadr3.astrophysical_parameters, ...). Anything but a single SELECT is refused; no comments, no semicolon; TOP is added or lowered to the row cap. Example: SELECT source_id, parallax FROM gaiadr3.gaia_source WHERE parallax > 100.
-
gaia_coneGaia DR3 cone search (ESA archive): source_id, position, parallax, proper motion, G/BP/RP, radial velocity, RUWE, nearest first. Radius in arcsec, at most 3600. Example: gaia_cone(ra=279.2347, dec=38.7837, radius_arcsec=60, max_g_mag=15).
-
gaia_sourceEverything useful about ONE Gaia DR3 source by source_id: astrometry, photometry, quality flags and the GSP-Phot astrophysical parameters when present. Example: gaia_source(source_id='2099719994020044800').
-
hips_listList HiPS sky surveys (all-sky image sets) from the CDS HiPS list by keyword, for example 'DSS', 'PanSTARRS', 'WISE', 'Legacy'. Returns the survey id to use in image_cutout.
-
image_cutoutAn image cut-out of the sky from a HiPS survey (CDS hips2fits): returns the LINK to the picture, its size in bytes and the pixel size; the picture itself is not returned. Example: image_cutout(target='M 51', fov_arcmin=10, hips='CDS/P/DSS2/color'). Format jpg, png or fits (fits: at most 512 pixels).
-
ned_objectNED (NASA/IPAC Extragalactic Database) lookup of ONE object by name: preferred name, position, object type and redshift with its reference. Example: ned_object(name='M101').
-
resolve_nameName to position: resolve an object name with CDS Sesame (SIMBAD, NED, VizieR resolvers) into ICRS coordinates, object type and aliases. Example: resolve_name(name='M 51') to ra 202.4696, dec 47.1952. Use it before a cone search when the person gives a name.
-
simbad_coneSIMBAD cone search: objects within a radius of a position (or of a named object), nearest first: identifier, type, coordinates, V magnitude, redshift. Radius in arcmin, at most 120. Example: simbad_cone(target='M 51', radius_arcmin=2, object_type='Galaxy').
-
simbad_objectSIMBAD (CDS) record of ONE object by name: main identifier, coordinates, object type, spectral type, parallax, proper motion, radial velocity and redshift, magnitudes per filter and the list of identifiers. Example: simbad_object(name='Vega').
-
vizier_columnsColumn metadata of one VizieR catalogue: name, unit, UCD, type and description. Example: vizier_columns(catalogue='I/355/gaiadr3').
-
vizier_coneCone search in ONE VizieR catalogue around a position (or named object). Returns the chosen columns (default: the catalogue's standard ones). Example: vizier_cone(catalogue='II/246/out', target='Vega', radius_arcsec=30). Radius in arcsec, at most 3600.
-
vizier_find_cataloguesFind VizieR catalogues (tables) by keywords in their name or description, for example 'Gaia', '2MASS', 'cepheid period'. Returns the catalogue identifier (such as I/355/gaiadr3) and its title. Use the identifier in vizier_columns and vizier_cone.
-
vo_registry_searchSearch the Virtual Observatory registry for TAP (table access) services by keywords in their title or description, for example 'radio continuum' or 'supernova'. Returns title, identifier and the TAP address. If the registry cannot be reached, this server's own list of known services is searched instead (the answer says which). A service found here can be used in vo_tap_tables and vo_tap_query.
-
vo_tap_queryRun ONE read-only ADQL SELECT on a TAP service (same names as vo_tap_tables). Refused unless it is a single SELECT; TOP is added or lowered to the row cap; the call has a time limit. Look at the tables first with vo_tap_tables. Example: vo_tap_query(service='irsa', query="SELECT designation, ra, dec, w1mpro FROM allwise_p3as_psd WHERE 1=CONTAINS(POINT('ICRS',ra,dec),CIRCLE('ICRS',202.48,47.23,0.01))").
-
vo_tap_tablesList the tables of a TAP service, or the columns of one table (give `table`). `service` is a built-in name (simbad, vizier, gaia, ned, datalab, mast, eso, irsa, heasarc, cadc, esasky, euclid, alma, gavo) or the https TAP address returned by vo_registry_search. Example: vo_tap_tables(service='irsa', table='allwise_p3as_psd').
The benchmark: AstroToolBench
AstroToolBench is a benchmark for language models that use astronomy tools. It asks whether a model can pick the right tool, call it with valid arguments, chain results, and report a number or a name that can be checked. Version 0.1 is a seed, not a finished benchmark. It has 73 offline tasks: 25 that need one tool, 24 that need several in sequence, and 24 in which the model must choose among look-alike tools. The tasks run against recorded answers of the public services, so that a score does not depend on the network or the date. Most correct answers (54 of the 73) come from formulas written independently of the tools.
Measured baselines
| System | Correct | Accuracy | One tool | Several tools | Choosing a tool |
|---|---|---|---|---|---|
| Reference run with the gold tool calls (no model) | 73 of 73 | 100.0% | 100.0% | 100.0% | 100.0% |
| gpt-oss-120b (open weights) | 70 of 73 | 95.9% | 100.0% | 91.7% | 95.8% |
| Ministral 3 14B (open weights) | 63 of 73 | 86.3% | 96.0% | 75.0% | 87.5% |
Using and citing
The licence, the public home of the project and the way to cite it have not been fixed yet, and nothing here should be read as a licence. See the paper page for how to refer to CASPER in the meantime, and the acknowledgements for the public services these tools rely on.