GribStream Weather MCP
NOAA and ECMWF weather forecast MCP for discovery, validation, and GribStream OAuth queries.
사용해야 할까요
품질 및 안전성
발견 사항 (4)
- LOWgribstream_build_timeseries_request에서
- LOWgribstream_get_expression_reference에서
- LOWgribstream_list_shared_parameters에서
- LOWgribstream_resolve_shared_parameter에서
도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.
컨텍스트 비용
이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.
설치
원클릭 설치
`claude_desktop_config.json` 파일에 다음을 추가하세요:
{
"mcpServers": {
"mcp": {
"url": "https://gribstream.com/mcp"
}
}
}원격 엔드포인트
https://gribstream.com/mcpstreamable-http할 수 있는 일
도구 목록
도구 (12)
🟢gribstream_build_runs_request(accept, dataset, request)
NO AUTH / PUBLIC / READ-ONLY. Builds and validates a copy-pasteable authenticated /api/v2/{dataset}/runs HTTP request without sending it. This tool does not execute the request, query weather values, or return forecast data. Use gribstream_query_runs when the user asks for actual model-run forecast data or CSV/JSON/NDJSON/Parquet data. Generated direct API requests include Accept-Encoding: gzip, and generated curl commands use --compressed so large responses can be transferred compressed when the client supports it. The request body must use exact selectors discovered from the catalog or shared-parameter tools, with coordinates in request.coordinates and selectors in request.variables.
입력 스키마
{
"type": "object",
"properties": {
"accept": {
"description": "Desired response format for the eventual HTTP request. Prefer application/vnd.apache.parquet for dense grids and large typed tabular results.",
"enum": [
"text/csv",
"application/json",
"application/ndjson",
"application/x-ndjson",
"application/vnd.apache.parquet",
"application/x-parquet",
"application/parquet"
],
"type": "string"
},
"dataset": {
"description": "Dataset code, for example gfs, ifsoper, nbm, hrrr, or urma.",
"type": "string"
},
"request": {
"additionalProperties": true,
"description": "Runs request body. Use timesList for exact UTC model run times, or the half-open range forecastedFrom+forecastedUntil where forecastedFrom is inclusive, forecastedUntil is exclusive, and forecastedFrom must be earlier than forecastedUntil. Equal bounds select no times. Coordinates must be in request.coordinates, and variable selectors must be in request.variables.",
"properties": {
"asOf": {
"description": "Do not set asOf unless the user explicitly asks for backtesting, time travel, what was known then, or a historical model-run cutoff. Omit asOf for latest or best-available forecasts because it filters out forecast runs newer than the cutoff and can make recent data look missing. This is a UTC model-run-time cutoff for /timeseries, not a live API availability timestamp.",
"type": "string"
},
"coordinates": {
"description": "Point coordinates. This exact field name is required. Do not use location, coord, coords, latitude/longitude at top level, or any singular replacement.",
"items": {
"additionalProperties": false,
"properties": {
"lat": {
"description": "Latitude in decimal degrees.",
"type": "number"
},
"lon": {
"description": "Longitude in decimal degrees.",
"type": "number"
},
"name": {
"description": "Optional coordinate label copied into the response.",
"type": "string"
}
},
"required": [
"lat",
"lon"
],
"type": "object"
},
"type": "array"
},
"expressions": {
"description": "Optional derived variables evaluated from variable aliases.",
"items": {
"additionalProperties": true,
"description": "Expression object.",
"properties": {
"alias": {
"description": "Output field name for the expression.",
"type": "string"
},
"expression": {
"description": "Expression text. Reference variable aliases, not raw selector names.",
"type": "string"
},
"hidden": {
"description": "Optional: hide this expression from the response output.",
"type": "boolean"
}
},
"type": "object"
},
"type": "array"
},
"filter": {
"additionalProperties": true,
"description": "Optional row filter expression evaluated from variable aliases.",
"properties": {
"alias": {
"description": "Output field name for the expression.",
"type": "string"
},
"expression": {
"description": "Expression text. Reference variable aliases, not raw selector names.",
"type": "string"
},
"hidden": {
"description": "Optional: hide this expression from the response output.",
"type": "boolean"
}
},
"type": "object"
},
"forecastedFrom": {
"description": "Inclusive UTC model-run-time range start for /runs. Must be earlier than forecastedUntil; use timesList for one exact model run time.",
"type": "string"
},
"forecastedUntil": {
"description": "Exclusive UTC model-run-time range end for /runs. Must be later than forecastedFrom; equal bounds select no times.",
"type": "string"
},
"fromTime": {
"description": "Inclusive UTC valid-time range start for /timeseries, for example 2025-05-01T00:00:00Z. Must be earlier than untilTime; use timesList for one exact valid time.",
"type": "string"
},
"grid": {
"additionalProperties": false,
"description": "Optional regular latitude/longitude grid. Use this instead of or in addition to coordinates. The API preserves the requested step and does not silently coarsen fine grids. The default limit is 120000 expanded coordinates; account-specific plan or token settings may set a different maximum up to 1050000, enough for a full native 0.25-degree global GFS grid, and an oversized-response error reports the applicable maximum. Use URL delivery for dense grids before considering spatial tiling.",
"properties": {
"maxLatitude": {
"type": "number"
},
"maxLongitude": {
"type": "number"
},
"minLatitude": {
"type": "number"
},
"minLongitude": {
"type": "number"
},
"step": {
"description": "Grid spacing in degrees. Must be greater than 0.",
"type": "number"
}
},
"required": [
"minLatitude",
"maxLatitude",
"minLongitude",
"maxLongitude",
"step"
],
"type": "object"
},
"includeMetadata": {
"description": "Optional additional row metadata. The only supported value is index_updated_at. Do not request forecasted_at or forecasted_time here; both are regular response columns returned automatically.",
"items": {
"enum": [
"index_updated_at"
],
"type": "string"
},
"type": "array"
},
"maxHorizon": {
"description": "Optional maximum lead time in hours.",
"type": "integer"
},
"members": {
"description": "Optional ensemble member numbers.",
"items": {
"type": "integer"
},
"type": "array"
},
"minHorizon": {
"description": "Optional minimum lead time in hours.",
"type": "integer"
},
"timesList": {
"description": "Exact UTC valid times for /timeseries, or exact UTC model run times for /runs. Use this for one exact time instead of setting range bounds equal.",
"items": {
"type": "string"
},
"type": "array"
},
"untilTime": {
"description": "Exclusive UTC valid-time range end for /timeseries, for example 2025-05-01T06:00:00Z. Must be later than fromTime; equal bounds select no times.",
"type": "string"
},
"variables": {
"description": "Variable selectors. This exact field name is required. Do not use parameters, parameter, variable, selector, or selectors. Values must be exact case-sensitive selector tuples discovered from catalog tools.",
"items": {
"additionalProperties": false,
"properties": {
"alias": {
"description": "Optional response field name. Strongly recommended.",
"type": "string"
},
"hidden": {
"description": "Optional: hide intermediate variables used only by expressions.",
"type": "boolean"
},
"info": {
"description": "Exact info string. Use an empty string when the catalog selector has no info value.",
"type": "string"
},
"level": {
"description": "Exact level string, for example 2 m above ground.",
"type": "string"
},
"name": {
"description": "Exact case-sensitive parameter short name, for example TMP.",
"type": "string"
}
},
"required": [
"name",
"level",
"info"
],
"type": "object"
},
"type": "array"
}
},
"type": "object"
}
},
"required": [
"dataset",
"request"
],
"additionalProperties": false
}출력 스키마
{
"type": "object",
"properties": {
"body": {
"additionalProperties": true,
"description": "GribStream API request body.",
"type": "object"
},
"curl": {
"description": "Copy-pasteable curl command.",
"type": "string"
},
"endpoint": {
"description": "GribStream endpoint.",
"enum": [
"timeseries",
"runs"
],
"type": "string"
},
"errors": {
"description": "Validation errors.",
"items": {
"type": "string"
},
"type": "array"
},
"headers": {
"additionalProperties": {
"type": "string"
},
"description": "HTTP headers for the generated request. Includes Accept-Encoding: gzip so large direct API responses can be transferred compressed when the client supports decompression.",
"type": "object"
},
"method": {
"description": "HTTP method for the generated request.",
"type": "string"
},
"timestamp_semantics": {
"description": "Endpoint-specific timestamp guidance.",
"type": "string"
},
"url": {
"description": "Public GribStream API URL.",
"type": "string"
},
"valid": {
"description": "Whether the request body passed local shape, selector, and expression checks.",
"type": "boolean"
},
"warnings": {
"description": "Validation warnings.",
"items": {
"type": "string"
},
"type": "array"
}
},
"required": [
"valid",
"endpoint",
"method",
"url",
"headers",
"body",
"curl",
"timestamp_semantics"
],
"additionalProperties": false
}🟢gribstream_build_timeseries_request(accept, dataset, request)
NO AUTH / PUBLIC / READ-ONLY. Builds and validates a copy-pasteable authenticated /api/v2/{dataset}/timeseries HTTP request without sending it. This tool does not execute the request, query weather values, or return forecast data. Use gribstream_query_timeseries when the user asks for actual weather values or CSV/JSON/NDJSON/Parquet data. Generated direct API requests include Accept-Encoding: gzip, and generated curl commands use --compressed so large responses can be transferred compressed when the client supports it. Do not include request.asOf unless the user explicitly wants backtesting, time travel, or a historical model-run cutoff. The request body must use exact selectors discovered from the catalog or shared-parameter tools, with coordinates in request.coordinates and selectors in request.variables.
입력 스키마
{
"type": "object",
"properties": {
"accept": {
"description": "Desired response format for the eventual HTTP request. Prefer application/vnd.apache.parquet for dense grids and large typed tabular results.",
"enum": [
"text/csv",
"application/json",
"application/ndjson",
"application/x-ndjson",
"application/vnd.apache.parquet",
"application/x-parquet",
"application/parquet"
],
"type": "string"
},
"dataset": {
"description": "Dataset code, for example gfs, ifsoper, nbm, hrrr, or urma.",
"type": "string"
},
"request": {
"additionalProperties": true,
"description": "Timeseries request body. Use timesList for exact UTC valid times, or the half-open range fromTime+untilTime where fromTime is inclusive, untilTime is exclusive, and fromTime must be earlier than untilTime. Equal bounds select no times. Omit asOf unless the user explicitly asks for backtesting, time travel, what was known then, or a historical model-run cutoff. Coordinates must be in request.coordinates, and variable selectors must be in request.variables.",
"properties": {
"asOf": {
"description": "Do not set asOf unless the user explicitly asks for backtesting, time travel, what was known then, or a historical model-run cutoff. Omit asOf for latest or best-available forecasts because it filters out forecast runs newer than the cutoff and can make recent data look missing. This is a UTC model-run-time cutoff for /timeseries, not a live API availability timestamp.",
"type": "string"
},
"coordinates": {
"description": "Point coordinates. This exact field name is required. Do not use location, coord, coords, latitude/longitude at top level, or any singular replacement.",
"items": {
"additionalProperties": false,
"properties": {
"lat": {
"description": "Latitude in decimal degrees.",
"type": "number"
},
"lon": {
"description": "Longitude in decimal degrees.",
"type": "number"
},
"name": {
"description": "Optional coordinate label copied into the response.",
"type": "string"
}
},
"required": [
"lat",
"lon"
],
"type": "object"
},
"type": "array"
},
"expressions": {
"description": "Optional derived variables evaluated from variable aliases.",
"items": {
"additionalProperties": true,
"description": "Expression object.",
"properties": {
"alias": {
"description": "Output field name for the expression.",
"type": "string"
},
"expression": {
"description": "Expression text. Reference variable aliases, not raw selector names.",
"type": "string"
},
"hidden": {
"description": "Optional: hide this expression from the response output.",
"type": "boolean"
}
},
"type": "object"
},
"type": "array"
},
"filter": {
"additionalProperties": true,
"description": "Optional row filter expression evaluated from variable aliases.",
"properties": {
"alias": {
"description": "Output field name for the expression.",
"type": "string"
},
"expression": {
"description": "Expression text. Reference variable aliases, not raw selector names.",
"type": "string"
},
"hidden": {
"description": "Optional: hide this expression from the response output.",
"type": "boolean"
}
},
"type": "object"
},
"forecastedFrom": {
"description": "Inclusive UTC model-run-time range start for /runs. Must be earlier than forecastedUntil; use timesList for one exact model run time.",
"type": "string"
},
"forecastedUntil": {
"description": "Exclusive UTC model-run-time range end for /runs. Must be later than forecastedFrom; equal bounds select no times.",
"type": "string"
},
"fromTime": {
"description": "Inclusive UTC valid-time range start for /timeseries, for example 2025-05-01T00:00:00Z. Must be earlier than untilTime; use timesList for one exact valid time.",
"type": "string"
},
"grid": {
"additionalProperties": false,
"description": "Optional regular latitude/longitude grid. Use this instead of or in addition to coordinates. The API preserves the requested step and does not silently coarsen fine grids. The default limit is 120000 expanded coordinates; account-specific plan or token settings may set a different maximum up to 1050000, enough for a full native 0.25-degree global GFS grid, and an oversized-response error reports the applicable maximum. Use URL delivery for dense grids before considering spatial tiling.",
"properties": {
"maxLatitude": {
"type": "number"
},
"maxLongitude": {
"type": "number"
},
"minLatitude": {
"type": "number"
},
"minLongitude": {
"type": "number"
},
"step": {
"description": "Grid spacing in degrees. Must be greater than 0.",
"type": "number"
}
},
"required": [
"minLatitude",
"maxLatitude",
"minLongitude",
"maxLongitude",
"step"
],
"type": "object"
},
"includeMetadata": {
"description": "Optional additional row metadata. The only supported value is index_updated_at. Do not request forecasted_at or forecasted_time here; both are regular response columns returned automatically.",
"items": {
"enum": [
"index_updated_at"
],
"type": "string"
},
"type": "array"
},
"maxHorizon": {
"description": "Optional maximum lead time in hours.",
"type": "integer"
},
"members": {
"description": "Optional ensemble member numbers.",
"items": {
"type": "integer"
},
"type": "array"
},
"minHorizon": {
"description": "Optional minimum lead time in hours.",
"type": "integer"
},
"timesList": {
"description": "Exact UTC valid times for /timeseries, or exact UTC model run times for /runs. Use this for one exact time instead of setting range bounds equal.",
"items": {
"type": "string"
},
"type": "array"
},
"untilTime": {
"description": "Exclusive UTC valid-time range end for /timeseries, for example 2025-05-01T06:00:00Z. Must be later than fromTime; equal bounds select no times.",
"type": "string"
},
"variables": {
"description": "Variable selectors. This exact field name is required. Do not use parameters, parameter, variable, selector, or selectors. Values must be exact case-sensitive selector tuples discovered from catalog tools.",
"items": {
"additionalProperties": false,
"properties": {
"alias": {
"description": "Optional response field name. Strongly recommended.",
"type": "string"
},
"hidden": {
"description": "Optional: hide intermediate variables used only by expressions.",
"type": "boolean"
},
"info": {
"description": "Exact info string. Use an empty string when the catalog selector has no info value.",
"type": "string"
},
"level": {
"description": "Exact level string, for example 2 m above ground.",
"type": "string"
},
"name": {
"description": "Exact case-sensitive parameter short name, for example TMP.",
"type": "string"
}
},
"required": [
"name",
"level",
"info"
],
"type": "object"
},
"type": "array"
}
},
"type": "object"
}
},
"required": [
"dataset",
"request"
],
"additionalProperties": false
}출력 스키마
{
"type": "object",
"properties": {
"body": {
"additionalProperties": true,
"description": "GribStream API request body.",
"type": "object"
},
"curl": {
"description": "Copy-pasteable curl command.",
"type": "string"
},
"endpoint": {
"description": "GribStream endpoint.",
"enum": [
"timeseries",
"runs"
],
"type": "string"
},
"errors": {
"description": "Validation errors.",
"items": {
"type": "string"
},
"type": "array"
},
"headers": {
"additionalProperties": {
"type": "string"
},
"description": "HTTP headers for the generated request. Includes Accept-Encoding: gzip so large direct API responses can be transferred compressed when the client supports decompression.",
"type": "object"
},
"method": {
"description": "HTTP method for the generated request.",
"type": "string"
},
"timestamp_semantics": {
"description": "Endpoint-specific timestamp guidance.",
"type": "string"
},
"url": {
"description": "Public GribStream API URL.",
"type": "string"
},
"valid": {
"description": "Whether the request body passed local shape, selector, and expression checks.",
"type": "boolean"
},
"warnings": {
"description": "Validation warnings.",
"items": {
"type": "string"
},
"type": "array"
}
},
"required": [
"valid",
"endpoint",
"method",
"url",
"headers",
"body",
"curl",
"timestamp_semantics"
],
"additionalProperties": false
}🟢gribstream_get_dataset(dataset)
NO AUTH / PUBLIC / READ-ONLY. Gets full public metadata for one dataset code, including archive coverage, cadence, tags, source links, and members. This tool does not query weather values and cannot return forecast data.
입력 스키마
{
"type": "object",
"properties": {
"dataset": {
"description": "Dataset code, for example gfs, nbm, ifsoper, hrrr, urma.",
"type": "string"
}
},
"required": [
"dataset"
],
"additionalProperties": false
}출력 스키마
{
"type": "object",
"additionalProperties": true,
"description": "Public GribStream dataset metadata."
}🟢gribstream_get_expression_reference
NO AUTH / PUBLIC / READ-ONLY. Gets the GribStream expression language reference, including github.com/expr-lang/expr syntax guidance, alias rules, examples, and the full exported func.* math function list. This tool does not query weather values and cannot return forecast data.
입력 스키마
{
"type": "object",
"properties": {},
"additionalProperties": false
}출력 스키마
{
"type": "object",
"additionalProperties": true,
"description": "GribStream expression language rules, examples, and available math functions."
}🟢gribstream_get_parameter(dataset, parameter)
NO AUTH / PUBLIC / READ-ONLY. Gets detailed metadata and exact selector variations for one already-known dataset-native parameter code. Parameter codes are case-sensitive. For a common natural-language concept such as 2 metre temperature, use gribstream_resolve_shared_parameter before guessing a native code. This tool does not query weather values and cannot return forecast data.
입력 스키마
{
"type": "object",
"properties": {
"dataset": {
"description": "Dataset code, for example ifsoper.",
"type": "string"
},
"parameter": {
"description": "Exact case-sensitive parameter short name, for example 100u, 2t, TMP, or APCP.",
"type": "string"
}
},
"required": [
"dataset",
"parameter"
],
"additionalProperties": false
}출력 스키마
{
"type": "object",
"additionalProperties": true,
"description": "Detailed parameter metadata with exact selector variations."
}🟢gribstream_list_datasets(code, family, is_ensemble, tag)
NO AUTH / PUBLIC / READ-ONLY. Lists public GribStream datasets and metadata. This tool does not query weather values and cannot return forecast data. Supports catalog filters such as code, family, tag, and is_ensemble.
입력 스키마
{
"type": "object",
"properties": {
"code": {
"description": "Dataset code or list of dataset codes, for example gfs or [\"gfs\", \"ifsoper\"].",
"oneOf": [
{
"type": "string"
},
{
"items": {
"type": "string"
},
"type": "array"
}
]
},
"family": {
"description": "Dataset family filter, for example gfs, ifs, nbm, hrrr, rap, rtma, urma.",
"type": "string"
},
"is_ensemble": {
"description": "Filter to ensemble datasets when true, or deterministic datasets when false.",
"type": "boolean"
},
"tag": {
"description": "Tag or list of tags. Multiple tags use AND semantics in the API.",
"oneOf": [
{
"type": "string"
},
{
"items": {
"type": "string"
},
"type": "array"
}
]
}
},
"additionalProperties": false
}출력 스키마
{
"type": "object",
"properties": {
"datasets": {
"description": "Public GribStream dataset summaries.",
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
}
},
"required": [
"datasets"
],
"additionalProperties": false
}🟢gribstream_list_parameters(dataset)
NO AUTH / PUBLIC / READ-ONLY. Lists parameter summaries for one dataset. Use this before selecting exact case-sensitive parameter codes. This tool does not query weather values and cannot return forecast data.
입력 스키마
{
"type": "object",
"properties": {
"dataset": {
"description": "Dataset code, for example ifsoper.",
"type": "string"
}
},
"required": [
"dataset"
],
"additionalProperties": false
}출력 스키마
{
"type": "object",
"properties": {
"parameters": {
"description": "Parameter summaries for one GribStream dataset.",
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
}
},
"required": [
"parameters"
],
"additionalProperties": false
}🟢gribstream_list_shared_parameters(dataset, dataset_mode)
NO AUTH / PUBLIC / READ-ONLY. Lists normalized shared parameter presets that can map one logical signal across datasets. Use this only when the shared parameter code is uncertain; when a common code such as temperature_2m is already clear, call gribstream_resolve_shared_parameter directly. This tool does not query weather values and cannot return forecast data.
입력 스키마
{
"type": "object",
"properties": {
"dataset": {
"description": "Optional dataset code or list of dataset codes to filter supported shared parameters.",
"oneOf": [
{
"type": "string"
},
{
"items": {
"type": "string"
},
"type": "array"
}
]
},
"dataset_mode": {
"description": "Whether every listed dataset must support the preset or any one may support it.",
"enum": [
"any",
"all"
],
"type": "string"
}
},
"additionalProperties": false
}출력 스키마
{
"type": "object",
"properties": {
"shared_parameters": {
"description": "Shared weather parameter summaries.",
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
}
},
"required": [
"shared_parameters"
],
"additionalProperties": false
}🟡gribstream_query_runs(accept, dataset, delivery, max_bytes, request)
AUTH REQUIRED / DATA QUERY. Executes an authenticated /api/v2/{dataset}/runs request and returns actual weather/forecast data values across model runs. Use this tool, not the NO AUTH request-building or metadata tools, when the user asks to fetch, retrieve, download, return, or analyze model-run history, forecast aging, changing forecasts, CSV/JSON/NDJSON/Parquet data, plots, or analysis. Defaults to inline CSV for compatibility; use URL delivery for dense grids and large tabular results. Time ranges are half-open: the start is inclusive and the end is exclusive. The start must be earlier than the end; equal bounds select no times. Use timesList for one exact valid time on /timeseries or one exact model run time on /runs. When a live query returns a resource_link, the exact signed HTTPS URL is the result: download it directly once with an available HTTPS or file-download capability, without an API token. This consumes the selected GribStream MCP result; it is not a direct GribStream API call or a connector bypass. Do not look for an MCP resources/read tool, and do not repeat the query merely to obtain the file bytes. If the client reports that network or allowlist policy blocks the returned resource_link, do not retry URL delivery. For CSV, JSON, or NDJSON whose reported size is at most 10000000 bytes, retry the same request at most once with delivery=inline. Parquet cannot use inline delivery. If the artifact is larger, reduce the request using the documented split order before one inline CSV retry. For dense grids or large tabular results, use delivery=url so MCP returns a short-lived signed HTTPS resource link instead of putting the full dataset into tool output. Prefer application/vnd.apache.parquet only when a compatible Parquet reader is already known to be available. If reader availability is unknown, do not spend tool calls probing or installing packages; use text/csv with delivery=url immediately. Use one grid request, process the downloaded file locally, and never print or serialize the full file into chat or tool output. Do not install a dependency or write a Parquet parser solely for one result. When a real API request limit requires splitting, split by time range first, split variables second, and split coordinates/grid/space last; spatial tiling creates the most extra work. Response rows are unsorted; sort by location fields, forecasted_at, and forecasted_time before plotting, building time series, or checking for gaps. The request body must use request.coordinates and request.variables; do not use location, coord, coords, parameters, parameter, or variable as replacement field names.
입력 스키마
{
"type": "object",
"properties": {
"accept": {
"description": "Desired response format. Defaults to text/csv for compatibility. For dense grids and large tabular analysis, use application/vnd.apache.parquet only when a compatible reader is already known to be available. If reader availability is unknown, do not probe or install packages; use text/csv with delivery=url immediately.",
"enum": [
"text/csv",
"application/json",
"application/ndjson",
"application/x-ndjson",
"application/vnd.apache.parquet",
"application/x-parquet",
"application/parquet"
],
"type": "string"
},
"dataset": {
"description": "Dataset code, for example gfs, ifsoper, nbm, hrrr, or urma.",
"type": "string"
},
"delivery": {
"description": "Optional result delivery mode. Set inline for CSV, JSON, or NDJSON in the MCP result, or url for a short-lived signed resource link. Omission defaults to inline for text formats; Parquet always uses URL delivery and rejects delivery=inline. For a resource_link blocked by client network policy, do not retry URL delivery: if a text artifact is at most 10000000 bytes, retry the same request at most once with delivery=inline; otherwise reduce it using the documented split order first.",
"enum": [
"inline",
"url"
],
"type": "string"
},
"max_bytes": {
"description": "Maximum inline response bytes to return through MCP for CSV/JSON/NDJSON. Default and server-side maximum are 10000000. This setting does not limit artifacts delivered by signed URL. For dense grids or large tabular results, use delivery=url so MCP returns a short-lived signed HTTPS resource link instead of putting the full dataset into tool output. Prefer application/vnd.apache.parquet only when a compatible Parquet reader is already known to be available. If reader availability is unknown, do not spend tool calls probing or installing packages; use text/csv with delivery=url immediately. Use one grid request, process the downloaded file locally, and never print or serialize the full file into chat or tool output. Do not install a dependency or write a Parquet parser solely for one result. When a real API request limit requires splitting, split by time range first, split variables second, and split coordinates/grid/space last; spatial tiling creates the most extra work.",
"maximum": 10000000,
"minimum": 1,
"type": "integer"
},
"request": {
"additionalProperties": true,
"description": "Runs request body. Use timesList for exact UTC model run times, or the half-open range forecastedFrom+forecastedUntil where forecastedFrom is inclusive, forecastedUntil is exclusive, and forecastedFrom must be earlier than forecastedUntil. Equal bounds select no times. Coordinates must be in request.coordinates, and variable selectors must be in request.variables.",
"properties": {
"asOf": {
"description": "Do not set asOf unless the user explicitly asks for backtesting, time travel, what was known then, or a historical model-run cutoff. Omit asOf for latest or best-available forecasts because it filters out forecast runs newer than the cutoff and can make recent data look missing. This is a UTC model-run-time cutoff for /timeseries, not a live API availability timestamp.",
"type": "string"
},
"coordinates": {
"description": "Point coordinates. This exact field name is required. Do not use location, coord, coords, latitude/longitude at top level, or any singular replacement.",
"items": {
"additionalProperties": false,
"properties": {
"lat": {
"description": "Latitude in decimal degrees.",
"type": "number"
},
"lon": {
"description": "Longitude in decimal degrees.",
"type": "number"
},
"name": {
"description": "Optional coordinate label copied into the response.",
"type": "string"
}
},
"required": [
"lat",
"lon"
],
"type": "object"
},
"type": "array"
},
"expressions": {
"description": "Optional derived variables evaluated from variable aliases.",
"items": {
"additionalProperties": true,
"description": "Expression object.",
"properties": {
"alias": {
"description": "Output field name for the expression.",
"type": "string"
},
"expression": {
"description": "Expression text. Reference variable aliases, not raw selector names.",
"type": "string"
},
"hidden": {
"description": "Optional: hide this expression from the response output.",
"type": "boolean"
}
},
"type": "object"
},
"type": "array"
},
"filter": {
"additionalProperties": true,
"description": "Optional row filter expression evaluated from variable aliases.",
"properties": {
"alias": {
"description": "Output field name for the expression.",
"type": "string"
},
"expression": {
"description": "Expression text. Reference variable aliases, not raw selector names.",
"type": "string"
},
"hidden": {
"description": "Optional: hide this expression from the response output.",
"type": "boolean"
}
},
"type": "object"
},
"forecastedFrom": {
"description": "Inclusive UTC model-run-time range start for /runs. Must be earlier than forecastedUntil; use timesList for one exact model run time.",
"type": "string"
},
"forecastedUntil": {
"description": "Exclusive UTC model-run-time range end for /runs. Must be later than forecastedFrom; equal bounds select no times.",
"type": "string"
},
"fromTime": {
"description": "Inclusive UTC valid-time range start for /timeseries, for example 2025-05-01T00:00:00Z. Must be earlier than untilTime; use timesList for one exact valid time.",
"type": "string"
},
"grid": {
"additionalProperties": false,
"description": "Optional regular latitude/longitude grid. Use this instead of or in addition to coordinates. The API preserves the requested step and does not silently coarsen fine grids. The default limit is 120000 expanded coordinates; account-specific plan or token settings may set a different maximum up to 1050000, enough for a full native 0.25-degree global GFS grid, and an oversized-response error reports the applicable maximum. Use URL delivery for dense grids before considering spatial tiling.",
"properties": {
"maxLatitude": {
"type": "number"
},
"maxLongitude": {
"type": "number"
},
"minLatitude": {
"type": "number"
},
"minLongitude": {
"type": "number"
},
"step": {
"description": "Grid spacing in degrees. Must be greater than 0.",
"type": "number"
}
},
"required": [
"minLatitude",
"maxLatitude",
"minLongitude",
"maxLongitude",
"step"
],
"type": "object"
},
"includeMetadata": {
"description": "Optional additional row metadata. The only supported value is index_updated_at. Do not request forecasted_at or forecasted_time here; both are regular response columns returned automatically.",
"items": {
"enum": [
"index_updated_at"
],
"type": "string"
},
"type": "array"
},
"maxHorizon": {
"description": "Optional maximum lead time in hours.",
"type": "integer"
},
"members": {
"description": "Optional ensemble member numbers.",
"items": {
"type": "integer"
},
"type": "array"
},
"minHorizon": {
"description": "Optional minimum lead time in hours.",
"type": "integer"
},
"timesList": {
"description": "Exact UTC valid times for /timeseries, or exact UTC model run times for /runs. Use this for one exact time instead of setting range bounds equal.",
"items": {
"type": "string"
},
"type": "array"
},
"untilTime": {
"description": "Exclusive UTC valid-time range end for /timeseries, for example 2025-05-01T06:00:00Z. Must be later than fromTime; equal bounds select no times.",
"type": "string"
},
"variables": {
"description": "Variable selectors. This exact field name is required. Do not use parameters, parameter, variable, selector, or selectors. Values must be exact case-sensitive selector tuples discovered from catalog tools.",
"items": {
"additionalProperties": false,
"properties": {
"alias": {
"description": "Optional response field name. Strongly recommended.",
"type": "string"
},
"hidden": {
"description": "Optional: hide intermediate variables used only by expressions.",
"type": "boolean"
},
"info": {
"description": "Exact info string. Use an empty string when the catalog selector has no info value.",
"type": "string"
},
"level": {
"description": "Exact level string, for example 2 m above ground.",
"type": "string"
},
"name": {
"description": "Exact case-sensitive parameter short name, for example TMP.",
"type": "string"
}
},
"required": [
"name",
"level",
"info"
],
"type": "object"
},
"type": "array"
}
},
"type": "object"
}
},
"required": [
"dataset",
"request"
],
"additionalProperties": false
}출력 스키마
{
"type": "object",
"properties": {
"binary": {
"description": "Whether the result resource is binary rather than text.",
"type": "boolean"
},
"bytes": {
"description": "Number of bytes in the full inline response or downloadable artifact.",
"type": "integer"
},
"cache_hit": {
"description": "Whether a URL-delivered artifact was served from the shared short-lived response cache.",
"type": "boolean"
},
"columns": {
"description": "CSV header columns, keys from the first NDJSON object, or leaf columns read from Parquet metadata.",
"items": {
"type": "string"
},
"type": "array"
},
"content_type": {
"description": "MIME type for a result resource, for example text/csv, application/ndjson, or application/vnd.apache.parquet.",
"type": "string"
},
"data": {
"description": "JSON array response when the GribStream API returns a top-level JSON array.",
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
},
"dataset": {
"description": "Dataset code used for the live query.",
"type": "string"
},
"delivery": {
"description": "Result delivery mode. URL-delivered results use url; text formats are inline when delivery is omitted.",
"type": "string"
},
"endpoint": {
"description": "GribStream API endpoint used for the live query, for example timeseries or runs.",
"type": "string"
},
"fallback_guidance": {
"description": "What to do once if client network policy blocks a signed resource link.",
"type": "string"
},
"generated_at": {
"description": "UTC timestamp at which a URL-delivered artifact was generated.",
"type": "string"
},
"ordering_warning": {
"description": "Reminder that live query rows are not guaranteed to be sorted.",
"type": "string"
},
"preview": {
"description": "Short preview of an inline text response. URL-delivered results omit preview.",
"type": "string"
},
"request_hash": {
"description": "SHA-256 hash of the endpoint, dataset, response format, and canonical request body.",
"type": "string"
},
"response_hash": {
"description": "SHA-256 hash of the upstream response body, computed while reading the response.",
"type": "string"
},
"result_hash": {
"description": "SHA-256 hash combining request_hash and response_hash. A short prefix is included in suggested_filename.",
"type": "string"
},
"rows": {
"description": "Number of tabular data rows in a CSV, NDJSON, or Parquet response. CSV header rows are not counted.",
"type": "integer"
},
"schema": {
"description": "Best-effort tabular schema. CSV and NDJSON columns are typed as strings unless the client infers richer types; Parquet reports its stored leaf types.",
"items": {
"additionalProperties": false,
"properties": {
"name": {
"description": "Column name.",
"type": "string"
},
"type": {
"description": "Column type hint.",
"type": "string"
}
},
"required": [
"name",
"type"
],
"type": "object"
},
"type": "array"
},
"signed_url_expires_at": {
"description": "UTC expiration timestamp for an artifact resource link.",
"type": "string"
},
"split_guidance": {
"description": "Recommended split order for oversized MCP live queries.",
"type": "string"
},
"suggested_filename": {
"description": "Collision-resistant filename to use when saving this result locally. Use it instead of generic names like timeseries.csv when comparing multiple model or dataset results.",
"type": "string"
},
"truncated": {
"description": "Whether the inline tabular response was truncated. Successful live query responses are not truncated; oversized responses return an error instead.",
"type": "boolean"
},
"uri": {
"description": "URI of the result resource. For URL delivery this is the short-lived signed HTTPS URL in the resource_link content block.",
"type": "string"
}
},
"additionalProperties": true,
"description": "By default, application/json is returned as structured JSON and CSV/NDJSON as inline text resources. Set delivery=url for any supported format to receive a resource_link to the complete file through a short-lived signed HTTPS URL; Parquet always uses URL delivery. Download the exact URL directly without an API token; this consumes the MCP result and is not a direct GribStream API call. Do not use resources/read, and never print, stringify, or base64-encode the full dataset into chat or tool output. If client network policy blocks the link, do not retry URL delivery; follow fallback_guidance. structuredContent contains result metadata such as rows, bytes, delivery, expiration, cache status, and suggested_filename; inline text formats also include a preview and identity hashes. Rows are not guaranteed to be sorted; sort before charting, building complete time series, or detecting missing timestamps. For dense grids or large tabular results, use delivery=url so MCP returns a short-lived signed HTTPS resource link instead of putting the full dataset into tool output. Prefer application/vnd.apache.parquet only when a compatible Parquet reader is already known to be available. If reader availability is unknown, do not spend tool calls probing or installing packages; use text/csv with delivery=url immediately. Use one grid request, process the downloaded file locally, and never print or serialize the full file into chat or tool output. Do not install a dependency or write a Parquet parser solely for one result. When a real API request limit requires splitting, split by time range first, split variables second, and split coordinates/grid/space last; spatial tiling creates the most extra work."
}🟡gribstream_query_timeseries(accept, dataset, delivery, max_bytes, request)
AUTH REQUIRED / DATA QUERY. Executes an authenticated /api/v2/{dataset}/timeseries request and returns actual weather/forecast data values. Use this tool, not the NO AUTH request-building or metadata tools, when the user asks to fetch, retrieve, download, return, or analyze weather values, CSV/JSON/NDJSON/Parquet data, plots, heatmaps, or best-available values by valid time. Defaults to inline CSV for compatibility; use URL delivery for dense grids and large tabular results. Time ranges are half-open: the start is inclusive and the end is exclusive. The start must be earlier than the end; equal bounds select no times. Use timesList for one exact valid time on /timeseries or one exact model run time on /runs. When a live query returns a resource_link, the exact signed HTTPS URL is the result: download it directly once with an available HTTPS or file-download capability, without an API token. This consumes the selected GribStream MCP result; it is not a direct GribStream API call or a connector bypass. Do not look for an MCP resources/read tool, and do not repeat the query merely to obtain the file bytes. If the client reports that network or allowlist policy blocks the returned resource_link, do not retry URL delivery. For CSV, JSON, or NDJSON whose reported size is at most 10000000 bytes, retry the same request at most once with delivery=inline. Parquet cannot use inline delivery. If the artifact is larger, reduce the request using the documented split order before one inline CSV retry. For dense grids or large tabular results, use delivery=url so MCP returns a short-lived signed HTTPS resource link instead of putting the full dataset into tool output. Prefer application/vnd.apache.parquet only when a compatible Parquet reader is already known to be available. If reader availability is unknown, do not spend tool calls probing or installing packages; use text/csv with delivery=url immediately. Use one grid request, process the downloaded file locally, and never print or serialize the full file into chat or tool output. Do not install a dependency or write a Parquet parser solely for one result. When a real API request limit requires splitting, split by time range first, split variables second, and split coordinates/grid/space last; spatial tiling creates the most extra work. Do not include request.asOf unless the user explicitly wants backtesting, time travel, or a historical model-run cutoff. Response rows are unsorted; sort by location fields and forecasted_time before plotting, building time series, or checking for gaps. The request body must use request.coordinates and request.variables; do not use location, coord, coords, parameters, parameter, or variable as replacement field names.
입력 스키마
{
"type": "object",
"properties": {
"accept": {
"description": "Desired response format. Defaults to text/csv for compatibility. For dense grids and large tabular analysis, use application/vnd.apache.parquet only when a compatible reader is already known to be available. If reader availability is unknown, do not probe or install packages; use text/csv with delivery=url immediately.",
"enum": [
"text/csv",
"application/json",
"application/ndjson",
"application/x-ndjson",
"application/vnd.apache.parquet",
"application/x-parquet",
"application/parquet"
],
"type": "string"
},
"dataset": {
"description": "Dataset code, for example gfs, ifsoper, nbm, hrrr, or urma.",
"type": "string"
},
"delivery": {
"description": "Optional result delivery mode. Set inline for CSV, JSON, or NDJSON in the MCP result, or url for a short-lived signed resource link. Omission defaults to inline for text formats; Parquet always uses URL delivery and rejects delivery=inline. For a resource_link blocked by client network policy, do not retry URL delivery: if a text artifact is at most 10000000 bytes, retry the same request at most once with delivery=inline; otherwise reduce it using the documented split order first.",
"enum": [
"inline",
"url"
],
"type": "string"
},
"max_bytes": {
"description": "Maximum inline response bytes to return through MCP for CSV/JSON/NDJSON. Default and server-side maximum are 10000000. This setting does not limit artifacts delivered by signed URL. For dense grids or large tabular results, use delivery=url so MCP returns a short-lived signed HTTPS resource link instead of putting the full dataset into tool output. Prefer application/vnd.apache.parquet only when a compatible Parquet reader is already known to be available. If reader availability is unknown, do not spend tool calls probing or installing packages; use text/csv with delivery=url immediately. Use one grid request, process the downloaded file locally, and never print or serialize the full file into chat or tool output. Do not install a dependency or write a Parquet parser solely for one result. When a real API request limit requires splitting, split by time range first, split variables second, and split coordinates/grid/space last; spatial tiling creates the most extra work.",
"maximum": 10000000,
"minimum": 1,
"type": "integer"
},
"request": {
"additionalProperties": true,
"description": "Timeseries request body. Use timesList for exact UTC valid times, or the half-open range fromTime+untilTime where fromTime is inclusive, untilTime is exclusive, and fromTime must be earlier than untilTime. Equal bounds select no times. Omit asOf unless the user explicitly asks for backtesting, time travel, what was known then, or a historical model-run cutoff. Coordinates must be in request.coordinates, and variable selectors must be in request.variables.",
"properties": {
"asOf": {
"description": "Do not set asOf unless the user explicitly asks for backtesting, time travel, what was known then, or a historical model-run cutoff. Omit asOf for latest or best-available forecasts because it filters out forecast runs newer than the cutoff and can make recent data look missing. This is a UTC model-run-time cutoff for /timeseries, not a live API availability timestamp.",
"type": "string"
},
"coordinates": {
"description": "Point coordinates. This exact field name is required. Do not use location, coord, coords, latitude/longitude at top level, or any singular replacement.",
"items": {
"additionalProperties": false,
"properties": {
"lat": {
"description": "Latitude in decimal degrees.",
"type": "number"
},
"lon": {
"description": "Longitude in decimal degrees.",
"type": "number"
},
"name": {
"description": "Optional coordinate label copied into the response.",
"type": "string"
}
},
"required": [
"lat",
"lon"
],
"type": "object"
},
"type": "array"
},
"expressions": {
"description": "Optional derived variables evaluated from variable aliases.",
"items": {
"additionalProperties": true,
"description": "Expression object.",
"properties": {
"alias": {
"description": "Output field name for the expression.",
"type": "string"
},
"expression": {
"description": "Expression text. Reference variable aliases, not raw selector names.",
"type": "string"
},
"hidden": {
"description": "Optional: hide this expression from the response output.",
"type": "boolean"
}
},
"type": "object"
},
"type": "array"
},
"filter": {
"additionalProperties": true,
"description": "Optional row filter expression evaluated from variable aliases.",
"properties": {
"alias": {
"description": "Output field name for the expression.",
"type": "string"
},
"expression": {
"description": "Expression text. Reference variable aliases, not raw selector names.",
"type": "string"
},
"hidden": {
"description": "Optional: hide this expression from the response output.",
"type": "boolean"
}
},
"type": "object"
},
"forecastedFrom": {
"description": "Inclusive UTC model-run-time range start for /runs. Must be earlier than forecastedUntil; use timesList for one exact model run time.",
"type": "string"
},
"forecastedUntil": {
"description": "Exclusive UTC model-run-time range end for /runs. Must be later than forecastedFrom; equal bounds select no times.",
"type": "string"
},
"fromTime": {
"description": "Inclusive UTC valid-time range start for /timeseries, for example 2025-05-01T00:00:00Z. Must be earlier than untilTime; use timesList for one exact valid time.",
"type": "string"
},
"grid": {
"additionalProperties": false,
"description": "Optional regular latitude/longitude grid. Use this instead of or in addition to coordinates. The API preserves the requested step and does not silently coarsen fine grids. The default limit is 120000 expanded coordinates; account-specific plan or token settings may set a different maximum up to 1050000, enough for a full native 0.25-degree global GFS grid, and an oversized-response error reports the applicable maximum. Use URL delivery for dense grids before considering spatial tiling.",
"properties": {
"maxLatitude": {
"type": "number"
},
"maxLongitude": {
"type": "number"
},
"minLatitude": {
"type": "number"
},
"minLongitude": {
"type": "number"
},
"step": {
"description": "Grid spacing in degrees. Must be greater than 0.",
"type": "number"
}
},
"required": [
"minLatitude",
"maxLatitude",
"minLongitude",
"maxLongitude",
"step"
],
"type": "object"
},
"includeMetadata": {
"description": "Optional additional row metadata. The only supported value is index_updated_at. Do not request forecasted_at or forecasted_time here; both are regular response columns returned automatically.",
"items": {
"enum": [
"index_updated_at"
],
"type": "string"
},
"type": "array"
},
"maxHorizon": {
"description": "Optional maximum lead time in hours.",
"type": "integer"
},
"members": {
"description": "Optional ensemble member numbers.",
"items": {
"type": "integer"
},
"type": "array"
},
"minHorizon": {
"description": "Optional minimum lead time in hours.",
"type": "integer"
},
"timesList": {
"description": "Exact UTC valid times for /timeseries, or exact UTC model run times for /runs. Use this for one exact time instead of setting range bounds equal.",
"items": {
"type": "string"
},
"type": "array"
},
"untilTime": {
"description": "Exclusive UTC valid-time range end for /timeseries, for example 2025-05-01T06:00:00Z. Must be later than fromTime; equal bounds select no times.",
"type": "string"
},
"variables": {
"description": "Variable selectors. This exact field name is required. Do not use parameters, parameter, variable, selector, or selectors. Values must be exact case-sensitive selector tuples discovered from catalog tools.",
"items": {
"additionalProperties": false,
"properties": {
"alias": {
"description": "Optional response field name. Strongly recommended.",
"type": "string"
},
"hidden": {
"description": "Optional: hide intermediate variables used only by expressions.",
"type": "boolean"
},
"info": {
"description": "Exact info string. Use an empty string when the catalog selector has no info value.",
"type": "string"
},
"level": {
"description": "Exact level string, for example 2 m above ground.",
"type": "string"
},
"name": {
"description": "Exact case-sensitive parameter short name, for example TMP.",
"type": "string"
}
},
"required": [
"name",
"level",
"info"
],
"type": "object"
},
"type": "array"
}
},
"type": "object"
}
},
"required": [
"dataset",
"request"
],
"additionalProperties": false
}출력 스키마
{
"type": "object",
"properties": {
"binary": {
"description": "Whether the result resource is binary rather than text.",
"type": "boolean"
},
"bytes": {
"description": "Number of bytes in the full inline response or downloadable artifact.",
"type": "integer"
},
"cache_hit": {
"description": "Whether a URL-delivered artifact was served from the shared short-lived response cache.",
"type": "boolean"
},
"columns": {
"description": "CSV header columns, keys from the first NDJSON object, or leaf columns read from Parquet metadata.",
"items": {
"type": "string"
},
"type": "array"
},
"content_type": {
"description": "MIME type for a result resource, for example text/csv, application/ndjson, or application/vnd.apache.parquet.",
"type": "string"
},
"data": {
"description": "JSON array response when the GribStream API returns a top-level JSON array.",
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
},
"dataset": {
"description": "Dataset code used for the live query.",
"type": "string"
},
"delivery": {
"description": "Result delivery mode. URL-delivered results use url; text formats are inline when delivery is omitted.",
"type": "string"
},
"endpoint": {
"description": "GribStream API endpoint used for the live query, for example timeseries or runs.",
"type": "string"
},
"fallback_guidance": {
"description": "What to do once if client network policy blocks a signed resource link.",
"type": "string"
},
"generated_at": {
"description": "UTC timestamp at which a URL-delivered artifact was generated.",
"type": "string"
},
"ordering_warning": {
"description": "Reminder that live query rows are not guaranteed to be sorted.",
"type": "string"
},
"preview": {
"description": "Short preview of an inline text response. URL-delivered results omit preview.",
"type": "string"
},
"request_hash": {
"description": "SHA-256 hash of the endpoint, dataset, response format, and canonical request body.",
"type": "string"
},
"response_hash": {
"description": "SHA-256 hash of the upstream response body, computed while reading the response.",
"type": "string"
},
"result_hash": {
"description": "SHA-256 hash combining request_hash and response_hash. A short prefix is included in suggested_filename.",
"type": "string"
},
"rows": {
"description": "Number of tabular data rows in a CSV, NDJSON, or Parquet response. CSV header rows are not counted.",
"type": "integer"
},
"schema": {
"description": "Best-effort tabular schema. CSV and NDJSON columns are typed as strings unless the client infers richer types; Parquet reports its stored leaf types.",
"items": {
"additionalProperties": false,
"properties": {
"name": {
"description": "Column name.",
"type": "string"
},
"type": {
"description": "Column type hint.",
"type": "string"
}
},
"required": [
"name",
"type"
],
"type": "object"
},
"type": "array"
},
"signed_url_expires_at": {
"description": "UTC expiration timestamp for an artifact resource link.",
"type": "string"
},
"split_guidance": {
"description": "Recommended split order for oversized MCP live queries.",
"type": "string"
},
"suggested_filename": {
"description": "Collision-resistant filename to use when saving this result locally. Use it instead of generic names like timeseries.csv when comparing multiple model or dataset results.",
"type": "string"
},
"truncated": {
"description": "Whether the inline tabular response was truncated. Successful live query responses are not truncated; oversized responses return an error instead.",
"type": "boolean"
},
"uri": {
"description": "URI of the result resource. For URL delivery this is the short-lived signed HTTPS URL in the resource_link content block.",
"type": "string"
}
},
"additionalProperties": true,
"description": "By default, application/json is returned as structured JSON and CSV/NDJSON as inline text resources. Set delivery=url for any supported format to receive a resource_link to the complete file through a short-lived signed HTTPS URL; Parquet always uses URL delivery. Download the exact URL directly without an API token; this consumes the MCP result and is not a direct GribStream API call. Do not use resources/read, and never print, stringify, or base64-encode the full dataset into chat or tool output. If client network policy blocks the link, do not retry URL delivery; follow fallback_guidance. structuredContent contains result metadata such as rows, bytes, delivery, expiration, cache status, and suggested_filename; inline text formats also include a preview and identity hashes. Rows are not guaranteed to be sorted; sort before charting, building complete time series, or detecting missing timestamps. For dense grids or large tabular results, use delivery=url so MCP returns a short-lived signed HTTPS resource link instead of putting the full dataset into tool output. Prefer application/vnd.apache.parquet only when a compatible Parquet reader is already known to be available. If reader availability is unknown, do not spend tool calls probing or installing packages; use text/csv with delivery=url immediately. Use one grid request, process the downloaded file locally, and never print or serialize the full file into chat or tool output. Do not install a dependency or write a Parquet parser solely for one result. When a real API request limit requires splitting, split by time range first, split variables second, and split coordinates/grid/space last; spatial tiling creates the most extra work."
}🟢gribstream_resolve_shared_parameter(alias, dataset, parameter)
NO AUTH / PUBLIC / READ-ONLY. Resolves one shared parameter preset for a dataset, returning native variables and expressions to use in /timeseries or /runs request bodies. Use this first for common natural-language concepts such as 2 metre temperature or 10 metre wind instead of guessing dataset-native codes such as TMP. This tool does not execute the request, query weather values, or return forecast data.
입력 스키마
{
"type": "object",
"properties": {
"alias": {
"description": "Optional output alias for the resolved request.",
"type": "string"
},
"dataset": {
"description": "Optional dataset code to resolve the shared parameter against.",
"type": "string"
},
"parameter": {
"description": "Shared parameter code, for example temperature_2m, wind_speed_10m, mean_sea_level_pressure, or wind_speed_500hpa.",
"type": "string"
}
},
"required": [
"parameter"
],
"additionalProperties": false
}출력 스키마
{
"type": "object",
"additionalProperties": true,
"description": "Resolved shared parameter request fragments for a dataset."
}🟢gribstream_validate_request(dataset, endpoint, request)
NO AUTH / PUBLIC / READ-ONLY. Validates the basic shape, exact selector tuples, and expression syntax of a proposed GribStream /timeseries or /runs request without sending it. This tool does not execute the request, query weather values, or return forecast data. Use this before returning any hand-edited curl or when changing a request from one dataset to another.
입력 스키마
{
"type": "object",
"properties": {
"dataset": {
"description": "Dataset code, for example gfs, ifsoper, nbm, hrrr, or urma.",
"type": "string"
},
"endpoint": {
"description": "Endpoint to validate.",
"enum": [
"timeseries",
"runs"
],
"type": "string"
},
"request": {
"additionalProperties": true,
"description": "Request body to validate. Omit asOf unless the user explicitly asks for backtesting, time travel, what was known then, or a historical model-run cutoff for /timeseries. Use request.coordinates for point coordinates and request.variables for variable selectors.",
"properties": {
"asOf": {
"description": "Do not set asOf unless the user explicitly asks for backtesting, time travel, what was known then, or a historical model-run cutoff. Omit asOf for latest or best-available forecasts because it filters out forecast runs newer than the cutoff and can make recent data look missing. This is a UTC model-run-time cutoff for /timeseries, not a live API availability timestamp.",
"type": "string"
},
"coordinates": {
"description": "Point coordinates. This exact field name is required. Do not use location, coord, coords, latitude/longitude at top level, or any singular replacement.",
"items": {
"additionalProperties": false,
"properties": {
"lat": {
"description": "Latitude in decimal degrees.",
"type": "number"
},
"lon": {
"description": "Longitude in decimal degrees.",
"type": "number"
},
"name": {
"description": "Optional coordinate label copied into the response.",
"type": "string"
}
},
"required": [
"lat",
"lon"
],
"type": "object"
},
"type": "array"
},
"expressions": {
"description": "Optional derived variables evaluated from variable aliases.",
"items": {
"additionalProperties": true,
"description": "Expression object.",
"properties": {
"alias": {
"description": "Output field name for the expression.",
"type": "string"
},
"expression": {
"description": "Expression text. Reference variable aliases, not raw selector names.",
"type": "string"
},
"hidden": {
"description": "Optional: hide this expression from the response output.",
"type": "boolean"
}
},
"type": "object"
},
"type": "array"
},
"filter": {
"additionalProperties": true,
"description": "Optional row filter expression evaluated from variable aliases.",
"properties": {
"alias": {
"description": "Output field name for the expression.",
"type": "string"
},
"expression": {
"description": "Expression text. Reference variable aliases, not raw selector names.",
"type": "string"
},
"hidden": {
"description": "Optional: hide this expression from the response output.",
"type": "boolean"
}
},
"type": "object"
},
"forecastedFrom": {
"description": "Inclusive UTC model-run-time range start for /runs. Must be earlier than forecastedUntil; use timesList for one exact model run time.",
"type": "string"
},
"forecastedUntil": {
"description": "Exclusive UTC model-run-time range end for /runs. Must be later than forecastedFrom; equal bounds select no times.",
"type": "string"
},
"fromTime": {
"description": "Inclusive UTC valid-time range start for /timeseries, for example 2025-05-01T00:00:00Z. Must be earlier than untilTime; use timesList for one exact valid time.",
"type": "string"
},
"grid": {
"additionalProperties": false,
"description": "Optional regular latitude/longitude grid. Use this instead of or in addition to coordinates. The API preserves the requested step and does not silently coarsen fine grids. The default limit is 120000 expanded coordinates; account-specific plan or token settings may set a different maximum up to 1050000, enough for a full native 0.25-degree global GFS grid, and an oversized-response error reports the applicable maximum. Use URL delivery for dense grids before considering spatial tiling.",
"properties": {
"maxLatitude": {
"type": "number"
},
"maxLongitude": {
"type": "number"
},
"minLatitude": {
"type": "number"
},
"minLongitude": {
"type": "number"
},
"step": {
"description": "Grid spacing in degrees. Must be greater than 0.",
"type": "number"
}
},
"required": [
"minLatitude",
"maxLatitude",
"minLongitude",
"maxLongitude",
"step"
],
"type": "object"
},
"includeMetadata": {
"description": "Optional additional row metadata. The only supported value is index_updated_at. Do not request forecasted_at or forecasted_time here; both are regular response columns returned automatically.",
"items": {
"enum": [
"index_updated_at"
],
"type": "string"
},
"type": "array"
},
"maxHorizon": {
"description": "Optional maximum lead time in hours.",
"type": "integer"
},
"members": {
"description": "Optional ensemble member numbers.",
"items": {
"type": "integer"
},
"type": "array"
},
"minHorizon": {
"description": "Optional minimum lead time in hours.",
"type": "integer"
},
"timesList": {
"description": "Exact UTC valid times for /timeseries, or exact UTC model run times for /runs. Use this for one exact time instead of setting range bounds equal.",
"items": {
"type": "string"
},
"type": "array"
},
"untilTime": {
"description": "Exclusive UTC valid-time range end for /timeseries, for example 2025-05-01T06:00:00Z. Must be later than fromTime; equal bounds select no times.",
"type": "string"
},
"variables": {
"description": "Variable selectors. This exact field name is required. Do not use parameters, parameter, variable, selector, or selectors. Values must be exact case-sensitive selector tuples discovered from catalog tools.",
"items": {
"additionalProperties": false,
"properties": {
"alias": {
"description": "Optional response field name. Strongly recommended.",
"type": "string"
},
"hidden": {
"description": "Optional: hide intermediate variables used only by expressions.",
"type": "boolean"
},
"info": {
"description": "Exact info string. Use an empty string when the catalog selector has no info value.",
"type": "string"
},
"level": {
"description": "Exact level string, for example 2 m above ground.",
"type": "string"
},
"name": {
"description": "Exact case-sensitive parameter short name, for example TMP.",
"type": "string"
}
},
"required": [
"name",
"level",
"info"
],
"type": "object"
},
"type": "array"
}
},
"type": "object"
}
},
"required": [
"endpoint",
"dataset",
"request"
],
"additionalProperties": false
}출력 스키마
{
"type": "object",
"properties": {
"dataset": {
"description": "Dataset code that was validated.",
"type": "string"
},
"endpoint": {
"description": "GribStream endpoint.",
"enum": [
"timeseries",
"runs"
],
"type": "string"
},
"errors": {
"description": "Validation errors.",
"items": {
"type": "string"
},
"type": "array"
},
"timestamp_semantics": {
"description": "Endpoint-specific timestamp guidance.",
"type": "string"
},
"valid": {
"description": "Whether the request body passed local shape, selector, and expression checks.",
"type": "boolean"
},
"warnings": {
"description": "Validation warnings.",
"items": {
"type": "string"
},
"type": "array"
}
},
"required": [
"valid",
"endpoint",
"dataset",
"timestamp_semantics"
],
"additionalProperties": false
}커뮤니티
증거