Availability and data files¶
Three tools take you from "does data exist?" to files on disk:
neon_get_availability (no token),
neon_list_files (token) and
neon_download_files (token for data files; stdio
only).
Availability (no token)¶
- Product mode (
productonly): one row per site. Site mode (siteonly): one row per product. Cell mode (both): one row, months listed explicitly by default. - Months are compressed to ISO-8601 intervals:
["2016-06/2025-06"];formatcan beranges(default),monthsorcounts. byReleasesplits every row by release, withPROVISIONALas its own key, andsummarytotals site-months per release.start_month/end_monthwindow the result. NEON's GraphQL filter windowsavailableMonthsbut not the per-release lists, so neon-mcp clips those locally (a note says so).- Filters:
site_codesordomain_code(product mode),product_codes(site mode),release, andprovisional=include(default),excludeoronly.
PROVISIONAL is not a release¶
Newer data are provisional: available but not yet in an annual release, and they may
change. release="PROVISIONAL" is rejected (NEON rejects it too); use the
provisional switch here and include_provisional when listing or downloading files.
Defaults include provisional data everywhere, so what availability shows is what
listing returns.
Listing files (token)¶
Since June 2026 NEON's data endpoints require an API token3; without one
the tool fails with auth_required before any request
(set one up).
- One site and one month uses
GET /data/{product}/{site}/{month}(which also returns package ZIP links); anything wider usesPOST /data/query2. - Each file carries its name,
kind(data,variables,readme,sensor_positions,eml,science_review_flags,categorical_codes,validation,package,other),table,hor/ver/tmiindices, size, MD5, release and a signed URL. Filter withkind,table,hor,ver,tmi,name_contains(seeneon://guide/product-code-anatomyfor the file-name grammar). - Signed URLs expire about 7 days after generation (
urlExpiresAt); they need no token. List again to refresh them, and never cite them. detail="summary"or"site_months"sizes a request without listing files;include_urls=falseshrinks the result. Under the 50 KB result budget, URLs are dropped from the end of the page before files are.- A request may span at most 500 site-months (30 sites × 16 months, for example);
wider requests fail with
query_too_largebefore calling NEON. filenamereturns the signed URL of one exact file for a single site-month.
Downloading (stdio)¶
neon_download_files takes the same selectors, or prototype_uuid (+ file_names),
or spec_number for a NEON document. It exists only on stdio: the files land on the
machine running the server, under downloads.directory (~/neon-downloads):
~/neon-downloads/DP1.10003.001/HARV/2023-06/NEON.D01.HARV.DP1.10003.001.brd_countdata.2023-06.basic.….csv
~/neon-downloads/prototype/<uuid>/<file>
~/neon-downloads/documents/NEON.DOC.014041vL.pdf
Safety rules: the whole plan is checked against 50 files and 2 GiB per call (1 GiB per
file) before anything transfers; every destination must resolve inside the download
directory (no .., no symlink escapes, plain file names); every URL and redirect must
be on the host allow-list (data.neonscience.org, storage.googleapis.com and its
subdomains); files stream to .part and are renamed only after the MD5 matches.
Existing identical files are skipped (if_exists="error" refuses instead);
as_zip=true fetches NEON's package ZIP per site-month.
-
NEON Data API — Data endpoint. https://data.neonscience.org/data-api/endpoints/data/ ↩
-
NEON Data API — Data query endpoint. https://data.neonscience.org/data-api/endpoints/data-query/ ↩
-
NEON Data API — Authentication. https://data.neonscience.org/data-api/authentication/ ↩