sciflow-mcp
Exports compiled analysis workflows/pipelines to Argo Workflows, enabling cluster execution where sessions run in parallel and aggregate steps wait for completion.
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., "@sciflow-mcpbuild a workflow that computes a PSTH from spike times aligned to stimulus onsets"
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.
sciflow-mcp
An MCP server that lets scientists and their agents build reproducible, interoperable analysis workflows over stamped data: data positioned along time, cortical depth, frequency, or any other parametric axis.
It builds on three earlier pieces of work:
Collate: every array is paired with a stamp per sample, and multiple acquisition systems are aligned to one clock. Its
GeneralizedDatasuccessor generalizes time to any parametric axis.EventLogic: logical operations (AND, OR, NOT, merge, containment) on
[on, off]intervals.The generalized analysis functions from Barnes et al. 2026: peri-event collation, normalization and correlation that work whatever the data's dimensionality.
Install
pip install sciflow-mcpTo run the MCP server without installing anything, use uvx sciflow-mcp, for example in a client config: {"command": "uvx", "args": ["sciflow-mcp"], "env": {"SCIFLOW_STORE": "/path/to/store"}}.
For development, clone the repo:
git clone https://github.com/Claybarn/sciflow-mcp && cd sciflow-mcp && uv syncOpening the clone in Claude Code picks up the server from .mcp.json.
Related MCP server: workflow-mcp
Why it interoperates
There are exactly two artifact kinds. Both lie on a named parametric axis with a unit (time in s by default):
kind | contents | invariant |
| N-D |
|
| sorted |
|
Workflows are type-checked before they run. Every operation declares which kinds it takes and which it returns.
No
parametricAxisargument. The parametric axis is always axis 0, soperi_eventworks the same on a 1-D wheel trace, a channels × time LFP and a 32 × 32 × time imaging stack.Axes can't be mixed silently. Operations that combine artifacts require the same parametric axis and unit. Time intervals can't be applied to a depth profile, and spike sample numbers can't be mixed with seconds. The error names the fix:
reparametrize,rescale_stampsoralign_clock.Any axis can become the parametric one.
reparametrizeturns a time × depth CSD into a depth × time series. Every operation then works along depth, for examplerestrictto a cortical layer defined withdefine_intervals.Derived results stay stamped. Peri-event epochs are stamped by event position and get a
lagaxis. Their average is a series whose parametric axis islag, which can be windowed withlagintervals. Per-interval correlations are stamped by interval onset. Any output can feed any later step.
Why it's reproducible
Content-addressed artifacts. An artifact's id is the SHA-256 of its arrays and header, so identical bytes always get identical ids.
Same platform and image: results are bit-identical, so cache hits and ids carry over. This holds for a local Docker run and the same image on Slurm or Kubernetes.
Different hardware or OS: floating-point operations can differ in the last bits. A Butterworth filter computed on macOS and in the Linux image differs by up to ~7e-15 relative, which changes its id.
compare_artifactschecks that two results agree within a tolerance, and every run records Python, platform and package versions.
Deterministic step keys. Each step's cache key is
hash(op, op version, validated params, input ids). Re-running reuses results, and changing one parameter re-runs only that step and the steps downstream of it.Provenance records. Every run writes
runs/<run_id>.json. It holds the resolved workflow, Python/package/operation versions, and each step's params, inputs, output, cache key and timing. Each output artifact also records the step that made it.
Operations
sciflow ops (or the list_operations tool) prints the full list. The current 34:
intervals:
threshold_intervals(fixed or Collate'smidpointthreshold),define_intervals,event_windows,interval_union/intersection/difference/xor/complement,merge_intervals,filter_intervals,select_containedseries:
restrict,select,reduce_axis,reparametrize,events_where(e.g. spikes of chosen clusters),arithmetic,standardizefiltering:
butter_filter,median_filter,bin_average(downsample along any axis, with a circular mean for phase)peri-event:
peri_event,peri_event_normalize(dff / zscore / subtract),epoch_average,event_histogram(PSTH)correlation:
interval_correlation,pairwise_interval_correlationdataset:
stack_sessions,group_reduce(hierarchical: sessions → subjects → conditions)stats:
permutation_test(stratified, from Claybarn/permute),mixed_model(statsmodels MixedLM)alignment:
align_clock(Collate's pulse cross-correlation plus linear fit; converts ticks or frame numbers to the reference unit),rescale_stamps,interpolate_to
The filtering, threshold, rescaling and events_where operations cover the preprocessing that each AcquisitionSystem subclass in Collate's examples re-implemented by hand. Examples are LFP/EMG high-pass filtering, median-filtered sync lines, OpenEphys sample numbers, Kilosort cluster labels and the miniscope's low-pass dF/F baseline. Each becomes a workflow step with recorded parameters.
Workflows
name: running-onset-widefield
inputs: {wheel: sha256:…, widefield: sha256:…, sync_ref: sha256:…, sync_img: sha256:…}
steps:
- {id: aligned, op: align_clock, inputs: {target: inputs.widefield, local_clock: inputs.sync_img, reference_clock: inputs.sync_ref}}
- {id: running, op: threshold_intervals, inputs: {series: inputs.wheel}, params: {threshold: 2.0}}
- {id: epochs, op: peri_event_normalize, inputs: {series: steps.aligned, events: steps.running},
params: {pre: 2, post: 4, baseline_start: -2, baseline_stop: 0, method: dff}}
- {id: response, op: epoch_average, inputs: {epochs: steps.epochs}}See examples/running_response.yaml. To run it end to end on synthetic two-clock data:
uv run python examples/make_demo_data.pyuv run python examples/run_demo.pyDatasets: experiment → subject → session
A dataset is a manifest of sessions. Each session has a subject, attributes (condition, day, genotype, …) and named inputs, given as artifact ids or as files to import. register_dataset imports the files and stores the resolved manifest under a content-derived dataset: id, so the id pins the exact data.
A pipeline runs the same session_steps on every session. collect stacks a chosen per-session result along a new session axis, carrying each session's subject and attributes. aggregate_steps then combine the stacks:
name: running-onset-lfp-by-condition
dataset: dataset:b30a456710f97312
where: {day: [1, 2]} # optional session filter
session_steps:
- {id: running, op: threshold_intervals, inputs: {series: inputs.wheel}, params: {threshold: 2}}
- {id: epochs, op: peri_event_normalize, inputs: {series: inputs.lfp, events: steps.running},
params: {pre: 1, post: 2, baseline_start: -1, baseline_stop: 0, method: zscore}}
- {id: response, op: epoch_average, inputs: {epochs: steps.epochs}}
collect: {responses: response}
aggregate_steps:
- {id: condition_mean, op: group_reduce, inputs: {series: inputs.responses},
params: {group_by: [condition], within: [subject], statistic: mean}}Averaging is hierarchical.
group_reducewithwithin: [subject]averages each subject's sessions before combining subjects. A subject with more sessions doesn't dominate, andstatistic: semgives the standard error across subjects, not sessions.Pipelines compile to ordinary workflows. Session steps become
<session>__<step>, so validation, caching, provenance and the Slurm/Argo exporters all apply unchanged. On a cluster, sessions run in parallel and the aggregate steps wait for all of them.Adding a session only runs that session. Everything else is a cache hit, and because results are keyed by content, sessions with identical inputs even share results. A pipeline's run record includes the pipeline and dataset id.
Results export as a long-format table.
export_artifact(format="table")writes one row per element, with columns for every axis plus subject, condition and other attributes. That's ready for mixed-effects models in R or statsmodels.
Statistics that use every session
Both tests run on a stacked series and test every element (each lag × channel, each pixel) separately, without first averaging sessions within subject:
permutation_testcalls yourmultitest_stratified_permutationtest. It shuffles condition labels only within eachstrataattribute (defaultsubject), so repeated sessions are never treated as independent.correction: max(the default) is the permutation max-statistic (Westfall–Young) FWER correction. Each test's statistic is first standardized by its own null, so channels on different scales compete fairly. Holm, Bonferroni and FDR (BH) are also available.Strata missing a condition are dropped and listed in the metadata, and elements with missing data get NaN. Without this, the raw function marks every test as significant at the minimum p-value.
The seed is a parameter, so the result is cacheable and reproducible. With
strata: nullit falls back tomultitest_two_sample.
mixed_modelfitsformula(e.g.value ~ condition + C(day)) with a random intercept pergroups(orre_formulaslopes) at every element. Output addstermandstatisticaxes (estimate, se, z, p, Holm-corrected p). Failed fits and convergence warnings are counted in the metadata.
Results stay on the parametric axis (lag), so p-values can be restricted to a window, plotted or exported to a table.
Seeing a pipeline
visualize_workflow returns Mermaid text, or the node/edge graph as JSON for a visual editor such as the Genepi rete-js frontend. Pipelines are drawn with session steps collapsed into one "each of N sessions" block, and every edge is labeled with its artifact kind. examples/onset_pipeline.mmd is the rendered demo pipeline.
examples/dataset_demo.py builds a synthetic 4-subject × 2-condition × 2-day experiment and runs examples/onset_pipeline.yaml on it. The result recovers the planted 1.6× condition effect (5.05 vs 3.19). The permutation test (max-corrected) and the mixed model both find the condition effect in the first 100–150 ms after onset.
MCP tools
tool | purpose |
| discover operations and the JSON schema of their params |
| register an experiment's sessions (importing files) and inspect it |
|
|
| parametric axis and unit, shape, axes, extent, sample rate, NaN fraction, provenance |
| static check of a workflow or pipeline: references, cycles, kinds, params |
| check two results agree within a tolerance, e.g. a laptop run vs a cluster run |
| Mermaid flowchart or node/edge graph of a workflow or pipeline |
| execute a workflow or pipeline locally and read the provenance record |
| compile to Slurm ( |
|
|
This repo's .mcp.json registers the server for Claude Code, with the store in ./.sciflow. For other clients, use absolute paths:
{"command": "uv", "args": ["run", "--directory", "/path/to/sciflow-mcp", "sciflow-mcp"], "env": {"SCIFLOW_STORE": "/path/to/store"}}Running on a cluster
Both exporters run each step as sciflow run-step <workflow.json> <step> --store <store> against a shared store. Results pass between jobs through the content-addressed cache, so a cluster run and a local run produce identical artifact ids.
Slurm:
export_workflow(target="slurm")writes one.sbatchper step and asubmit.shthat chains them with--dependency=afterok. The store must be on a shared filesystem.Kubernetes:
export_workflow(target="argo")writes a ConfigMap (the workflow) plus an ArgoWorkflowDAG. The store is a ReadWriteMany PVC mounted at/store. Build the step image with the includedDockerfile. It installs exactly the versions inuv.lock.
Development
uv syncuv run pytestTo develop against a local EventLogic checkout, uncomment [tool.uv.sources] in pyproject.toml.
Fixes relative to the MATLAB generalized functions
binEventDataToEvents/collate_event_data_to_eventspassed every event's window on every loop iteration.event_histogramuses each event's own window.collatePairwiseCorrContinuousDataToEventscorrelateddata1with itself. The port correlatesdata1withdata2.The correlation helpers' exponent
0.args.post_event_seconds(a find-and-replace accident) is back to a square root.The Python translations matched each event to the first sample at or after it (
searchsorted). sciflow defaults to the nearest sample;peri_eventandperi_event_normalizetakematch: "next"to reproduce the original. The windows' 0-based bounds check (ind - pre >= 0) also fixes the off-by-one carried over from MATLAB's 1-based> 0.binEventDataToEventssummed over events.event_histogramkeeps one row per event;epoch_averagewithstatistic: sumgives the original total.
datetime64 timestamps and ISO-date CSV columns are converted to seconds since the Unix epoch, recorded as time_origin in the artifact's meta, so daily or market data works too (e.g. pre: 2592000 for 30 days).
Workarounds for EventLogic 0.2.0
Events.__xor__is broken. XOR is composed as(a | b) & ~(a & b).The sweeps assume each operand is internally non-overlapping, so inputs are normalized with
self_or()first.
Available Tools
14 toolscompare_artifactsA
Check whether two artifacts agree numerically, e.g. the same step run on a laptop and on a cluster. Ids are hashes of exact bytes, so different hardware can give different ids for results that agree to ~1e-15; this compares kind, axes, stamps, coordinates and data within |a - b| <= atol + rtol * |b|.
| Name | Required | Description | Default |
|---|---|---|---|
| a | Yes | ||
| b | Yes | ||
| atol | No | ||
| rtol | No |
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 does well: it discloses exactly which aspects are compared (kind, axes, stamps, coordinates, data) and the exact tolerance rule |a - b| <= atol + rtol * |b|. It also pre-empts a likely confusion about non-deterministic ids across hardware. It does not state whether the result is a boolean or a detailed mismatch report, though an output schema exists to cover that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action and rationale, with no filler. The second sentence is dense with the comparison tuple and formula, which slightly impedes scanning but every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter comparison tool with an output schema and no annotations, the description covers purpose, motivation for existing, comparison scope, and tolerance semantics. An agent has enough to invoke it correctly; the only omission is explicit identification of a/b as artifact ids and the parameter defaults, which is minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It meaningfully explains atol and rtol via the tolerance formula, which is real value. However, it never states that 'a' and 'b' are artifact ids/hashes (only 'Ids are hashes' is mentioned in passing), nor the defaults of atol=0 and rtol=1e-9, leaving two of four parameters underspecified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Check whether two artifacts agree numerically') and immediately scopes it to a concrete scenario ('the same step run on a laptop and on a cluster'). The second sentence distinguishes it from raw identity checking by explaining that artifact ids are hashes of exact bytes, so this tool does semantic/numeric comparison instead.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The laptop-vs-cluster example gives a clear triggering context for when to reach for this tool. It does not name alternatives or state when-not to use it (e.g. versus inspect_artifact for single-artifact inspection), so the guidance is contextual rather than exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
describe_operationC
Full documentation and JSON schema of an operation's parameters.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
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 burden: it implies a read-only lookup but never states that, nor does it say what happens with an unknown operation name, whether errors are raised or empty results returned, or how large the documentation payload might be.
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?
One front-loaded sentence with no filler, which is appropriate for a lookup tool. It is arguably too terse rather than too long, but every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-shape explanation is unnecessary, and the description correctly says it returns docs plus JSON schema. However, for a tool whose only input is an undocumented identifier, the missing note on where to obtain that identifier and on error behavior leaves a real gap.
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 `name` parameter has no description at all. The phrase "an operation's parameters" weakly implies `name` identifies the operation rather than a parameter, but it does not specify the expected identifier format or that it must match an operation from list_operations.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource (an operation) and states exactly what is returned (full documentation plus JSON schema of its parameters), which is enough to distinguish it from list_operations or get_run. It stops short of explicitly contrasting with any sibling, but the verb+resource pairing is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of where the required `name` value should come from (presumably list_operations), and no exclusions or alternatives. The agent must infer the entire invocation context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_artifactC
Write an artifact to disk as .npz, .mat (Collate struct layout, readable in MATLAB), .csv, or 'table': a long-format CSV with one row per element and columns for every axis plus subject / condition / other attributes of stacked sessions (ready for mixed-effects models in R or statsmodels).
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| format | No | ||
| artifact_id | 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 behavioral burden. It discloses output formats (e.g., .mat layout, table structure) but omits critical write behavior such as overwrite semantics, permissions, or error handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the action and format options, and is relatively concise. The parenthetical detail about .mat and table formats is useful but slightly dense.
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?
Given no annotations, 0% schema coverage, and an output schema, the description is incomplete: it lacks parameter explanations, usage context, and behavioral details needed for safe and 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?
Schema description coverage is 0%, so the description must explain parameters. It only lists format options (which are already defined as an enum in the schema) and provides no information about the required 'artifact_id' or 'path' parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Write') and resource ('artifact to disk') and lists supported formats. It distinguishes itself from siblings like export_workflow by focusing on artifact export, though it does not explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool's use for writing artifacts but provides no explicit guidance on when to use it versus alternatives such as export_workflow or import_data. No prerequisites or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_workflowB
Compile a workflow or pipeline into cluster jobs that each run one step against a shared store (a pipeline's sessions run in parallel; its aggregate steps wait for all of them).
slurm options: store_path, partition, time, mem, cpus, account, setup (shell lines, e.g. module load), sciflow_cmd, extra_sbatch. argo options: image, namespace, store_pvc, cpu, memory.
| Name | Required | Description | Default |
|---|---|---|---|
| target | Yes | ||
| options | No | ||
| out_dir | Yes | ||
| workflow | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description usefully discloses execution semantics: each job runs one step against a shared store, pipeline sessions run in parallel, and aggregate steps wait. However, it does not clarify whether this only generates job files or actually submits jobs to the cluster, nor does it mention write side effects, permissions, or failure behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and behavioral context are front-loaded, and the per-target option lists are terse. The text is dense but every sentence contributes, though the abrupt switch into option lists could be slightly better signposted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values needn't be explained. But for a 4-parameter tool with no annotations and 0% schema description coverage, the description omits top-level parameter meanings and whether the tool submits cluster jobs or only emits job files, which are important 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?
Schema description coverage is 0%, so the description must carry parameter meaning. It helpfully enumerates target-specific `options` keys for slurm and argo, but never explains what `workflow` (object vs string), `target`, or `out_dir` mean, leaving several required parameters undocumented.
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 ('Compile') and resource ('workflow or pipeline into cluster jobs'), making it clear this is a compilation/export operation rather than execution (run_workflow) or validation (validate_workflow). The purpose is distinct from siblings, though it does not name an alternative explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when preparing a workflow for a Slurm or Argo cluster, but never states when an agent should choose this over run_workflow, validate_workflow, or export_artifact. No explicit exclusions or prerequisites are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_datasetC
A registered dataset's sessions, subjects, attributes and input artifact ids. With no id, lists datasets.
| Name | Required | Description | Default |
|---|---|---|---|
| dataset_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full disclosure burden. It does reveal the dual fetch/list behavior and the categories of data returned, but says nothing about permissions needed, behavior for an invalid id, or pagination of the list mode.
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 very short fragments with zero filler, and the primary behavior precedes the conditional. The telegraphic style omits a verb and reads as a field list rather than a sentence, which slightly hurts scannability without wasting any words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values needn't be detailed, and both modes are mentioned. Still, for a tool with no annotations, the definition leaves gaps around error behavior for a bad id and what the list mode returns.
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 schema only exposes a nullable dataset_id with a null default. The description partially compensates by explaining that omitting the id switches to list mode, which is genuine meaning beyond the schema, but it never describes the expected id format.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource and its contents ('A registered dataset's sessions, subjects, attributes and input artifact ids') and reveals a dual mode ('With no id, lists datasets'), which separates it from register_dataset. However, it is a noun phrase with no verb, so 'get' is inferred rather than stated, and it never distinguishes itself from inspect_artifact or list_artifacts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only guidance is the conditional 'With no id, lists datasets', which explains what happens when the parameter is omitted but not when to choose this tool over siblings like register_dataset or list_artifacts. No exclusions, prerequisites, or alternative routing are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_runA
Full provenance record of a run (resolved workflow, environment and package versions, every step's params, inputs, outputs and cache key). With no run_id, lists recent runs.
| Name | Required | Description | Default |
|---|---|---|---|
| run_id | No |
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 full burden, and it delivers the two most important behavioral facts: this is a record-retrieval read, and omitting run_id silently switches the tool into a recent-runs listing mode rather than erroring. It stops short of describing behavior for an unknown run_id or any auth/scoping constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler, with the primary purpose and record contents front-loaded and the mode-switch rule placed last where it reads as a qualifier. Every clause adds information an agent would otherwise have to guess.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-shape detail is not the description's job, and the dual-mode behavior plus record contents cover the essentials for a one-parameter read tool. What is missing is failure behavior for an invalid run_id and any mention of result volume or pagination for the listing mode.
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% for the single run_id parameter, so the description must supply meaning — and it does: the parameter's presence selects single-run lookup, its absence selects recent-runs listing. The only gap is that no format or example for run_id is given.
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 specifies both the verb (retrieve a full provenance record) and the resource (a run), and enumerates what the record contains (resolved workflow, environment/package versions, per-step params/inputs/outputs/cache key). It is clearly not list_artifacts or list_operations, though it never explicitly routes the agent away from those siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The second sentence usefully explains the no-argument fallback ('lists recent runs'), which is real usage guidance for the optional parameter. However, there is no statement of when to prefer this tool over describe_operation, inspect_artifact, or list_operations, and no exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
import_dataB
Import a .npy/.npz/.mat/.csv file into the store and return its artifact id.
Series: the array under data_key with its parametric axis at index parametric_axis, paired with
stamps_key (default 'stamps' or Collate's 'timestamps'), or stamps generated from sample_rate and
start. ticks_per_unit divides raw stamps (e.g. 30000 for sample numbers at 30 kHz). axes labels
every axis, the first naming the parametric axis; or pass just axis (e.g. "depth") and its unit.
Intervals: ons_key/offs_key, or times_key for point events, on parametric axis.
stream selects one struct in a Collate-style .mat file. CSV series use stamp_column (default: first).
| Name | Required | Description | Default |
|---|---|---|---|
| axes | No | ||
| axis | No | ||
| kind | No | series | |
| name | No | ||
| path | Yes | ||
| unit | No | ||
| start | No | ||
| units | No | ||
| stream | No | ||
| ons_key | No | ons | |
| data_key | No | data | |
| offs_key | No | offs | |
| times_key | No | ||
| stamps_key | No | ||
| sample_rate | No | ||
| stamp_column | No | ||
| ticks_per_unit | No | ||
| parametric_axis | No |
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 behavioral burden. It states that the tool imports into the store and returns an artifact id, but it does not disclose permissions, overwrite behavior, error cases, idempotency, or other side effects of a mutation-like import operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose is front-loaded, then the Series and Intervals paragraphs organize the dense parameter guidance. The description is long but every sentence carries operational meaning for a complex 18-parameter import tool.
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?
The output schema exists, so return-value explanation is not required, and the description covers many parameter semantics. However, for a complex import with no annotations and 0% schema description coverage, it still omits important context such as permissions, overwrite behavior, and handling of unsupported or malformed files.
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%, so the description must explain the 18 parameters, and it does so for many of them: data_key, parametric_axis, stamps_key, sample_rate, start, ticks_per_unit, axes, axis, unit, ons_key, offs_key, times_key, stream, and stamp_column. It leaves some parameters such as name and units unexplained, preventing a top score.
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 gives a specific verb and resource: import a .npy/.npz/.mat/.csv file into the store and return its artifact id. It is clear what the tool does, but it does not distinguish this tool from nearby siblings such as register_dataset or export_artifact.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains how to shape series and interval imports, but it does not state when this tool should be used versus alternatives such as register_dataset. There are no explicit preconditions, exclusions, or sibling-routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspect_artifactA
Summarise an artifact (parametric axis and unit, shape, axes, extent, sample rate, NaN fraction) and how it was produced. Accepts a full id or a unique prefix.
| Name | Required | Description | Default |
|---|---|---|---|
| artifact_id | Yes |
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; 'summarise' strongly implies a read-only, non-mutating operation, which is useful. However, it does not state what happens when the prefix is ambiguous or matches nothing, nor any permission or cost characteristics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler: the primary operation and its output content come first, and the identifier-acceptance note is tacked on efficiently. The parenthetical list is dense but each item is meaningful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with an output schema present, the description covers purpose, summary contents and input format, which is sufficient to call it correctly. Missing only edge-case behavior for non-unique prefixes and any note on sibling selection.
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% for the single required parameter, so the description must compensate — and it does, explaining that artifact_id accepts a full id or a unique prefix. The ambiguity/error behavior of the prefix is left unstated, keeping it below 5.
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 gives a specific verb+resource ('Summarise an artifact') and enumerates exactly what the summary covers (axis, unit, shape, axes, extent, sample rate, NaN fraction, provenance). That enumeration implicitly distinguishes it from list_artifacts, compare_artifacts and export_artifact, but no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only usage-adjacent sentence is about identifier format ('full id or unique prefix'), which is input guidance rather than when-to-use guidance. There is no statement of when this tool should be chosen over describe_operation, list_artifacts or compare_artifacts, and no prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_artifactsB
List every artifact in the store.
| 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 provided, the description carries the full disclosure burden, and it offers almost nothing: no indication of whether results are paginated, how large the listing may be, what order they come in, or any permission requirements. 'Every artifact' hints at an unfiltered full scan but that is the only behavioral signal.
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?
A single short sentence with the verb and scope front-loaded and no filler. It is not under-specified to the point of being a tautology, but it also has no structure beyond the one clause.
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?
The output schema covers return values and there are no parameters, so the remaining burden is small. However, absent any annotations, the description should say more about the nature of the listing (completeness, ordering, scale) to be fully sufficient.
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 and the baseline of 4 applies. The description adds no parameter information, but none is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (list) and resource (artifacts) with a clear scope qualifier ('every ... in the store'). An agent can tell what it does, but it does not distinguish this from siblings such as inspect_artifact or compare_artifacts, which also operate on artifacts.
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?
There is no statement of when to use this tool versus alternatives like inspect_artifact or export_artifact, and no prerequisites or exclusions are given. The single sentence only asserts what the tool does, leaving selection entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_operationsA
List available operations with their input kinds and output kind. Optionally filter by category (intervals, series, filtering, peri-event, correlation, alignment).
| Name | Required | Description | Default |
|---|---|---|---|
| category | No |
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 burden, and it does disclose the shape of what comes back (operations plus their input/output kinds). However, it never states that this is a read-only query with no side effects, nor anything about permissions or cost — for a list tool the risk is low, but the disclosure is 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 sentences, zero waste, with the core behavior front-loaded and the optional filter clearly marked as optional. Every clause earns its place.
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 return values, and the one parameter's valid values are fully enumerated. The only real gap is the missing handoff to describe_operation, but the tool is callable correctly as written.
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 parameter has no description or enum, so the description is the only source of meaning — and it delivers by enumerating the valid categories (intervals, series, filtering, peri-event, correlation, alignment). It does not say whether matching is exact or case-sensitive, which keeps this short of a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List available operations') and even specifies what each entry contains ('input kinds and output kind'), which is more than the name conveys. It doesn't explicitly distinguish itself from the sibling describe_operation, so the boundary between listing and describing is left for the agent to infer.
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?
'Optionally filter by category' tells the agent filtering is available but not when filtering is warranted versus listing everything. No mention of the natural follow-up (describe_operation) or of any when-not condition, so usage is implied rather than guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
register_datasetB
Register an experiment: {name, sessions: [{id, subject, attributes: {condition: ..., day: ...}, inputs: {: | {path, kind, options}}}]}. File inputs are imported (options are import_data's keyword arguments). Returns a content-derived dataset id that pins the exact data.
| Name | Required | Description | Default |
|---|---|---|---|
| dataset | 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 behavioral burden. It discloses important behavior by saying file inputs are imported and by describing the returned content-derived id as pinning the exact data, but it does not address permissions, idempotency, overwrite behavior, or other side effects of registration.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the action and then gives the dataset structure in a single dense sentence. It avoids filler, though the nested brace notation is harder to parse than a more structured presentation would be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool whose only parameter is a complex nested object, the description supplies substantial structural detail and an output schema covers return values. However, it omits the string alternative permitted by the schema, does not clarify usage relative to siblings, and provides no annotation-level safety context.
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%, so the description must compensate, and it does so extensively by spelling out the nested dataset object: name, sessions, subject, attributes, and inputs with artifact-id or file-path forms. The main gap is that the schema also allows a string dataset, and the description does not explain what that string represents or when to use it.
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 gives a specific verb and resource: register an experiment/dataset, and outlines the expected object shape. It does not explicitly distinguish this tool from siblings such as import_data or get_dataset, so it is clear but lacks sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains what the dataset structure looks like, but gives no guidance on when to use register_dataset versus import_data, get_dataset, or other siblings. The note about file inputs and import_data options is structural context, not usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_workflowA
Run a workflow or pipeline locally. Steps whose (operation, version, params, inputs) already ran are
reused from cache unless force, so adding sessions to a dataset only runs the new ones. Returns run_id,
per-step outputs (summarised for pipelines) and the workflow outputs.
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | ||
| workflow | 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 does disclose the most important non-obvious trait: caching keyed on (operation, version, params, inputs) with `force` bypassing it, plus the shape of the result. It omits execution characteristics such as duration, failure/partial-failure behaviour, and the cost of a large pipeline run.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action, then the caching caveat and the return shape. No filler or restatement of the name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-parameter tool with an output schema, the description covers the one genuinely tricky behaviour (cache reuse and `force`) and the return contract. The gap is the ambiguous `workflow` argument type, which neither schema nor description resolves.
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%, so the description must compensate. It explains `force` well (bypasses cache), but says nothing about `workflow` being either an inline object or a string — an agent cannot tell whether the string is a path, a name, or serialised JSON.
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+resource ('Run a workflow or pipeline locally') and adds that it returns run_id, per-step outputs and workflow outputs, which separates it from validate_workflow/visualize_workflow/export_workflow. It does not explicitly name any sibling as the alternative, so the differentiation is inferential rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete usage scenario — cached step reuse means 'adding sessions to a dataset only runs the new ones' — and explains when to set `force`. It does not tell the agent when NOT to use it (e.g. validate first, or use get_run to re-fetch an existing run), so the guidance is contextual but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_workflowA
Statically check a workflow or pipeline (JSON object, YAML/JSON text, or file path): references, cycles, input/output kinds and parameters. Returns the execution order and each step's output kind; pipelines are compiled first (session steps appear as '__').
| Name | Required | Description | Default |
|---|---|---|---|
| workflow | 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 does substantial work: it discloses what is validated, that execution order and per-step output kinds are returned, and that pipelines are compiled first with session steps renamed to '<session>__<step>'. It omits one important behavior: whether failures raise an error or come back as a validation-result payload.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences with the core action, the accepted input forms, and the output shape, all front-loaded with zero 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?
An output schema exists, so return format need not be explained, yet the description still summarizes it helpfully. Coverage is strong for a single-parameter validation tool; the only meaningful gap is failure/error reporting semantics.
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 anyOf parameter is undocumented structurally, but the description compensates by naming all three accepted forms: a JSON object, YAML/JSON text, or a file path. This directly resolves the anyOf ambiguity the schema leaves open.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: "Statically check a workflow or pipeline," and enumerates what is checked (references, cycles, input/output kinds, parameters). The word "statically" implicitly separates it from run_workflow, but no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The context of use is implied by "statically check" (validate before executing), but the description never says when to reach for this versus run_workflow or visualize_workflow. There are no exclusions, prerequisites, or named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
visualize_workflowA
Draw a workflow or pipeline: Mermaid flowchart text (render it for the user), or the node / edge graph as JSON for a visual editor. Pipelines show their session steps once, inside an 'each of N sessions' block, with the artifact kind on every edge.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | mermaid | |
| workflow | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It does add real behavioral context: the tool renders Mermaid for the user rather than returning raw text, and pipeline workflows are collapsed to session steps inside an 'each of N sessions' block with artifact kinds on edges. It does not state whether the operation is read-only/side-effect free, whether invalid workflows error or degrade, or any limits on graph size.
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 tight sentences, front-loaded with the purpose before the format details. The pipeline-collapsing sentence is dense and slightly awkward but every clause carries information an agent would otherwise lack.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return-value explanation is unnecessary, and the description covers both input parameters plus the notable rendering convention for pipelines. Remaining gap is guidance on failure modes and interaction with validate_workflow, minor for a read/visualization tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it largely does: it explains that the workflow argument accepts either Mermaid flowchart text or a node/edge graph as JSON, which maps directly onto the anyOf schema. It also names the rendering intent of each format option. It does not describe the enum's default or error behavior for mismatched format/input.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource: "Draw a workflow or pipeline," then names the two output modalities. It is clearly distinguishable from siblings like export_workflow or validate_workflow, though it never explicitly contrasts itself with export_workflow (which might also emit Mermaid).
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?
Usage is implied through the format distinction — Mermaid text is to be rendered for the user, JSON graph is for a visual editor — which effectively tells an agent which mode to pick. However, there is no explicit when-to-use/when-not guidance relative to export_workflow or validate_workflow, and no stated preconditions (e.g., must the workflow be validated first).
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.
14 tool updates
v0.1.0- First observed
compare_artifacts - First observed
describe_operation - First observed
export_artifact - First observed
export_workflow - First observed
get_dataset - First observed
get_run - First observed
import_data - First observed
inspect_artifact - First observed
list_artifacts - First observed
list_operations - First observed
register_dataset - First observed
run_workflow - First observed
validate_workflow - First observed
visualize_workflow
TDQS
Scored across 14 tools
Most tools map to a distinct resource+action: operations (list/describe), artifacts (import/list/inspect/compare/export), datasets (register/get), workflows (validate/run/visualize/export) and runs (get_run). The only soft overlaps are the four *_workflow tools and three *_artifact tools, but their descriptions (static check vs. execute vs. draw vs. compile to cluster jobs; inspect vs. compare vs. write to disk) clearly separate them. get_dataset doubling as 'list datasets' when no id is given is a minor collision with list_artifacts.
Every tool follows a single snake_case verb_noun convention (list_operations, register_dataset, run_workflow, export_artifact). Verbs are reused consistently for the same intent (list_, get_, export_, *_workflow), making the surface predictable.
14 tools sits squarely in the well-scoped range and each one corresponds to a real lifecycle stage (discovery, import/store, dataset registration, workflow validate/run/visualize/export, provenance, artifact export). No obviously redundant or filler tools.
The core pipeline is covered end to end: discover operations, import data, register datasets, validate/run/visualize/export workflows, inspect provenance, and export results for R/statsmodels. Gaps are minor: no delete/prune for artifacts or datasets, no explicit in-memory artifact data read (only summary via inspect or disk write via export), and no workflow listing tool.
Maintenance
Related MCP Connectors
Plan and verify evidence-aware research workflows with specialist execution receipts.
Deterministic research automation with live OpenAlex search and reusable workflow programs.
Shared workspace for AI artifacts: your agents publish, search and cite each other's work.
Provenance-first database for teams and agents: every value carries sources, rules and coverage.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables creation and invocation of reusable research workflow programs derived from demonstrations, with live scholarly data search and workspace automation via multiple protocols.MIT
- AlicenseNot gradedqualityBmaintenanceEnables deterministic, resumable workflow automation through DAG step graphs, boolean gate branching, automatic parallel execution, and in-step agent loops with sandboxed file and command tools.5 npm1MIT
- AlicenseNot gradedqualityAmaintenanceEnables agents to track ML experiments with a reproducible write contract, internal git snapshots, and a queryable knowledge graph, plus a live web UI for humans.Apache 2.0
- FlicenseNot gradedqualityAmaintenanceEnables deterministic, harness-neutral research workflows by unifying research object identity, evidence receipts, claim-evidence graphs, and append-only decision logs, along with specialized scholarly skills for literature analysis, reproducibility audits, and multi-agent review.206 PyPI1-