{"name":"com.gribstream/mcp","slug":"gribstream-mcp","title":"GribStream Weather MCP","description":"NOAA and ECMWF weather forecast MCP for discovery, validation, and GribStream OAuth queries.","url":"https://mcp.market/server/gribstream-mcp","rating":null,"grade":"A","score":87,"certified":false,"status":"active","category":"maps","tags":["maps"],"presence":{"score":18,"stars":0,"forks":0,"downloads_week":null,"last_push_at":"2026-08-18T00:01:34.000Z","license":"MIT"},"uptime":{"percent":100,"checks":22,"ok":22,"last_checked_at":"2026-09-24T18:21:12.506Z","last_ok_at":"2026-09-24T18:21:12.506Z","latency_ms":372},"claimed":false,"transport":"remote","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/GribStream/gribstream-mcp","website":"https://gribstream.com/","version":"1.1.4","remotes":[{"type":"streamable-http","url":"https://gribstream.com/mcp"}],"packages":[],"tools":[{"name":"gribstream_build_runs_request","description":"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.","write_action":false,"price_micros":0,"input_schema":{"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}},{"name":"gribstream_build_timeseries_request","description":"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.","write_action":false,"price_micros":0,"input_schema":{"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}},{"name":"gribstream_get_dataset","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"dataset":{"description":"Dataset code, for example gfs, nbm, ifsoper, hrrr, urma.","type":"string"}},"required":["dataset"],"additionalProperties":false}},{"name":"gribstream_get_expression_reference","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"additionalProperties":false}},{"name":"gribstream_get_parameter","description":"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.","write_action":false,"price_micros":0,"input_schema":{"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}},{"name":"gribstream_list_datasets","description":"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.","write_action":false,"price_micros":0,"input_schema":{"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}},{"name":"gribstream_list_parameters","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"dataset":{"description":"Dataset code, for example ifsoper.","type":"string"}},"required":["dataset"],"additionalProperties":false}},{"name":"gribstream_list_shared_parameters","description":"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.","write_action":false,"price_micros":0,"input_schema":{"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}},{"name":"gribstream_query_runs","description":"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.","write_action":false,"price_micros":0,"input_schema":{"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}},{"name":"gribstream_query_timeseries","description":"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.","write_action":false,"price_micros":0,"input_schema":{"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}},{"name":"gribstream_resolve_shared_parameter","description":"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.","write_action":false,"price_micros":0,"input_schema":{"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}},{"name":"gribstream_validate_request","description":"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.","write_action":false,"price_micros":0,"input_schema":{"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}}],"scan":{"score":87,"grade":"A","scanned_at":"2026-09-23T04:55:25.725Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-23T04:55:25.637Z","components":{"code":{"score":-1,"max":25,"notes":["remote-only server, no package to scan"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 782ms"]},"poisoning":{"score":13,"max":15,"notes":["12 tool descriptions checked"]},"auth":{"score":10,"max":15,"notes":["open endpoint, read-only tools"]},"maintenance":{"score":12,"max":15,"notes":["last push 36 days ago"]},"identity":{"score":10,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year","website matches verified namespace"]}},"findings":[{"id":"poison.long-description","severity":"low","component":"poisoning","title":"Unusually long tool description (over 2,000 characters)","evidence":"tool gribstream_query_runs: …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.…"}],"inputs":{"probes":[{"url":"https://gribstream.com/mcp","reachable":true,"authRequired":false,"latencyMs":782,"serverInfo":{"name":"gribstream","version":"1.1.1"}}],"packages":[],"repo":{"found":true,"owner":"GribStream","repo":"gribstream-mcp","archived":false,"pushedAt":"2026-08-18T00:01:34Z","stars":0,"forks":0,"openIssues":0,"ownerType":"Organization","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/181684138?v=4","ownerCreatedAt":"2024-09-16T02:23:20Z","license":"MIT"},"icon":{"url":"https://gribstream.com/gribstream_small.png","source":"registry","width":256,"height":256},"presence":{"stars":0,"forks":0,"downloadsWeek":null,"license":"MIT","lastPushAt":"2026-08-18T00:01:34.000Z","score":18}}}},"grade_history":[],"reviews":[]}