list_datasets
List the ICOS datasets: one per data store, with domain (atmosphere, ocean, ecosystem), time and space coverage, licence and DOI.
無需輸入參數。
eu.icos-cp由 icos-cp.eu 發布官方發布者v0.3.0更新於 Nov 7, 2026
ICOS atmosphere, ocean and ecosystem greenhouse-gas observations, with citation and DOI per answer
查詢 ICOS 溫室氣體與生態系統觀測資料:檢索變數與測站、估算並取得資料、計算統計量,並回傳附 DOI 的引用資訊。
Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。
把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。
閱讀 https://sourceweft.com/mcp/eu.icos-cp%2Ficos/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。把它新增到你客戶端的 mcpServers 設定中。
{
"mcpServers": {
"icos-carbon-and-greenhouse-gas-observati": {
"type": "http",
"url": "https://mcp.icos-cp.eu/mcp"
}
}
}ICOS carbon and greenhouse-gas observations for AI assistants, over the
Model Context Protocol. A thin server over the ICOS zarr proxy
(https://zarr.icos-cp.eu): every number comes from the proxy, and every
data answer carries the citation, licence and DOI. The plan, and why it
is built this way, is docs/plan.md.
Phases 1 and 2: seven read-only tools, five resources, three prompts, and a per-store access policy.
ICOS_PROXY points it at another proxy (the RC, a test instance).
Over HTTP the server also answers GET / with an HTML page in the style
of zarr.icos-cp.eu -- built from what it offers an anonymous caller: the
endpoint and how to connect, the public datasets, the tools and prompts,
the citation rule (landing.py; ICOS_MCP_PUBLIC_URL sets the endpoint
it names, default https://mcp.icos-cp.eu) -- and GET /health.
DEFAULT-DENY: a store is offered only when a rule names it, whatever the
proxy behind the server would serve. Without a config file the rules are
exactly the public stores of zarr.icos-cp.eu (config/public.json writes
them out). ICOS_MCP_CONFIG=/path/to/config.json sets the proxy, the
Host header to send it, the base of download links, and an ordered list
of store rules, each public or token:
config/ct122.example.json is the shape for running beside zpd on CT122,
where zpd answers for EVERY store on the machine (the shuttle, GlobalView,
AGAGE): the public stores by name, those three behind tokens, anything
else hidden. A token store is offered to an HTTP caller sending
Authorization: Bearer <token> whose SHA-256 is in its tokens_file
(plain tokens are never stored); a local stdio caller is the operator and
uses ICOS_MCP_TOKEN, which never speaks for an HTTP caller. A hidden
store answers exactly as one that does not exist, and the static
icos://catalogue resource -- which the protocol does not tell who is
asking -- lists the public stores only.
An oauth section in the config makes signing in required over HTTP.
Anyone can sign in. The aim is to know who uses the server, not to keep
anyone out:
The server is only a resource server. ICOS's Keycloak handles the
sign-in, through cpauth, Google or ORCID. MCP clients find Keycloak in
/.well-known/oauth-protected-resource, register themselves with it and
send the user to sign in. A token must be signed by the realm and carry
this server's audience, which needs an audience mapper in Keycloak.
The store tokens above still work. The landing page and /health stay
open, and the stdio operator is never asked to sign in (auth.py).
Signing in also allows a group store rule. The store is offered to
members of a Keycloak group, or of a subgroup of one, and to no one else.
The groups come from the verified token's groups claim:
Group names are paths below /apps/mcp in the realm: agage is
/apps/mcp/agage. That is the only part of a user's groups Keycloak
sends this server.
Access is granted and withdrawn in Keycloak, not in the config. A group
rule may also list store tokens for scripts. A group rule without an
oauth section is refused at load, because nobody could reach it.
In Claude Code:
Resources: icos://stores/{store}/agent-guide, icos://stores/{store}/croissant,
icos://catalogue, icos://llms.txt, icos://data-passport. Prompts:
station_record, compare_stations, ocean_region.
conformance/run.sh starts a local server and runs the MCP project's own
conformance suite against it, pinned to 0.1.16 by
conformance/package-lock.json. conformance/baseline.yml lists the
known failures and why each one fails (mostly the suite's own test
fixtures, which a real server doesn't carry). It is read in both
directions: a new failure fails the run, and so does an entry that now
passes.
eval/questions.json is the DRAFT evaluation set: 30 questions across
the three domains, each naming the variable and station a correct answer
must use and a truth computed from the proxy at run time. It needs one
reviewer per domain before it is relied on; the runner is not written yet.
This server is the ORACLE for the M9 port (mcpd, plan phase 7): its tool
names, descriptions and answer shapes are the contract the port is
replayed against, so change them deliberately.
Copyright (C) 2026 ICOS ERIC -- Carbon Portal.
This program is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the Free
Software Foundation, either version 3 of the License, or (at your option)
any later version. See LICENSE.
The DATA this server serves are not covered by this licence: each answer carries the licence of its dataset (ICOS data are CC BY 4.0) and the citation to give with it.
來源:README.md,提交 4da9c57
List the ICOS datasets: one per data store, with domain (atmosphere, ocean, ecosystem), time and space coverage, licence and DOI.
無需輸入參數。
Find variable ids in the ICOS catalogue by name, quantity or unit. The ids are what estimate and get_data take. Primary measurements come before their companions (standard deviation, value counts, flags).
text必填limitstoredomainOne variable in full: names, unit, which dataset, its coverage, how its quality flag is read, licence and DOI. For a multi-dimensional variable read through zarr (access 'zarr'), its axes with their labels, the slice /query serves (prescribed) and an xarray line for any other slice.
id必填How big a selection is -- rows, stations, time span -- without fetching it. Call this before get_data.
id必填endstartcruiselat_maxlat_minlon_maxlon_minstationapply_qcheight_maxheight_minObservations for one variable, filtered by box, time, station, cruise, height and quality control. Returns at most max_rows rows as a table, the total, a download URL for the whole selection, and the citation the user must be given with any use of the data.
id必填endstartcruiselat_maxlat_minlon_maxlon_minstationapply_qcmax_rowsquestion另有 2 個How to cite a variable's data: the citation text, licence and DOI from its data passport, and -- for a selection (stations, a time window, a box) -- every data object it came from, in full. Data answers carry a short citation and only the COUNT of their sources; this lists them.
id必填endstartlat_maxlat_minlon_maxlon_minstationStatistics over a WHOLE selection, computed on the server: count, mean, min, max, sum and standard deviation of one variable, overall or per station, year, month or day. Use this for any average, total, range or trend instead of reading rows. Any size: a selection over 500,000 rows is split by time on the server and merged exactly. `std` is the POPULATION standard deviation (ddof 0). `sum` adds the values as stored, which is a total only for values that are themselves totals per row: summing a RATE (umol m-2 s-1 per half-hour, gC m-2 d-1 per day) or a concentration gives no physical quantity -- for a flux total multiply the mean by the period.
byid必填endstartcruiselat_maxlat_minlon_maxlon_minstationapply_qcquestion另有 2 個The stations that carry a variable: id, name, position, sampling height, country, ecosystem -- near a point (sorted by distance), in a box, by name or by country. The ids are what estimate and get_data take as station=.
id必填textlimitcountrylat_maxlat_minlon_maxlon_minnear_latnear_lonradius_km已滿足適用檢查項的 100%
該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。
uv run icos-mcp # stdio, for a local clientuv run icos-mcp --transport streamable-http --port 8090 # http://127.0.0.1:8090/mcpuv run icos-mcp --show-policy # what this config offers, to whomuv run icos-mcp --hash-token TOKEN # the line a tokens_file takes"oauth": {"issuer": "https://sso.fs4vm.icos-cp.eu/realms/icos-test", "audience": "https://mcp.icos-cp.eu"}{"match": "agage*", "access": "group", "groups": ["agage"], "public_url": "https://agage-zarr.icos-cp.eu"}claude mcp add icos -- uv --directory /path/to/zarrm9/mcp run icos-mcpuv run pytest # over RECORDED proxy answers (tests/cassette)ICOS_CASSETTE_MODE=record uv run pytest # re-record from the live proxyICOS_LIVE=1 uv run pytest # live, nothing recordeduv run ruff check src testsconformance/run.sh # the MCP conformance suite (needs Node)