ameriflux-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ameriflux-mcpFind AmeriFlux sites in California with 2020 data and show citation rules."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
ameriflux-mcp
A Model Context Protocol server (spec 2026-07-28) for AmeriFlux and FLUXNET eddy-covariance data. It lets agents find flux tower sites, check which products and years exist, understand FLUXNET variable names and QC flags, cite data under the right data policy, download with the user's consent, and preview files: AmeriFlux BASE and BADM, the AmeriFlux FLUXNET (FLUXNET-1F) product, and FLUXNET2015 FULLSET and SUBSET.
Status: v0.1.0. Twelve tools (eight over HTTP), three prompts and the guide and reference resources described below. The AmeriFlux API is undocumented, so the server checks every response's shape and reports drift instead of guessing. See DESIGN.md for decisions, RESEARCH.md for verified API facts, and CHANGELOG.md for what changed.
Installation
Full instructions for macOS, Linux and Windows are in the documentation: docs/getting-started/install.md (published at https://idss-mesa.github.io/ameriflux-mcp/ once the repository is public).
Prerequisites: uv, git, and read access to this private
repository (for example through gh auth login).
git clone https://github.com/idss-mesa/ameriflux-mcp.git
cd ameriflux-mcp
scripts/install.sh # registers the server with every agent it finds
scripts/install.sh --with-identity # ... and stores your AmeriFlux download identityscripts/install.sh creates the environment with uv sync, checks that
ameriflux-mcp --version runs (it never registers a command that does not start), and
registers the server with Claude Code, Claude
Desktop, OpenAI Codex CLI, Gemini CLI, Goose and OpenCode. On Windows run it from Git
Bash. --dry-run previews every change; --uninstall removes them.
Manual registration, for Claude Code:
claude mcp add ameriflux -s user -- /absolute/path/to/ameriflux-mcp/.venv/bin/ameriflux-mcpClients has the entries for every other client.
Once v0.1.0 is on PyPI: uvx ameriflux-mcp (or uv tool install ameriflux-mcp). A
Dockerfile serves the read-only HTTP tools: docker compose up -d, then
http://127.0.0.1:8080/mcp.
Related MCP server: io.github.krnzt/ecoscope
Tools
Tool | What it does |
| Server version, protocol and configuration status |
| Find AmeriFlux, FLUXNET2015 and FLUXNET-CH4 sites by place, ecosystem, years, product and policy |
| One site's metadata, DOIs, products and links to NEON/EDI |
| Which years each product has per site, and under which policy |
| Search the FP Standard and FLUXNET variable dictionaries |
| Parse variable names (qualifiers, QC, units per resolution, heights) |
| Versioned citations, required acknowledgments and policy obligations |
| Site metadata (BADM): location, team, disturbance, funding, references, instruments and heights |
| Opt-in, consented download through AmeriFlux's logged route (stdio only) |
| Classify downloaded zips and CSVs |
| Summaries and row windows from local files, with QC filtering |
| Read BADM Interchange Format files |
The last four run only over stdio, on the user's machine. Prompts: find_flux_sites,
plan_site_analysis, cite_flux_data. Guides for agents: ameriflux://guide/agent-workflow,
products, data-policy, variable-grammar, identity, file-formats,
fluxnet2015-access.
Downloads disclose who you are
AmeriFlux downloads go through a request that sends your name, email and stated purpose
to the site's principal investigators and to the AmeriFlux download log. ameriflux-mcp
never invents that information or lets a model write it: it comes only from your own
configuration, every download shows you the exact text first, and nothing is sent until
you confirm. Downloads are off by default until AmeriFlux confirms third-party use
of its download request; AMERIFLUX_MCP_DOWNLOADS__ENABLED=true (or --downloads)
turns them on. Discovery, availability, variables and citations need no identity at all.
Data policy
AmeriFlux data are shared under the CC-BY-4.0 licence or the AmeriFlux Legacy policy; FLUXNET2015 under CC-BY-4.0 (Tier 1) or Tier 2. Cite each site's DOI and include the required acknowledgments: see the AmeriFlux data policy and the FLUXNET data policy.
License
MIT, Copyright (c) 2026 The Regents of the University of New Mexico. Third-party credits are in NOTICE.
Available Tools
11 toolsamf_describe_variablesDescribe variable names: grammar, units, QC and sitesARead-onlyIdempotent
Decode up to 20 variable names from BASE or FLUXNET files: base name and FP Standard definition with QA/QC range, qualifiers (_PI, _QC, _F, _IU), position (_H_V_R, _H_V_A, _#), FLUXNET processing tokens (MDS, VUT/CUT, NT/DT, REF, percentiles), units and QC meaning per resolution, sign conventions. With site: whether the site measures it, sensor heights and instruments, yearly coverage. Next: call amf_get_availability for the site's years.
| Name | Required | Description | Default |
|---|---|---|---|
| site | No | A site (ID, NEON code or name): adds whether it measures the variable, its measurement heights and instruments, and yearly coverage. | |
| names | Yes | Variable names as in file headers: TA_F_1_1_1, FC_PI_F_1_1_A, GPP_NT_VUT_REF, NEE_VUT_05, TS_F_MDS_2_QC … | |
| resolution | No | HH (also HR), DD, WW, MM or YY: units and QC meaning at this resolution (FLUXNET). Default: all resolutions. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | |
| notes | No | |
| source | No | |
| resolved | No | |
| nextSteps | No | |
| variables | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and open-world, so safety is covered; the description adds the 20-name practical cap and the exact facets returned per name (QA/QC range, QC meaning per resolution, sign conventions, site instrument/height/coverage). It says nothing about behavior on unrecognized or malformed names, which is the notable remaining gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the verb and the 20-name scope, then the decoding facets, then the site behavior and the next-step pointer. Information-dense and largely tele grams-style, with the only cost being the compressed comma-spliced listing that takes a second pass to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and annotations covering the safety/idempotency profile, the description need not restate return structure, and it covers all three parameters plus the workflow handoff. The one omission is failure/partial-match behavior for unknown names, which matters when passing arbitrary file headers.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description goes beyond it by explaining the name grammar itself with concrete token families (_PI, _QC, _F, _IU, _H_V_R, MDS, VUT/CUT, NT/DT, REF, percentiles) and by clarifying what 'site' unlocks. That materially helps an agent build valid 'names' values rather than just reading the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb 'Decode' plus a precisely scoped resource: up to 20 variable names from BASE or FLUXNET files, with an enumerated list of what gets decoded (base name, FP Standard definition, qualifiers, position tokens, units, QC, sign conventions). This clearly separates it from the sibling amf_search_variables, which finds names rather than explaining them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The framing 'Decode ... from BASE or FLUXNET files' plus 'With site: whether the site measures it...' makes the use context clear, and 'Next: call amf_get_availability for the site's years' gives an explicit follow-up step. It stops short of naming when to use amf_search_variables instead, so no true alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
amf_get_availabilityGet data availability per site and productARead-onlyIdempotent
Published years per site for AmeriFlux BASE-BADM and FLUXNET (FLUXNET-1F), FLUXNET2015 and FLUXNET-CH4, and BADM (BIF) membership, each labelled with the data policy it is shared under (CC-BY-4.0, Legacy, Tier Two). Lists requested sites without data and why, and the policy the selection must follow with its obligations. Invalid product/policy pairs fail before any request. Next: call amf_get_citation for these sites.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| sites | No | Site IDs, NEON codes or names (up to 50). Omit for every site with data. | |
| years | No | Only years in this window: '2015' or '2010-2015'. | |
| offset | No | ||
| policy | No | CCBY4.0, LEGACY or TIER2: only data usable under that policy. Default: every row labelled with its own policy. | |
| products | No | BASE-BADM, BIF, FLUXNET, FLUXNET2015, FLUXNET-CH4. Default: the products of each site's collections (BASE-BADM and FLUXNET for AmeriFlux sites), or BASE-BADM when no sites are given. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | |
| rows | Yes | |
| notes | No | |
| source | No | |
| summary | Yes | |
| resolved | No | |
| nextSteps | No | |
| emptySites | No | |
| policyVerdict | No | |
| combinedObligations | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, openWorld, non-destructive), and the description adds real behavior beyond them: pre-request validation of product/policy pairs, enumeration of sites lacking data with reasons, and the policy obligations the selection must follow. It does not discuss pagination or result volume behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences, front-loaded with what is returned, then edge cases, then the next step; little waste. The product/policy enumeration in the first sentence is compressed but readable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value explanation is not required; the description still covers the important non-obvious behaviors (invalid pairs, missing-site reporting, policy obligations) and the workflow handoff. Only pagination/large-result behavior is left unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 67% schema coverage, the description still adds meaning: it explains that policy filters to data usable under that policy versus the default of labelling each row with its own policy, and it frames products as tied to site collections. It leaves limit/offset and the year-window syntax to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the exact resource and scope: published years per site for BASE-BADM, FLUXNET, FLUXNET2015, FLUXNET-CH4 and BIF membership, each row labelled with its data policy. It also states secondary outputs (sites without data and why, the governing policy), which cleanly separates it from siblings like amf_search_sites or amf_list_files.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a concrete follow-on step ("call amf_get_citation for these sites") and a precondition (invalid product/policy pairs fail before any request), which steers usage. It stops short of naming an alternative tool and when to prefer it, so no explicit when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
amf_get_badmGet a site's BADM metadataARead-onlyIdempotent
A site's Biological, Ancillary, Disturbance and Metadata as the API exposes it, by group: location, IGBP and climate, tower dates, team (no emails by default), disturbance and management, funding sponsors and organizations (needed to acknowledge Legacy sites), reference papers, and instruments with measurement heights. The full BADM ships as the BIF file in BASE-BADM downloads. Next: call amf_get_citation to cite the site.
| Name | Required | Description | Default |
|---|---|---|---|
| site | Yes | Site ID (any case), NEON code, FLUXNET2015 old ID or name. | |
| include | No | Sections; default all: site, team, disturbance, funding, references, instruments. | |
| variables | No | Instruments: only these base names or exact variables (e.g. ['TA', 'SWC_1_1_1']). | |
| include_contacts | No | Team emails, if the server allows it (privacy.allow_contact_emails). | |
| references_limit | No | Reference papers per page. | |
| references_offset | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | Yes | |
| site | No | |
| team | No | |
| notes | No | |
| policy | No | |
| siteId | Yes | |
| source | No | |
| funding | No | |
| resolved | No | |
| nextSteps | No | |
| references | No | |
| disturbance | No | |
| instruments | No | |
| fluxMeasurements | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/openWorld, so the safety profile is covered; the description adds real behavioral detail beyond that: emails are suppressed unless the server's privacy.allow_contact_emails permits them, and instruments include measurement heights. It stops short of describing pagination behavior for the reference-paper list, which the limit/offset params imply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the resource definition, then the BIF alternative, then the next-step routing. The long enumeration is dense but every item maps to a real returned section; nothing is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description needn't explain return values, and the annotations cover the safety profile. It is nearly complete for a read tool, with only the paginated nature of the reference-paper section left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 83%, so the schema already carries most parameter meaning. The description reinforces the section grouping used by `include` and the default email suppression for `include_contacts`, but adds nothing about `variables` filtering syntax or about how `references_limit`/`references_offset` paginate, leaving those to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb-and-resource pair (get a site's BADM metadata) and then enumerates the exact sections returned (location, IGBP/climate, tower dates, team, disturbance, funding, references, instruments), which lets an agent distinguish it from siblings like amf_read_bif or amf_get_site. It also flags what is not included by default ('team (no emails by default)').
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'The full BADM ships as the BIF file in BASE-BADM downloads' implicitly routes the agent to amf_read_bif for the complete record, and 'Next: call amf_get_citation to cite the site' gives an explicit follow-up step. There is no explicit 'do not use this when...' exclusion, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
amf_get_citationGet citations and acknowledgments for sitesARead-onlyIdempotent
Citations for up to 50 sites and one product (BASE-BADM, BIF, FLUXNET, FLUXNET2015): AmeriFlux's own versioned text per site DOI (e.g. 'Ver. 28-5'), the policy the selection must follow with its obligations (mixing CC-BY and Legacy means Legacy; mixing tiers means Tier Two), verbatim acknowledgments, Legacy site funding, the data-availability sentence and processing papers. Optional BibTeX. Next: cite every site in the reference list and follow the obligations.
| Name | Required | Description | Default |
|---|---|---|---|
| sites | Yes | Site IDs (any case), NEON codes, FLUXNET2015 old IDs or names. | |
| product | No | BASE-BADM, BIF (cited with the BASE DOI), FLUXNET (FLUXNET-1F) or FLUXNET2015. FLUXNET-CH4 citations arrive in v0.2. | BASE-BADM |
| include_bibtex | No | Add a BibTeX @misc entry per citation. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | |
| notes | No | |
| source | No | |
| missing | No | |
| product | Yes | |
| resolved | No | |
| citations | Yes | |
| nextSteps | No | |
| siteFunding | No | |
| bibtexElided | No | |
| acknowledgments | Yes | |
| effectivePolicy | Yes | |
| dataAvailability | No | |
| processingReferences | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses substantial behavioral detail: versioned DOI text, licensing obligations and mixing rules, verbatim acknowledgments, funding statements, data-availability language, processing papers, and optional BibTeX. The read-only, idempotent, open-world annotations are consistent with a citation-retrieval operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core resource and remains information-dense without obvious filler. The long parenthetical list of return contents is useful but slightly dense; it could be structured more readably, though it does not waste words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and annotations covering safety behavior, the description supplies enough context about returned citation components, licensing obligations, and follow-up actions. An agent has what it needs to invoke the tool correctly and understand the output's purpose.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameter meanings are already fully documented. The description reinforces the site limit and product options but adds little semantic detail about parameters beyond what the schema provides, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the resource is citations/acknowledgments for up to 50 sites and one product, with concrete returned items. This is a distinct purpose from sibling data-access tools such as amf_get_site or amf_get_badm, so an agent can identify the correct tool without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage context through 'Next: cite every site in the reference list and follow the obligations,' which explains what to do with the result. It does not explicitly name when to choose this over alternatives or state exclusions, but the purpose is specific enough that usage is well implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
amf_get_siteGet one AmeriFlux or FLUXNET siteARead-onlyIdempotent
One site by ID (any case), NEON code, FLUXNET2015 old ID or name: location, IGBP and Köppen with AmeriFlux's descriptions, data policy and what it means, DOIs, years per product (BASE, FLUXNET, FLUXNET2015, FLUXNET-CH4), member networks, links to NEON and to LTER data in EDI, team (no emails by default), measured BASE variables. Next: call amf_get_availability for exact years or amf_get_citation to cite it.
| Name | Required | Description | Default |
|---|---|---|---|
| site | Yes | Site ID (US-Ha1, any case), NEON code (SRER), FLUXNET2015 old ID (DK-ZaF) or site name. | |
| include | No | Optional sections; default all: description, team, variables, disturbance. | |
| include_contacts | No | Include team emails, if the server allows it (privacy.allow_contact_emails). |
Output Schema
| Name | Required | Description |
|---|---|---|
| dois | Yes | |
| name | Yes | |
| team | No | |
| notes | No | |
| tower | Yes | |
| policy | Yes | |
| siteId | Yes | |
| source | No | |
| status | No | |
| location | Yes | |
| networks | Yes | |
| products | Yes | |
| resolved | No | |
| ecosystem | Yes | |
| nextSteps | No | |
| teamTotal | No | |
| crosslinks | Yes | |
| gasSpecies | No | |
| collections | Yes | |
| description | No | |
| disturbance | No | |
| baseVariables | No | |
| baseVariablesTotal | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/openWorld, but the description adds real behavioral context they don't: emails are suppressed by default, include_contacts is server-gated by a privacy setting, and the data policy is returned 'with what it means.' It stops short of disclosure on response size or truncation for large sites.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded: identifier forms first, payload contents next, routing advice last. The telegraphic comma-separated style is efficient; a slightly clearer sentence boundary between payload and next-step guidance would help readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, enumerating return fields isn't strictly required, yet the description gives the agent enough to know this payload satisfies site-detail questions. Privacy defaults and next-step tools are covered; only the search-vs-get decision is unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so site, include, and include_contacts are already fully documented, including the enum values and the default-all behavior. The description echoes the identifier forms without adding syntax or edge-case detail beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource ('one site'), the accepted identifier forms, and enumerates the returned content (location, IGBP/Köppen, DOIs, years per product, team, variables). This is far more specific than a restated title and makes it trivially distinguishable from amf_search_sites and amf_get_availability.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit next-step routing: 'call amf_get_availability for exact years or amf_get_citation to cite it.' What's missing is the inverse guidance against the closest competitor, amf_search_sites (i.e., 'use this when you already have an ID; otherwise search first').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
amf_list_filesList local AmeriFlux and FLUXNET filesARead-onlyIdempotent
Find the AmeriFlux and FLUXNET files already on this computer, in the download directory and configured local roots: BASE and BASE-BADM zips, BIF files, AmeriFlux FLUXNET (ONEFlux) and FLUXNET2015 archives, with each archive's members classified by kind (data, ERA, BIFVARINFO, BIF, aux tables), site, resolution, years and version. Unsafe members are flagged. stdio only. Next: call amf_preview_data(file=...) on one.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | A folder or archive inside the download directory or a local root; default: every root. | |
| site | No | Only this site ID (any case). | |
| limit | No | ||
| family | No | Only these families. | |
| offset | No | ||
| include_members | No | Classify the members of each archive. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | |
| files | Yes | |
| notes | No | |
| roots | Yes | |
| facets | Yes | |
| source | No | |
| resolved | No | |
| nextSteps | No | |
| unrecognized | Yes | |
| membersElided | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so safety is covered; the description adds real behavior: each archive's members are classified by kind, site, resolution, years and version, and unsafe members are flagged. The phrase 'stdio only' is unexplained and is the one piece of context an agent cannot act on.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then scope, then classification behavior, then the next action. The middle sentence is a dense enumeration of file kinds and member fields that borders on over-packed, but no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present the description needn't explain return values, and annotations cover mutability, so the remaining burden is scope and post-call routing — both supplied. The gaps are pagination behavior for limit/offset and the opaque 'stdio only' clause.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%, and the description covers the spirit of path (download directory / configured local roots), site, and include_members ('members classified by kind'). It says nothing about limit/offset paging despite those being 2 of the 6 parameters, so the schema still carries the paging semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Find the AmeriFlux and FLUXNET files already on this computer') and enumerates the artifact families it covers (BASE/BASE-BADM zips, BIF, ONEFlux, FLUXNET2015). The 'already on this computer' scoping immediately distinguishes it from siblings like amf_search_sites and amf_get_availability, which operate on remote catalogs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a clear next-step handoff ('call amf_preview_data(file=...) on one'), which is genuinely useful routing. However, it never states when NOT to use it — e.g., that a site not present locally should be fetched first or looked up via amf_search_sites — so the alternative path is left implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
amf_pingCheck ameriflux-mcp statusARead-onlyIdempotent
Liveness and capability report: server version, protocol and transport; whether a download identity is configured (booleans and profile names only, never the values) and which tools need it; whether downloads are enabled and where files go. With check_api=true it also makes one small request to the AmeriFlux API to confirm connectivity. Next: read ameriflux://guide/identity to set up downloads.
| Name | Required | Description | Default |
|---|---|---|---|
| check_api | No | Also make one small request to the AmeriFlux API (the FP Standard variable list) to confirm connectivity. |
Output Schema
| Name | Required | Description |
|---|---|---|
| pong | No | |
| cache | Yes | |
| notes | No | |
| source | No | |
| version | Yes | |
| identity | Yes | |
| resolved | No | |
| upstream | No | |
| endpoints | Yes | |
| nextSteps | No | |
| transport | Yes | |
| localRoots | No | |
| downloadDir | No | |
| protocolVersion | Yes | |
| downloadsEnabled | Yes | |
| identityRequiredTools | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnly/idempotent/openWorld/no-destructive), the description adds real value: identity output is 'booleans and profile names only, never the values' (a privacy guarantee), and it clarifies that network contact only happens when check_api=true, refining the broad openWorldHint. It doesn't quantify cost or latency of the API probe, keeping it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then grouped details, then a next-step pointer; every clause carries distinct information. The semicolon-dense enumeration is efficient but slightly packed, so it is not maximally crisp.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value documentation is not required, yet the description still summarizes the report contents. Combined with annotations covering safety/idempotency and the conditional network note, an agent has everything needed to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With one parameter and 100% schema description coverage, the schema already explains check_api. The description restates the same condition and only marginally adds the notion that it is 'one small request' to a specific endpoint. Baseline 3 for full schema coverage is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific diagnostic operation ('Liveness and capability report') and enumerates exactly what it reports: server version, protocol/transport, download-identity configuration status, download enablement and file destination. No sibling tool in the list performs status/diagnostics, so the role is unambiguous and distinct from the data-retrieval siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the condition for the optional behavior ('With check_api=true it also makes one small request... to confirm connectivity') and gives an explicit next step ('read ameriflux://guide/identity to set up downloads'). It does not state when *not* to call this or contrast it against any sibling, but no sibling overlaps, so the practical guidance is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
amf_preview_dataPreview a local AmeriFlux or FLUXNET data fileARead-onlyIdempotent
Summarize or page through a local BASE, AmeriFlux FLUXNET or FLUXNET2015 CSV, in place or inside its zip: time step and range, per-column count, missing (-9999), min, max, mean and out-of-range counts, units per resolution, a time window, a QC filter, UTC timestamps from the site's BIF, a SUBSET column view, and aux tables. Stops within a byte and time budget. stdio only. Next: call amf_describe_variables on columns to decode.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | Last time (inclusive): end='2012' keeps all of 2012. | |
| file | No | A file or 'archive.zip::member.csv', relative to a local root (see amf_list_files). Or give site and product instead. | |
| mode | No | summary: per-column statistics; rows: a window of rows. | summary |
| site | No | Newest local file of this site. | |
| view | No | subset: only FLUXNET2015 SUBSET variables (AmeriFlux FLUXNET files). | full |
| start | No | First time, e.g. 2012, 2012-06, 2012-06-01T12:00. | |
| offset | No | Rows to skip within the time window. | |
| qc_max | No | HH/HR FLUXNET: keep values whose _QC flag is at most this. | |
| to_utc | No | Add UTC timestamps (offset from the site's BIF). | |
| columns | No | Columns by name (default: up to 80 in summaries). | |
| product | No | With site: BASE-BADM (default), FLUXNET or FLUXNET2015. | |
| max_rows | No | Rows per page (capped by the server). | |
| resolution | No | Member of an archive to read (default HH; HR sites match HH). | |
| qc_min_fraction | No | DD and coarser FLUXNET: keep values whose _QC fraction is at least this. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | No | |
| rows | No | |
| scan | Yes | |
| notes | No | |
| source | No | |
| columns | Yes | |
| fileInfo | Yes | |
| resolved | No | |
| nextSteps | No | |
| rowColumns | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false. The description adds useful operational context: output 'stops within a byte and time budget' and the tool is 'stdio only', which matters for an agent's expectations around scope and environment.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description front-loads the core purpose and uses dense but informative phrasing. The first sentence is a long feature list that could be more structured, but every item maps to a real capability and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex 14-parameter local preview tool with an output schema, the description covers data sources, high-level output content, resource budget limits, stdio-only operation, and the recommended next step. It leaves details like file-vs-site/product mutual exclusivity to the schema, which is reasonable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% description coverage across 14 parameters, so the baseline is 3. The description adds high-level feature mapping (time step/range, QC filter, BIF-based UTC timestamps, SUBSET view, aux tables) but does not add parameter-specific syntax or defaults beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States specific verbs ('summarize or page through') and a precise resource ('local BASE, AmeriFlux FLUXNET or FLUXNET2015 CSV, in place or inside its zip'). It is clearly scoped to local files and previewing, though sibling differentiation appears mainly as a next-step reference to amf_describe_variables rather than an explicit comparison.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies the tool is used to preview before decoding, via 'Next: call amf_describe_variables on columns to decode', and notes 'stdio only'. However, it does not say when to choose this over amf_list_files, amf_get_badm, or other siblings, nor when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
amf_read_bifRead a local BADM (BIF) fileARead-onlyIdempotent
Read a local BADM Interchange Format file, the site metadata shipped in BASE-BADM (xlsx) and AmeriFlux FLUXNET (CSV) downloads, also from inside the zip: entries by group (location, IGBP, team, instruments, disturbance …), UTC offsets with their start dates, the DOI and citation recorded for that version, and funding acknowledgments. Emails and addresses are withheld by default. stdio only. Next: call amf_get_citation for the current citation.
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | A BIF xlsx or CSV, or an archive holding one (BASE-BADM, FLUXNET), relative to a local root. Or give site. | |
| site | No | The newest local BIF of this site. | |
| limit | No | ||
| groups | No | Only these groups, e.g. ['GRP_UTC_OFFSET', 'GRP_DOI']. | |
| offset | No | ||
| site_id | No | In a bulk file (AA-Flx, AA-Net): only this site. | |
| include_contacts | No | Emails and addresses, if the server allows it (privacy settings). |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | |
| notes | No | |
| source | No | |
| entries | Yes | |
| fileInfo | Yes | |
| resolved | No | |
| withheld | Yes | |
| citations | Yes | |
| nextSteps | No | |
| utcOffsets | Yes | |
| acknowledgments | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, idempotent, non-destructive, closed-world), so the description's real contributions are the privacy behavior ('Emails and addresses are withheld by default'), the archive-unwrapping capability ('also from inside the zip'), and the transport constraint ('stdio only'). Those are genuinely additive traits not derivable from the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads verb and resource, and every clause adds information about contents or behavior with no filler. The middle is a single dense run-on enumeration with awkward fragments ('also from inside the zip'), which slightly hurts scannability but costs no wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, and the safety profile is carried by annotations. The remaining gap is input disambiguation: with 7 optional parameters and neither `file` nor `site` required, the description never says which selector wins or what the default behavior is when none is supplied.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 71%, so the schema already documents most parameters; the description adds only loose mapping (groups -> 'entries by group (location, IGBP, team, instruments, disturbance …)', include_contacts -> withheld emails/addresses). It says nothing about pagination via `limit`/`offset` or about the bulk-file `site_id` filter, both of which carry no description in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb ('Read') and a specific resource (a local BADM Interchange Format file), then enumerates the payload (groups, UTC offsets, DOI/citation, funding) so the agent knows what comes back. It does not explicitly contrast with the sibling amf_get_badm, which likely serves the same content from a remote source, leaving the local-vs-remote distinction to be inferred.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a routing pointer ('Next: call amf_get_citation for the current citation') and clarifies the input shapes (BASE-BADM xlsx, FLUXNET CSV, or inside the zip), which implies when to reach for it. However, there is no explicit statement of when NOT to use it versus amf_get_badm or amf_list_files, and no guidance on what happens when both `file` and `site` are omitted.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
amf_search_sitesSearch AmeriFlux and FLUXNET sitesARead-onlyIdempotent
Find flux tower sites in the AmeriFlux (856), FLUXNET2015 (212) and FLUXNET-CH4 (81) catalogs by words, place (bbox or near a point), IGBP ecosystem, Köppen climate, country/state, status, member network (NEON, LTER, ...), data product and policy, years with data, measured variables or gas species. Returns compact site summaries with years per product, facets over all matches, and paging. Next: call amf_get_site for one site or amf_get_availability for exact years.
| Name | Required | Description | Default |
|---|---|---|---|
| gas | No | Flux gas species, e.g. ['CH4'] or ['CO2', 'H2O']. | |
| bbox | No | [west, south, east, north] in decimal degrees (no antimeridian crossing). | |
| igbp | No | IGBP classes, e.g. ['DBF', 'ENF'] (see the vocabulary). | |
| near | No | Sites within radius_km of a point. | |
| sort | No | Default: distance with near, relevance with query, else site_id. | |
| limit | No | ||
| query | No | Words matched against site ID, name, state, country, NEON code and networks (every word must match; prefixes count, e.g. 'harv'). | |
| state | No | US state or province codes, e.g. ['NM', 'AZ']. | |
| years | No | Data overlapping a year or range ('2015', '2010-2015') in the chosen product (default: BASE for AmeriFlux sites, the FLUXNET tier range otherwise). | |
| offset | No | ||
| policy | No | CCBY4.0, LEGACY (AmeriFlux) or TIER2 (Tier-Two-only FLUXNET2015/CH4 sites). CC-BY-4.0, Legacy and Tier2 spellings are accepted. | |
| status | No | AmeriFlux tower status. | any |
| country | No | Country codes as in site IDs ('US', 'CA', 'BR') or names ('Canada'). | |
| koeppen | No | Köppen codes or prefixes, e.g. ['Dfb'] or ['B']. | |
| network | No | Member networks besides AmeriFlux, e.g. ['NEON'], ['LTER'], ['Phenocam']. | |
| product | No | Only sites with data in BASE-BADM, FLUXNET (FLUXNET-1F), FLUXNET2015 or FLUXNET-CH4. | |
| min_years | No | At least this many data years. | |
| collection | No | ameriflux (856 sites), fluxnet2015 (212), fluxnet_ch4 (81) or all. | all |
| base_variable | No | FP Standard base names every site must measure, e.g. ['FCH4', 'SWC']. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | |
| notes | No | |
| sites | Yes | |
| facets | Yes | |
| source | No | |
| resolved | No | |
| nextSteps | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds that results include years per product, facets over all matches, and paging — useful behavioral context, though an output schema exists and covers the return shape in more detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences: the search capabilities are front-loaded after the verb, and the routing advice comes last. The long filter list is information-packed but borders on a run-on; still, every clause corresponds to an actual query dimension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 19-parameter search tool with full annotations and an output schema, the description covers what can be searched (place, ecosystem, climate, networks, products, variables), what comes back, and where to go next. No major gap an agent needs to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 89%, so the schema documents nearly all 19 parameters including defaults and formats. The description's enumeration of filter categories largely restates what the schema already provides, adding little syntactic or semantic detail beyond it. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource ('Find flux tower sites') and names the three catalogs with site counts. The enumerated filter dimensions make its scope clearly distinct from siblings like amf_get_site or amf_search_variables.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The closing sentence routes the agent explicitly: use amf_get_site for a single site, amf_get_availability for exact years. That is a clear next-step rule, but it does not state when to prefer this search over the sibling amf_search_variables, nor any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
amf_search_variablesSearch the FP Standard and FLUXNET variable dictionariesARead-onlyIdempotent
Find variable names in the FP Standard list (AmeriFlux BASE, live, with QA/QC ranges) and the FLUXNET dictionaries (AmeriFlux FLUXNET from ONEFlux v1.3; FLUXNET2015 FULLSET and SUBSET), by words, category or resolution. FLUXNET units change with resolution (NEE is umol m-2 s-1 at HH, gC m-2 d-1 at DD), so each result lists units per resolution and SUBSET membership. Next: call amf_describe_variables on the names.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | Words matched against name, description and units (prefixes count: 'soil temp', 'GPP', 'methane'). | |
| offset | No | ||
| category | No | FP type (GASES, MET_RAD, MET_SOIL, …) or FLUXNET section (PARTITIONING, NET ECOSYSTEM EXCHANGE, …); prefixes count. | |
| dictionary | No | fp (FP Standard, BASE), fluxnet (AmeriFlux FLUXNET, ONEFlux v1.3), fluxnet_fullset / fluxnet_subset (FLUXNET2015), or all. | all |
| resolution | No | HH (also HR), DD, WW, MM or YY: FLUXNET variables available at it, with its units. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | |
| notes | No | |
| facets | Yes | |
| source | No | |
| resolved | No | |
| nextSteps | No | |
| variables | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld, non-destructive, so the safety profile is covered. The description adds real behavioral context beyond that: units vary by resolution (NEE in umol m-2 s-1 at HH vs gC m-2 d-1 at DD) and each result carries per-resolution units plus SUBSET membership — non-obvious output traits an agent needs to interpret results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences plus a one-line next step; the searchable corpora are front-loaded and the units caveat follows immediately. No filler, no restatement of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present the description needn't detail return values, yet it still summarizes what each result row carries. It omits pagination/default-limit expectations for a 6-param search tool, a minor gap given all params are optional and defaults are in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%, so the schema carries most parameter definitions. The description adds rationale the schema lacks — why `resolution` matters (units are resolution-dependent) and how the dictionary variants differ (BASE vs ONEFlux v1.3 vs FULLSET/SUBSET) — though `limit`/`offset` paging is left entirely to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb (find) and resource (variable names), and enumerates the exact corpora searched: FP Standard (AmeriFlux BASE) and three FLUXNET dictionaries including ONEFlux v1.3 and FLUXNET2015 FULLSET/SUBSET. The closing pointer to amf_describe_variables makes the boundary with that sibling unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States the three search axes (words, category, resolution) and gives an explicit next step: 'call amf_describe_variables on the names', which routes the agent in a two-step workflow. It stops short of naming when NOT to use this tool (e.g., vs amf_search_sites for site lookup), so no exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
11 tool updates
v0.1.0- First observed
amf_describe_variables - First observed
amf_get_availability - First observed
amf_get_badm - First observed
amf_get_citation - First observed
amf_get_site - First observed
amf_list_files - First observed
amf_ping - First observed
amf_preview_data - First observed
amf_read_bif - First observed
amf_search_sites - First observed
amf_search_variables
TDQS
Scored across 11 tools
Most tools occupy clearly separate niches: search_* returns candidate lists, get_* pulls one entity, and the local-file tools (list_files, preview_data, read_bif) are distinct from the API tools. A few pairs are close — describe_variables vs. search_variables (both about variable names) and get_badm vs. read_bif (BADM metadata via API vs. from a local file) — but the descriptions explicitly anchor them to different sources and workflows.
Every tool carries the amf_ prefix and follows a clean snake_case verb_noun pattern (get_site, search_sites, describe_variables, read_bif, list_files), with only the conventional bare 'ping' deviating. The naming is fully predictable and reinforces the search/get/describe groupings.
Eleven tools is a well-scoped set for a site-catalog + metadata + local-file-inspection server, and each tool maps to a concrete step in the discovery-to-analysis workflow. No filler or redundant wrappers are present.
The discovery, metadata, citation and local-file reading surface is rich, but the download step appears absent from the tool list even though amf_ping describes configured download identities, enabled downloads, and 'which tools need it' — leaving a gap between finding a site and reading its data. There is also no write/export or bulk-extraction operation, so agents may hit a dead end after previewing files.
Maintenance
Related MCP Connectors
Use your Fulcra secure context lake to collaborate with other agents, read and write data, and more
Search DataCite datasets and software, fetch DOI metadata, trace relations, format citations.
Real-world data for agents: air quality, geocoding, quakes, holidays, web search
Machine-readable utilities and datasets for AI agents.
Related MCP Servers
- AlicenseAqualityBmaintenanceEnables querying and exporting phenology data from the USA National Phenology Network, including raw data, phenometrics, and mapping capabilities.103MIT
- AlicenseNot gradedqualityBmaintenanceEnables MCP agents to discover, import, query, visualize, select, and cite NEON and local scientific datasets while keeping credentials, private paths, and bulk data out of model context.MIT
- AlicenseAqualityBmaintenanceEnables AI agents to discover NEON ecological data products and sites, check data availability, list and download data files, and generate citations via the NEON Data API.20MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to search Earth-science dataset collections by keyword, platform, instrument, time range, or bounding box; fetch full collection metadata; and list individual data granules with direct download links.12 npmMIT