Climate MCP Server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Climate MCP ServerRun the climate pipeline on mock data and show summary"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
MCP Climate Example Repo
This repository contains a small, deterministic example that can be called through an MCP.
Mock scientific purpose of the example
This is an example that uses mock climate data and aggregates and plots the data. Input: data/mock_climate.csv with date, temperature_c, precipitation_mm, humidity_pct values per day for one month.
The output is (1) outputs/climate_summary.csv with month, avg_temperature_c, total_precipitation_mm for each month. The daily temperature values are aggregated using their mean, while the daily precipitation values are aggregated using their sum; (2) a plot of the data over time.
Related MCP server: mcp-data-explorer
Mock user workflow
The user workflow is the following:
User obtains
datafrom (server, weather station)User prepares the
configfile for the runUser executes the script using
dataandconfigUser verifies the data by visual inspection of the plot and the summary
This workflow currently requires the user to install the package (hurdle 1), write in a yaml file (hurdle 2), and provide relative paths (hurdle 3). It also requires the user to be in the correct relative directory when running the script (hurdle 4). These hurdles can be circumvented using the functionality through an agent.
Here, an MCP builds the foundation: It defines the API, executes the software, and takes/returns data. It does not explain the workflow or the observations in the data, but serves as the technical interface to the agent - the MCP server wraps the code into a new tool that the agent can call. The implementation is hidden behind a typed interface. Another advantage is portability: An MCP server works on any other MCP-compatible client, and can be available remotely. Using the MCP, the researchers only interact with the scientific workflow ("process climate data") and not the implementation.
Relevant repo content
config/example.yaml: input parameters for the processing rundata/mock_climate.csv: mock climate time-series datascripts/process_climate.py: processing and plotting scriptoutputs/: generated summary CSV and plot filestests/: unit tests for the processing/plotting script and the MCP server
Relevant content for stage 1 of the MCP
mcp_server/: MCP server wrapping the script (see MCP server below).
Data processing order in the script
The script does the following in the given order:
Parses the command-line arguments giving the relative position of the config file:
parse_args()Reads the YAML config file:
load_config()Loads the mock climate CSV:
run_pipeline()->pd.read_csv()Cleans and converts the climate data:
prepare_data()Aggregates the daily data to monthly and saves to
outputs/:build_monthly_summary()Creates and exports a plot of the data:
create_plot()
Missing data policy:
The config takes an optional top-level missing_policy block.
The four values and what each does: interpolate / zero_fill / drop / fail.
Defaults: interpolate for temperature_c, zero_fill for precipitation_mm
Installing and executing the script
The necessary dependencies can be installed into a Python environment using pip or uv:
pip install -r requirements.txtThe script is then executed using
python scripts/process_climate.py --config config/example.yamlExpected outputs
The expected outputs are stored in the folder given in the config file, for the default values:
outputs/climate_summary.csvoutputs/climate_plot.png
Unit tests
Unit tests require installing dev dependencies and can then be run via
pip install -r requirements-dev.txt
python -m pytestMCP server
mcp_server/ wraps the pipeline as an MCP server (mcp_server/server.py), so an agent can call it as a tool.
The MCP server then calls process_climate.run_pipeline() directly (no subprocess) and reuses config/schema.json for validation.
This provides the following tools to the agent:
get_config_schema— the JSON Schema a config must satisfy (also exposed as the resourceclimate://config-schema)list_sample_data— CSV files available underdata/, with their column namesvalidate_climate_config— validate a config without running the pipelineprocess_climate_data— run the pipeline on an inline config; returns a text report (row count, monthly summary table, data_quality, policy and aggregation) plus the rendered plot image
New user workflow
Using the tools provided through the MCP, the script no longer uses the path to a config file. Instead, the config choices are passed inline as json and validated against the stored schema.
This makes sure that user input errors are correct before running the pipeline, as well as it restricts the file system access by the MCP server.
For security reasons, each path in the input is by default untrusted, and must resolve under certain directories in the file system: input_csv must resolve inside data/, and the outputs do not contain any paths anymore but only filenames, that resolve to a fresh directory in outputs/. This ensures that concurrent or repeated runs never collide or overwrite each other's results, and that a config cannot point anywhere else on the disk.
The workflow and agent steps taken are as follows:
The user states the intent and where the data is found:
User: "For the data in the data/ folder, prepare a summary and a plot for me using the climate mcp."
The statement is read by the LLM, and the decision to use the climate_mcp tools was taken. The LLM then follows the server instructions given in
instructions: a. Call toget_config_schema()andlist_sample_data()b. The result is used to construct the config in the next stepThe LLM emits the tool call for
process_climate_datathrough the harness to the MCP, using the MCP over JSON-RPC 2.0 protocol. The harness already did a handshake with the MCP at session init / upon MCP connection. Through the handshake, the harness initialized the server and obtained the tool list (@mcp.tool()decorators) and their docstrings for the LLM. In the tool call, the LLM emits the built configjsonbased on the information obtained in 1. and 2., providing a structured output. The harness converts the call into the proper request:
{"jsonrpc":"2.0","id":N,"method":"tools/call",
"params":{"name":"process_climate_data","arguments":{"config":{...}}}}The MCP server then reads it, routes to the correct Python function
process_climate_data()and runs synchronously through the following steps:validate the schema:
_schema_errors()builds the run config dictionary:
run_configcreates a new directory under
outputsnot to overwrite prior data:paths.new_run_dir()then starts the processing pipeline (same as before):
pc.run_pipeline()the output is noted:
resultis a dict captured from the pipeline, containing run information
The server then provides the tool call results back to the harness as JSON-RPC.
The harness converts the result back to actual PNG bytes and text, and hands it to the LLM. The LLM reports the result to the user.
Running the server
To test out the server, you can start it locally. Either you can run it through the console, after having installed all the requirements into your environment, using
pip install -r requirements.txt # now includes mcp[cli]
python -m mcp_server.server # stdio transportor, after pip install -e ., you may run it via the console script climate-mcp-server.
To start using the MCP with your agent, you need to register it with the agent. Most agents will start the server for you, so you do not need to run the above command.
Claude Code
To register the MCP with Claude Code, use:
claude mcp add climate-example -- python -m mcp_server.serverin your Claude chat. This will create/add to the .claude.json file in your home directory. Restart Claude to then load it into the session.
VSCode and GitHub Copilot
To register the MCP with VSCode and GitHub Copilot, you need to place a mcp.json file with the following content in the .vscode directory:
{
"servers": {
"climate-mcp-local": {
"type": "stdio",
"command": "<path-to-your-environment>/climate-mcp-server",
"args": []
}
}
}Here, you can then also start and stop the MCP server using the little "play" button as shown in the json file.
Pi coding agent
To register the MCP with the Pi coding agent, add it to mcp.json (global: ~/.pi/agent/mcp.json, or project-local .pi/mcp.json):
{
"mcpServers": {
"climate-example": {
"command": "<path-to-your-environment>/climate-mcp-server",
"args": []
}
}
}Pi's tools are then exposed with the prefix mcp_climate-example_<tool-name>.
Vibe Mistral coding agent
Vibe uses a TOML config file (config.toml). Add a [[mcp_servers]] table:
[[mcp_servers]]
name = "climate-example"
transport = "stdio"
command = "<path-to-your-environment>/climate-mcp-server"
args = []Vibe exposes the tools under the pattern climate-example_<tool-name>.
Codex
To register the MCP with the Codex CLI, use:
codex mcp add climate-example -- python -m mcp_server.serverThis writes to ~/.codex/config.toml (or .codex/config.toml for a project-scoped, trusted-only registration); equivalently, you can add the entry there directly:
[mcp_servers.climate-example]
command = "<path-to-your-environment>/climate-mcp-server"
args = []Testing
tests/test_mcp_server.py calls the tool functions directly (they stay plain, callable Python functions under the @mcp.tool() decorator) and covers the sandboxing rules above, including path-traversal attempts in input_csv and output_path. Run it with the rest of the suite via python -m pytest.
Skill
.claude/skills/climate-missing-data/SKILL.md supplies the judgment the MCP deliberately does not encode — which missing_policy to choose, and what the result means once it comes back.
at startup the harness reads only the name and description
when a request matches the description, the whole SKILL.md is loaded
referenced files load later still, only if the workflow reaches them
Workflow with the skill
User states intent, saying nothing about data quality: "Process missing_climate2.csv and give me the monthly rainfall total."
The description matches; the harness loads the full SKILL.md.
Before the call: the skill's rules decide missing_policy: drop rather than the default zero_fill, and that goes into the tool-call arguments.
The call: identical to the MCP workflow already documented — JSON-RPC, schema validation, fresh run directory, run_pipeline(), result returned with data_quality.
After the call: the skill's rules turn coverage: 92.9% into "a lower bound, not a measurement", and decide to ask whether the figure is exploratory or headed for a report.
The skill wraps the tool call on both sides; it changes the arguments going in and the claim coming out, and changes nothing in between.
Security
Once a config can come from an agent rather than a human hand-writing YAML, every path and value in it is untrusted input. The server treats it that way:
Path sandboxing (
mcp_server/paths.py):input_csvis resolved and checked withrelative_to(DATA_ROOT), so any absolute path or../sequence that would escapedata/is rejected before the file is opened. Output paths (plot.output_path,summary.output_path) are reduced to their bare filename (Path(raw_path).name) — any directory component the config supplied, including.., is simply discarded, not just checked, so there is no path left to escape with.Per-run isolation (
paths.new_run_dir()): every call toprocess_climate_datawrites into a fresh, UUID-named directory underoutputs/, never into a caller-chosen location. Concurrent or repeated runs can't collide or overwrite each other's results, and a config cannot direct output anywhere else on the host.Schema validation before execution (
_schema_errors()inmcp_server/server.py, reusingconfig/schema.json): the config is validated against the JSON Schema and rejected with the specific violations before the pipeline ever runs, rather than failing partway through or on bad assumptions.No subprocess / no shell: the MCP server calls
process_climate.run_pipeline()in-process as a plain Python function, not viasubprocess/shell string-building. There's no command-line assembly for a malicious value to break out of.Config is inline JSON, not a file path: the agent passes the config as structured data in the tool call, never a path to a config file on disk. This also means the agent — and by extension the LLM — never needs or gets to know the server's filesystem layout beyond what
list_sample_data/get_config_schemadeliberately expose.
What this setup does not provide: authentication/authorization on the tool calls themselves, rate limiting, or resource limits (CPU/memory/time) on a pipeline run. That's acceptable for a local, single-user, stdio-transport example where the trust boundary is "whoever can spawn the server process" (i.e. you, or your agent running as you) — see the deployment notes below for what changes if that boundary moves.
tests/test_mcp_server.py exercises the sandboxing directly, including path-traversal attempts against both input_csv and output_path.
MCP server deployment
In this repo the server only runs as a local stdio subprocess: mcp.run() in mcp_server/server.py uses the default "stdio" transport, and main() takes no arguments to change that. The underlying mcp library also ships SSE and streamable-HTTP transports (run_sse_async, run_streamable_http_async), but this example does not wire them up — there is no network listener, no port, and nothing to expose accidentally.
Consequences of the stdio model:
The server process is spawned and owned by whichever client starts it (Claude Code, VSCode, Pi, Vibe, Codex — see the registration snippets above), lives only as long as that client keeps it running, and is reachable only by that one client over its own stdin/stdout pipe. There is no separate "deploy the server somewhere" step for local use — registering it with a client is deployment.
Because it's a subprocess of a trusted parent, not a network service, there is no built-in authentication layer — the trust boundary is entirely "who can launch this process," per the security notes above.
Filesystem access is still bounded by
mcp_server/paths.pyregardless of who launches it, so a misbehaving or compromised client can't use the server to reach outsidedata//outputs/, but it can run the pipeline as fast/often as it likes — there's no throttling.
If you wanted to run this server centrally instead (e.g. one server shared by multiple users or agents over a network), that would mean:
switching to the streamable-HTTP or SSE transport instead of stdio,
adding an authentication/authorization layer in front of it (the library's transports don't provide one out of the box),
putting it behind TLS (a reverse proxy is the usual choice) since MCP itself doesn't encrypt the transport,
adding resource/rate limits per caller, since
DATA_ROOT/OUTPUTS_ROOTsandboxing only constrains where files land, not how much processing a caller can trigger,and likely running each request's pipeline in some isolated worker (process/container) rather than in the long-lived server process, so one bad or huge input can't stall other callers.
None of that is implemented here as it is out of scope for this basic example, but it represents the gap between "runs on my machine via stdio" and "runs as a shared service."
Available Tools
4 toolsget_config_schemaA
Return the JSON Schema a climate processing config must satisfy.
Call this before process_climate_data to see the required and optional fields: input_csv, date_column, metrics, rolling_window_days, plot, summary.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses the return content (required and optional field names) and the recommended call ordering, and the no-argument read-only nature is implicit. But it says nothing about caching, versioning of the schema, or whether the returned schema is authoritative/stable, which an agent may care about.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the return value and followed by the call-ordering instruction. The enumeration of field names is compact and adds actionable context with no wasted prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the description need not explain the return structure in detail, and it still names the key fields. For a zero-argument schema-retrieval helper, the description plus output schema is sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate at the argument level; baseline 4 applies. The listed config field names function as useful metadata about the returned schema rather than argument documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource: it returns the JSON Schema that a climate processing config must satisfy. This is clearly distinguishable from siblings like validate_climate_config (which presumably validates a config) and process_climate_data (which runs the job).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit timing guidance: 'Call this before process_climate_data.' That tells the agent exactly when the tool fits. It does not, however, mention the sibling validate_climate_config or clarify when the schema should be fetched vs. when an existing config should simply be validated, so the routing is not fully closed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_sample_dataA
List CSV files available under data/, with their column names.
Use one of the returned "filename" values as input_csv in a config passed to process_climate_data.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the disclosure burden, and it does convey the read-only listing behavior and the shape of the items (filename + columns). It stops short of stating path scope (recursive vs top-level under data/), error behavior when the directory is empty, or permission requirements, so it is adequate but thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and result, followed immediately by the actionable next step. Nothing is padded or repeated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists and the tool has no parameters, so return-value detail is not required; the description adds the downstream usage that the schema cannot express. The only modest gap is the unstated scope of the listing (e.g. whether subdirectories are traversed).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is no parameter semantics to explain; the baseline for a parameterless tool applies. The description correctly frames its output field ("filename") as the input to a downstream tool, which is the only relevant naming detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (CSV files under data/) plus the payload detail (column names), which cleanly separates it from siblings like get_config_schema, validate_climate_config and process_climate_data. An agent can identify the tool from the first sentence alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells the agent how the output feeds the next step: use a returned "filename" as input_csv in a config passed to process_climate_data. That is strong workflow routing, though it does not state when this tool is unnecessary (e.g. if the filename is already known).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
process_climate_dataA
Run the climate processing pipeline on an inline config and return the results.
config must satisfy the schema returned by get_config_schema. input_csv
is resolved against the server's data/ directory (see list_sample_data
for available files); the output_path fields under plot and summary
are treated as filenames only -- every run writes to its own directory,
so a config cannot choose where on disk anything is written.
missing_policy is optional: omit it and each metric uses the pipeline's
default (interpolate for temperature_c, zero_fill for precipitation_mm).
Set it per metric to interpolate, zero_fill, drop or fail. The right choice
depends on the question being asked, not on the data alone: temperature is
averaged over the month, so an estimated day washes out, while precipitation
is summed, so a zero-filled day lowers the total permanently.
Returns a text report (row count, per-metric data quality, monthly summary table) followed by the rendered plot image. The data-quality section gives the missing count, coverage and longest consecutive gap for each metric, so the effect of the chosen policy is visible in the result.
| Name | Required | Description | Default |
|---|---|---|---|
| config | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: write behavior is disclosed (output_path is treated as a filename only; every run writes to its own directory, so disk location cannot be chosen), defaults are given per metric when missing_policy is omitted, and the returned report contents are enumerated. It also explains the reasoning tradeoff behind each policy, which is genuine behavioral context beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action, then config mechanics, then the optional policy, then the return shape — a sensible order. It is on the long side for a one-parameter tool, and the temperature-averaged vs precipitation-summed rationale, while useful, is the most trimmable part.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Nothing an agent needs to call it correctly is missing: no output schema exists, yet the description describes the returned report (row count, per-metric data quality, monthly summary table) plus the rendered plot, and the nested config's 0%-covered schema is explained by reference to get_config_schema and by the path/default rules.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the single config param is a nested object with additionalProperties, so the description must compensate — and it does. It explains where the config schema lives, how input_csv is resolved, that plot/summary output_path values are filename-only, and that missing_policy is optional with per-metric defaults and an enum-like value set (interpolate, zero_fill, drop, fail).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence gives a specific verb and resource: 'Run the climate processing pipeline on an inline config and return the results.' It is immediately distinguishable from validate_climate_config (validation) and get_config_schema (schema retrieval), which the description also names by role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It routes the agent to siblings with concrete conditions: config must satisfy what get_config_schema returns, input_csv resolves against data/ with list_sample_data for available files. It stops short of stating when *not* to call this (e.g., validate first, cost/latency expectations), so it lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_climate_configA
Validate a climate processing config against the schema, without running it.
Returns {"valid": true} or {"valid": false, "errors": [...]}.
| Name | Required | Description | Default |
|---|---|---|---|
| config | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose the key behavioral trait: validation is side-effect free and does not execute the config. It also states the return shape (valid flag plus errors array), which is the main behavior an agent needs to plan around. It stops short of describing error depth, size limits, or whether the whole config is always checked.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and its key constraint, followed by the return contract. Nothing redundant and no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists, so the description needn't explain return values in depth (and its restatement is a helpful preview). The nested, unconstrained config object is the one gap, but the description mitigates it by referencing the schema and a sibling tool that supplies it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the single 'config' parameter is an unconstrained nested object with additionalProperties=true, so the description gives no hint of its expected shape. It partially compensates by pointing at 'the schema' (i.e. get_config_schema) as the source of structure, which is the only real guidance available.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (validate) and resource (climate processing config) and adds the crucial scope modifier 'without running it', which separates it from the sibling process_climate_data. An agent can tell what it does and what it does not do without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Without running it' implies this is the pre-flight check before process_climate_data, and 'against the schema' hints at get_config_schema, but neither alternative is named or given an explicit when-to-use condition. Usage is inferable rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
v0.1.0- First observed
get_config_schema - First observed
list_sample_data - First observed
process_climate_data - First observed
validate_climate_config
TDQS
Scored across 4 tools
Each tool has a distinct role: get_config_schema returns the schema, validate_climate_config checks a config, list_sample_data enumerates inputs, and process_climate_data runs the pipeline. The schema/validate/process trio shares the same config object, which creates mild potential for confusion, but the descriptions clearly delimit each step.
All four names follow a consistent verb_noun snake_case pattern (get_config_schema, list_sample_data, validate_climate_config, process_climate_data). No mixing of conventions or vague verbs.
Four focused tools cover the discover-validate-run workflow cleanly with no redundancy or bloat. It is slightly thin, but each tool earns its place for a scoped climate-processing server.
The surface covers the full workflow of discovering the schema, finding input data, validating, and executing the pipeline with inline results. There is no way to retrieve or revisit past outputs, but that is a minor gap given the stateless inline-return design.
Maintenance
Related MCP Connectors
- OleanderOAuthdev.oleander
The all-in-one data stack for agents. Upload files, run SQL, evolve tables, and render charts.
Climate MCP — wraps Open-Meteo Climate API (free, no auth)
Gateway between LLM agents and world data through eight tools and a bundled endpoint catalog.
Search, fetch (with provenance), scan, and convert AI instruction files for agents.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceProvides MCP-compatible tools for data analysis, including file reading, Python/SQL execution, and hypothesis testing. Enables autonomous data analysis agents to interact with a sandboxed environment.1-
- FlicenseNot gradedqualityBmaintenanceAllows LLMs to explore CSV datasets through statistics without loading raw data, offering tools for dataset inspection, column description, and filtered queries while enforcing safety by restricting file access to a specified directory.-
- AlicenseAqualityBmaintenanceEnables an AI assistant to reliably read and chunk PDF/text documents, validate extracted JSON against a schema with full error paths, and save structured output—all confined to a single allowed directory.6MIT
- AlicenseNot gradedqualityCmaintenanceEnables Claude to query a local SQLite database read-only, search and read files within a sandboxed directory, and get current weather and forecasts via Open-Meteo, all through natural language.MIT