Tamarind
Access a collection of open-source molecular design and structural biology tools on the Tamarind Bio platform, via its REST API or MCP server — no local GPUs required. Tamarind bundles popular open-source models for structure prediction (AlphaFold, Boltz, Chai, ESMFold), protein, binder, and de novo design (RFdiffusion, ProteinMPNN, BoltzGen), antibody and nanobody design and developability, protein-ligand docking (DiffDock, Autodock Vina), binding-affinity prediction, MSA generation, and molecular dynamics. Use when the user mentions Tamarind or tamarind.bio, wants to run any of these open-source tools in the cloud, references app.tamarind.bio/api or the x-api-key header, or needs to submit batches of sequences for structural or biophysical characterization.
- Skill ID
- k-dense-ai/scientific-agent-skills/tamarind
- Publisher
- k-dense-ai
- Repository
- scientific-agent-skills
- Installs
- 0
- Files
- 5
- License
- MIT
- Requires
- Requires Python 3.10+, a Tamarind Bio account, and an API key from app.tamarind.bio. Uses the `requests` library against the public REST API (no dedicated Python SDK exists). Network access required. Optional MCP server at mcp.tamarind.bio/mcp for agent hosts.
- Synced
- Sep 23, 2026
Open any RiverX project, open the Skills panel in the chat, and search for this identifier. The files are fetched from the source repository at install time.
k-dense-ai/scientific-agent-skills/tamarindInstalls these files- SKILL.md
- references/api_reference.md
- references/examples.md
- references/tool_catalog.md
- references/workflows.md
What this skill tells the agent
Tamarind Bio
Tamarind Bio is a cloud platform that runs computational biology tools — structure prediction, protein and antibody design, docking, binding-affinity, MSA generation, and molecular dynamics — on managed GPUs. Users submit sequences or structures and get back predicted structures, designs, and biophysical scores, without provisioning their own hardware. It exposes hundreds of tools (AlphaFold, Boltz-2, Chai-1, RFdiffusion, ProteinMPNN, BoltzGen, ESMFold2, DiffDock, Autodock Vina, and many more) through one uniform job API.
Official docs: app.tamarind.bio/api-docs · platform UI at app.tamarind.bio
Canonical sources — fetch these, don't rely on a stale copy
Tamarind publishes live, machine-readable sources. Prefer fetching them at runtime over trusting any hardcoded list — tool names, schemas, and endpoints change frequently:
- `https://app.tamarind.bio/llms.txt` — LLM index: links to the spec, API docs, and MCP guide.
- `https://app.tamarind.bio/openapi.yaml` — OpenAPI 3.0 spec for the 8 core job endpoints (submit-job/-batch, jobs, result, upload, files, delete-job/-file; auth
ApiKeyAuth). Fetch it for those exact shapes. Discovery/management endpoints (/tools,/usage-statistics, pipelines, …) aren't in it — use the MCP/REST discovery tools for those. - `https://docs.tamarind.bio/llms.txt` — documentation index; every page has a
.mdform (e.g.docs.tamarind.bio/tamarind/batch.md,/tamarind/api.md,/tamarind/pipelines.md). - Live tool discovery —
GET /tools(REST) or MCPgetAvailableTools+getJobSchema(jobType)are the source of truth for what tools exist and their parameters.
This skill teaches the surface + the non-obvious behaviors those sources don't spell out (see the reference files). When in doubt about a shape, fetch openapi.yaml.
When to use this skill
Use Tamarind when the user wants to:
- Predict structure of a protein, complex, or protein-ligand system (AlphaFold, Boltz-2, Chai-1, ESMFold2, Chai/Boltz cofolding)
- Design proteins or binders (RFdiffusion, BoltzGen, BindCraft, ProteinMPNN/LigandMPNN inverse folding)
- Design or characterize antibodies/nanobodies (sequence generation, humanization, developability, immunogenicity)
- Dock small molecules to a protein (DiffDock, Autodock Vina) or predict binding affinity
- Generate MSAs for downstream folding
- Run molecular dynamics or other biophysical workflows on managed GPUs
- Batch-screen many sequences or designs through the same tool
- Chain tools into pipelines (e.g. design → fold → score) using the output of one job as the input of the next
This skill is the right fit when the work should run on Tamarind's managed cloud rather than on a local install. For purely local cheminformatics or one-off sequence I/O, use a local library (RDKit, BioPython) instead.
Access and authentication
- Sign in at app.tamarind.bio and create an API key from the account/API settings.
- Authenticate every REST request with the
x-api-keyheader. - Never hardcode the key. Read it from the
TAMARIND_API_KEYenvironment variable or a.envfile (usepython-dotenv). Never commit keys to source control.
Pricing: Every user gets 10 free jobs. For larger usage, contact info@tamarind.bio to purchase a subscription.
export TAMARIND_API_KEY="your_api_key"
# List available tools
curl https://app.tamarind.bio/api/tools \
-H "x-api-key: $TAMARIND_API_KEY"Base URL: https://app.tamarind.bio/api/
There is no official Python SDK — the PyPI package named tamarind is an unrelated Neo4j tool. Do not uv pip install tamarind. Write plain requests calls against the REST API (the endpoint shapes are in openapi.yaml), or use the MCP server for agent hosts.
Two ways to call Tamarind
MCP server (best for AI agents)
Tamarind hosts an MCP server at https://mcp.tamarind.bio/mcp (API-key auth via the X-API-Key header). When your agent host supports MCP, prefer it — the tools mirror the REST API with agent-friendly schemas:
listModalities()/listTags()— the live filter vocabulary (molecule type / function) with labels + tool counts; call these to learn validmodality/functionvalues instead of hardcodinggetAvailableTools(modality?, function?, search?, custom?)— discover tools (category/tagare deprecated aliases still honored)getJobSchema(jobType)— exact parameter schema for a tool, plus anexampleJobstarting payload (validate it before submitting)validateJob(jobName, type, settings)— dry-run validation before submittingsubmitJob(jobName, type, settings)/submitBatch(batchName, type, settings[], jobNames[])getJobs(jobName?, batch?, limit?, includeSequences?)— list/inspect jobs and statuses (the bulky per-job input blob is omitted by default; passincludeSequences=trueto keep it)getJobLogs(jobName)— fetch output logs for debugginglistJobFiles(jobName)— list output files (returnss3Pathfor chaining)getResult(jobName, fileName?)— download resultsuploadFile(filename)— presigned upload URL; oruploadFileContent(filename, content, encoding?)to send file content through MCP when the host can't reach S3 (sandboxed agents)
Scope note: MCP query tools (getJobs, getResult, listJobFiles, …) are scoped to the authenticated account.
REST API (universal)
Use plain HTTP with requests — the endpoint shapes are in openapi.yaml. The core loop is below; references/workflows.md has full recipes.
Core workflow
Always follow discover → schema → validate → submit → poll → results. Do not hardcode tool names or settings — the catalog changes frequently.
import os, time, requests
BASE = "https://app.tamarind.bio/api"
HEADERS = {"x-api-key": os.environ["TAMARIND_API_KEY"]}
# 1. Discover tools. REST /tools returns the full list; filter client-side.
tools = requests.get(f"{BASE}/tools", headers=HEADERS).json()
alphafold = next(t for t in tools if t["name"] == "alphafold")
# 2. Get the exact schema for the chosen tool.
# REST: each /tools entry already includes its inline `settings` schema
# (parameter list) — find the entry whose name == your job type.
# MCP: getJobSchema(jobType) returns the same per-tool detail.
# 3. Submit a job. `settings` is tool-specific — match the schema exactly.
payload = {
"jobName": "my-alphafold-run", # ^[a-zA-Z0-9_-]+$, <=100 chars, unique
"type": "alphafold",
"settings": {
"sequence": "MKTVRQERLKSIVRILERSKEPVSGAQLAEELSVSRQVIVQDIAYLRSLGYNIVATPRGYVLAGG",
"numRecycles": 3,
},
}
resp = requests.post(f"{BASE}/submit-job", headers=HEADERS, json=payload)
resp.raise_for_status() # 200 ok; 400 bad request; 403 budget exceeded; 401 unauthorized
# 4. Poll for completion.
# NOTE the response shape: GET /jobs?jobName=<name> returns the job ROW
# directly (no "jobs" wrapper); the list query (no jobName) returns
# {"jobs": [...]}. Don't index ["jobs"][0] on the by-name response.
while True:
job = requests.get(f"{BASE}/jobs", headers=HEADERS,
params={"jobName": "my-alphafold-run"}).json()
if job["JobStatus"] in ("Complete", "Stopped", "Deleted"):
break
time.sleep(30)
# 5. Retrieve results. POST /result returns a presigned URL *string*;
# GET that URL to download the actual results zip (two-step).
url = requests.post(f"{BASE}/result", headers=HEADERS,
json={"jobName": "my-alphafold-run"}).text.strip('"')
open("my-alphafold-run.zip", "wb").write(requests.get(url).content)For the agentic version of this loop using MCP tools, and for richer examples, see references/workflows.md.
Discovering tools
More from k-dense-ai
Use this skill in a project
Open any RiverX project, search the Skills panel for k-dense-ai/scientific-agent-skills/tamarind, and install it in one click.
