Skip to content

MCP Tools Reference

ARI ships 14 MCP servers (one per ari-skill-* package). This page is a flat catalogue of every tool the agent can call. The deep dive for each skill lives in its own README.md; the section skills.md groups them by responsibility.

mcp.json (next to each skill's pyproject.toml) is the source of truth for tool names; the function decorated with @mcp.tool() (or the entry in @server.list_tools() for the older skills) defines the arguments and return shape.

The "LLM" column marks tools that are P2 exceptions — they call an LLM and therefore are not byte-deterministic.

ari-skill-benchmark — statistics + plots (deterministic)

ToolPurposeLLM
analyze_resultsSummary stats from CSV / JSON / npy
plotDeterministic matplotlib figure from a fixed schema
statistical_testHypothesis tests (t-test, Mann-Whitney, ...)

ari-skill-coding — write + run code

mcp.json lists no tools; the actual tool list comes from @server.list_tools() in src/server.py.

ToolPurposeLLM
write_codeWrite a file into the node work_dir
run_codeExecute a script with timeout + capture
run_bashAd-hoc bash command
emit_resultsEmit metrics + has_real_data for the evaluator (optional provenance arg → written verbatim as the _provenance key tagging how each value was measured, for the claim-evidence gate). The response's contract_warnings may include suggestion-only "POSSIBLE name matches" hints when an emitted key lexically resembles a required evidence name — advisory only: nothing is auto-bound and the gate never consumes them
read_fileRead a file the agent wrote earlier

ari-skill-evaluator — LLM metric extraction

ToolPurposeLLM
make_metric_specLLM extracts metric definitions from experiment.md; also emits a run-level metric_contract{checkpoint}/metric_contract.json. Mint-once: when a persisted claims-bearing contract already exists, the call returns it verbatim with contract_frozen: true instead of re-extracting (per-node spec fields like the scoring guide stay per-call)
claim_evidence_hard_gateDeterministic claim/evidence hard gate (execution data fidelity); strict mode blocks finalize on the final phase
evidence_grounded_semantic_reviewNon-blocking, evidence-grounded semantic review; emits suggested_revisions for paper_refine

ari-skill-hpc — SLURM + Singularity

mcp.json has an empty list; tools come from @server.list_tools() in src/server.py.

ToolPurposeLLM
slurm_submitsbatch with explicit partition / time / cpus / nodes / GPUs
job_statussqueue + sacct lookup
job_cancelscancel a running job
run_bashDirect bash command (local or via SSH)
singularity_buildBuild a SIF from a definition file
singularity_runRun a command inside a SIF
singularity_pullPull a SIF from a remote URI
singularity_build_fakerootFakeroot build (no privileged daemon)
singularity_run_gpuGPU variant of singularity_run

ari-skill-idea — literature survey + idea generation

ToolPurposeLLM
surveyarXiv + Semantic Scholar search; pure HTTP
generate_ideasLLM generates ranked idea candidates from survey + context

generate_ideas has two engines behind one stable output contract. The default is the lightweight re-implemented discussion loop; the opt-in real VirSci vendor-wrap engine (ARI_IDEA_VIRSCI_REAL=1) runs VirSci's actual multi-agent mechanism on a live Semantic Scholar snapshot, degrading to the re-impl loop on missing deps / any runtime error. The idea.json contract is identical either way; the path taken is reported in virsci_integration_status (real_wrap vs reimpl: ...).

ari-skill-memory — ancestor-scoped node memory

This skill uses FastMCP @mcp.tool() decorators in src/server.py; its static mcp.json is stale (it lists only the four node-scope tools) but every decorated function below is exposed at runtime.

ToolPurposeLLM
add_memoryAppend an entry to the current node's memory
search_memoryEmbedding-ranked search across the current node + ancestors✗ (server-side embedding)
get_node_memoryAll entries for the current node
clear_node_memoryDrop the current node's entries (CoW; ancestors untouched)
get_experiment_contextStable, experiment-level facts from Letta core memory
add_experiment_resultRecord a typed experiment_result (CoW: self node only)
add_failure_caseRecord a typed failure_case (CoW: self node only)
add_procedure_memoryRecord a reusable procedure (CoW: self node only)
add_reflectionRecord a reflection (CoW: self node only; not usable for paper claims)
add_reproducibility_eventAppend an append-only reproducibility status event (CoW: self node only)
search_research_memoryAncestor-scoped typed search, filtered by kind / artifact presence
get_verified_contextArtifact-grounded, reproducibility-aware context for paper / figure use
audit_memoryVerify recorded provenance (sha256) against disk for a checkpoint
consolidate_node_memoryDerive + write typed memory from a node_report at node end (CoW: self)

The skill explicitly declares "no LLM calls" in its design doc — see ari-skill-memory/README.md.

ari-skill-orchestrator — recursive ARI runner

ToolPurposeLLM
run_experimentLaunch a child ARI run
get_statusStatus of a child run
list_runsAll known runs
get_paperGenerated LaTeX / PDF for a run

ari-skill-paper — LaTeX paper writing

ToolPurposeLLM
list_venuesAvailable LaTeX templates (ACM / NeurIPS / SC / ICPP / arXiv)
get_templateFetch a venue's template
generate_sectionLLM writes a section (intro, methods, ...)
compile_paperpdflatex compile
check_formatLaTeX format validation
review_sectionLLM rubric review of one section
revise_sectionLLM rewrite using review feedback
write_paper_iterativeDrive the generate / review / revise loop end-to-end
review_compiled_paperFinal-pass review on compiled PDF (delegates to VLM for figures)
link_paper_claimsReconcile % CLAIM:Cx:NCx anchors against science_data claims, build paper_claim_links (deterministic)
paper_refineApply suggested revisions while preserving % CLAIM:Cx:NCx anchors (deterministic subs + bounded LLM find/replace)
list_rubricsAvailable reviewer rubrics
inject_code_availabilityv0.7.0 — append a \codedigest{...} block to the paper
merge_reviewsv0.7.0 — combine rubric review + VLM review JSON

ari-skill-paper-re — PaperBench reproducibility (v0.7.0)

ToolPurposeLLM
fetch_code_bundleFetch + verify a code bundle by ref + sha256
build_reproduce_shStage 1 — vendor BasicAgent / IterativeAgent rollout writes reproduce.sh
run_reproduceStage 2 — execute reproduce.sh in a local / docker / apptainer / singularity / slurm sandbox
grade_with_simplejudgeStage 3 — LLM grades the executed submission against the rubric leaves

v0.8.0 new fields (Stage 1)

ToolNew args
build_reproduce_shcontainer_image (replaces / supersedes legacy apptainer_image; both accepted for back-compat)

v0.8.0 new fields (Stage 2)

ToolNew args
run_reproducecontainer_image (honoured by docker / apptainer / singularity sandboxes; alias pb-env / pb-reproducer resolves to vendor image:latest tags built by scripts/build_pb_images.sh)

Fail-loud preconditions: missing docker daemon / apptainer binary / sbatch / partition raise RuntimeError rather than silently falling back to local CPU. Opt back into legacy fallback via ARI_PHASE1_ALLOW_FALLBACK=1; opt back into silent GRES-flag drop via ARI_SLURM_ALLOW_NO_GRES=1. See environment_variables.md. Mixing typed (gpu_type / --gres=gpu:TYPE:N) with untyped (--gpus-per-task) GPU requests is automatically canonicalised to the typed form — SLURM 24.05 rejects the mixed form.

v0.8.0 new fields (Stage 3)

ToolNew args
grade_with_simplejudgecode_only (prune rubric to Code Development leaves only, mirrors vendor paperbench/grade.py:109-112; auto-enables when no reproduce.log is present so Stage 1-only runs aren't systematically zeroed)

For an in-process Python surface that chains all three stages with a single calling vocabulary, see api_paperbench.md § Bridge contract.

ari-skill-plot — figure generation

ToolPurposeLLM
generate_figuresDeterministic matplotlib figures from nodes_tree.json
generate_figures_llmLLM writes matplotlib code, then runs it

ari-skill-replicate — rubric auto-generation (v0.7.0)

ToolPurposeLLM
generate_rubricTwo-stage (skeleton + subtree) PaperBench rubric synthesis
audit_rubricLLM audits leaves for vague / unverifiable / duplicate criteria

generate_rubric — venue-conditioned templates (unreleased)

generate_rubric accepts an optional paperbench_rubric_id argument that selects a venue-conditioned template from ari-core/config/paperbench_rubrics/<id>.yaml. Mirrors the reviewer_rubrics/ venue pattern already used by ari-skill-paper's peer-review path.

ArgumentTypeDefaultEffect
paperbench_rubric_idstr""Empty = bundled prompt verbatim (back-compat). Otherwise loads the YAML template and injects prompt_overrides.system_hint / prompt_overrides.leaf_style into the skeleton + subtree prompts.

Shipped templates:

idmodeTop-level structure
genericagent_benchmarkDecompose by scientific contribution (current default behaviour).
scpaper_auditSix fixed audit axes for HPC papers (env / data / execution / figures / scaling / conclusion).
neuripspaper_auditSix axes per NeurIPS Reproducibility Checklist (claims / setup / code+data / statistics / ethics / figures).
naturepaper_auditFive axes for wet-lab papers (materials / protocol / statistics / data / ethics).

paper_audit mode requires two_stage=True; the generator returns an error if the single-pass path is requested with a paper_audit template (the single-pass prompt cannot honour the fixed-axis constraint). See rubric_schema.md for the YAML schema and authoring guide.

ari-skill-transform — tree walk + EAR pipeline

mcp.json has no tools listed (the file is internal-only); the @mcp.tool() decorators in src/server.py are authoritative.

ToolPurposeLLM
nodes_to_science_dataWalk the BFTS tree, extract methodology + findings
generate_earBuild {checkpoint}/ear/ from BFTS artefacts
curate_earPromote ear/ear_published/ + manifest.lock
publish_earPush to local-tarball / ari-registry / zenodo / gh
promote_earstagedunlisted / public

ari-skill-vlm — figure / table review (VLM)

mcp.json has no tools listed; the skill exposes internal review helpers only.

ToolPurposeLLM
review_figureVLM reads an image + caption, returns critique✓ (vision)
review_tableVLM reviews a table✓ (vision)
review_paper_figuresBatch review of every figure in a paper dir✓ (vision)

ari-skill-web — search + fetch

ToolPurposeLLM
web_searchDuckDuckGo (no API key)
fetch_urlURL → readable text
search_arxivarXiv API
search_semantic_scholarSemantic Scholar API
collect_references_iterativeWalk the citation graph from a seed paper

See also

  • docs/reference/skills.md — narrative description of each skill (responsibility, env vars, examples).
  • docs/reference/environment_variables.md — env-var-by-env-var reference.
  • The mcp.json in each skill for the canonical tool name list.
  • @mcp.tool() / @server.list_tools() in each skill's src/server.py for the canonical argument signatures.