Tamarind
K-DenseCommunityCreated by Tamarind BioDistributed by K-Dense
- Skill
- Tool integration
- Science and research
- MIT
- No issues found
AutoGineer summary
Written by AutoGineer from the skill’s own files, not by the author
Tamarind provides a programmatic interface to a collection of open-source molecular design and structural biology tools. It allows users to run models for structure prediction, protein and antibody design, docking, binding-affinity prediction, MSA generation, and molecular dynamics in the cloud without requiring local GPU resources. The platform supports interaction via a REST API or an MCP server, enabling integration into automated scientific workflows.
What it does
- Provides cloud-based execution for tools like AlphaFold, Boltz, Chai, ESMFold, RFdiffusion, and ProteinMPNN.
- Supports protein-ligand docking using DiffDock and Autodock Vina.
- Enables batch submission of sequences for structural or biophysical characterization.
- Offers tools for antibody and nanobody design and developability assessment.
- Facilitates file management for structural inputs and job result retrieval.
- Includes validation endpoints to verify job settings before submission.
When to use it
- When you need to run structural biology or molecular design tools in a cloud environment.
- When integrating Tamarind Bio's platform into an AI agent or automated pipeline.
- When you have a batch of sequences requiring structural prediction or design.
- When you need to perform protein-ligand docking or binding-affinity analysis.
Advantages
- Eliminates the need for local GPU hardware for compute-intensive biology models.
- Provides a standardized REST API for interacting with diverse scientific tools.
- Supports MCP for seamless integration with AI agent hosts.
- Includes validation and discovery endpoints to ensure correct job configuration.
Usage examples
- “Run an AlphaFold prediction for the sequence MQIFVKTLTGKTITLEVEPSDTIENVKAKIQDKEGIPPDQQRLIFAGKQLEDGRTLSDYNIQKESTLHLVLRLRGG”
- The agent will validate the sequence against the AlphaFold schema, submit the job to the Tamarind API, and poll for the completion status to retrieve the result.
- “Design a protein binder using RFdiffusion for the target structure target.pdb”
- The agent will upload the PDB file, retrieve the RFdiffusion schema, configure the design settings, and submit the job for cloud processing.
Install
Download the skill as a ZIP:
https://autogineer.com/agent-skills/k-dense-ai/tamarind/downloadUnzip it into the cross-client skills folder of your project:
mkdir -p .agents/skills && unzip tamarind.zip -d .agents/skills
Documentation by Tamarind Bio
Tamarind Bio
Tamarind runs molecular-design and structural-biology tools on managed compute: structure prediction, protein and antibody design, docking, binding-affinity prediction, MSA generation, and molecular dynamics. Use it when the user requests Tamarind, its REST API/MCP server, or cloud execution of these scientific tools. For local sequence processing or molecular descriptors, use a local library.
Sources and review scope
The REST contracts and public catalog were reviewed on 2026-09-30. Examples are illustrative until validated against the user's account; this review did not run authenticated jobs or establish scientific accuracy for any model.
API index and complete guide.
Current OpenAPI includes discovery, validation, jobs, files, and newer pipeline/custom-tool surfaces. openapi.yaml is also available. Check that needed paths exist: the merged spec can return HTTP 200 with only its classic surface when the backend spec cannot be fetched.
Public catalog needs no key; query
?type=or?tag=. It documents public tools and conditional required settings, not every optional parameter or account entitlement.Product documentation index links to Markdown pages, including the MCP guide.
Fetch the account's current schemas before composing a run. Where the prose guide and OpenAPI differ, prefer the operation/schema for field shapes, and record any unresolved difference rather than guessing.
Access
Use the user's Tamarind deployment. The shared base is
https://app.tamarind.bio/api; a dedicated organization deployment has its own host and account data. Every relative REST path below is under/api.Obtain a key from the deployment's API settings and read it from
TAMARIND_API_KEY; send it asx-api-key. Keep keys out of files and logs.Check the account's current allowance and compute budget before scaling up. Free usage is a monthly allowance, not an unconditional promise of ten jobs forever; billing and entitlements can change.
# Public discovery requires no credential.
curl --fail-with-body 'https://app.tamarind.bio/tools.json?type=alphafold'
# Account-scoped discovery:
curl --fail-with-body 'https://app.tamarind.bio/api/tools' \
-H "x-api-key: $TAMARIND_API_KEY"For REST examples install requests in the execution environment. The official
CLI distribution is tamarind-cli, and its Custom Tools Python client imports
as from tamarind import Tamarind; the unrelated package named tamarind is not
this client. See the SDK reference.
Core job recipes below use HTTP directly.
Workflow
Discover. Read
GET /toolsand match the user's scientific task to the tool description. Built-ins return an array;?custom=truelists legacy custom tools only. Current custom deployments can be missing from this list: use the known deployed name and its schema before concluding that it is unavailable.Read the schema.
GET /tools/{name}/schemareturns a JSON Schema for thesettingsobject.GET /toolsalso supplies a trimmedsettingsparameter list. Check task-dependent fields, file extensions, list values, and defaults.Validate. Send
POST /validate-jobwithtype,settings, and optionaljobName. Check HTTP status first, then JSONvalid. On success, inspect and usenormalizedas the settings to submit. Addressunrecognized_settingsif returned, even alongsidevalid: true: an optional-field typo can otherwise silently leave the default in effect. Validation checks fields, not all submit policies, queue limits, or deployment readiness.Submit once.
POST /submit-jobtakesjobName,type,settings, optionalversionfor a custom-tool build, and optional/organization-requiredprojectTag. Persist the submitted name and settings. A successful response is plain text, not a JSON receipt. Use the returned stored name.Poll.
GET /jobs?jobName=...returns a row directly. Single-job terminal states areComplete,Stopped, andFailed; handle legacyDeletedor an exact-lookup error without looping indefinitely. Poll batch parents usingbatchStatus, and poll newer pipelines on their own run endpoint.Download and inspect.
POST /resultreturns a JSON string URL on 200, or 202 withstatus: "preparing". Retry result retrieval after 202, without resubmitting compute. GET the signed URL without the Tamarind API-key header. Download the archive only for successful runs; requestfileName: "output.log"for stopped/failed jobs. Verify the scientific outputs after downloading.
Workflow recipes implement validation, stored names, bounded polling, 202 handling, batch validation, and pagination. They are locally smoke-tested with simulated responses; authenticated execution remains untested.
Picking tools and interpreting results
Select by inputs, intended output, and modeling assumptions, then confirm the candidate in the live catalog. These are anchors, not a guaranteed catalog:
| Task | Candidates and decisions |
|---|---|
| Protein/complex structure | alphafold for AF2 monomers/multimers; boltz, chai, or protenix for cofolding including ligands/nucleic acids; esmfold for fast single-sequence protein folding. Check esmfold2 separately: its current catalog includes protein, DNA, RNA, and ligand complexes. |
| Binder/motif design | bindcraft, boltzgen, rfdiffusion; choose by target type, scaffold constraints, and required structure inputs. |
| Inverse folding | proteinmpnn/ligandmpnn consume structures and design sequences. Re-fold designs and compare to the intended backbone/interface. |
| Small-molecule docking | autodock-vina for a fixed receptor and search box; diffdock for diffusion docking; boltz/chai for cofolding. Choose the modeling approach for the task, not to avoid supplying a required input. |
| Antibody/developability/MSA/MD | Filter descriptions and schemas for the specific task; availability and inputs differ by tool. |
Confidence scores describe model confidence, not experimental binding, specificity, or affinity. Compare designed backbones, interfaces, clashes, chain/residue mapping, and developability. Check ligand chemistry and stereochemistry; docking scores are not interchangeable with measured binding free energies. Record tool/model, input provenance, chain mapping, seeds/samples, MSA/template choices, normalized settings, and any user-selected filtering thresholds.
Honor the user's selected tool and budget. Use authorized defaults for routine choices; surface unresolved choices that materially affect the scientific task or compute scope before a large campaign. Never silently substitute a different scientific task because its inputs are easier to supply.
File inputs and chaining
Upload a structure with
PUT /upload/{filename}(binary body; follow the documented redirect), then reference the registered relative name, e.g.target.pdborinputs/target.pdbwhen?folder=inputswas used.Confirm names using
GET /files; it returns a non-paginated array for the selected folder, not a list of a job's outputs.Prefer these paths over inline file content. The current guide says redundant account-email prefixes are stripped; there is no longer a universal double-prefix failure. Arbitrary strings are not necessarily file references.
Reuse a completed job's file as
JobName/path/to/file.ext, matching the next parameter's supported extensions and list/scalar shape. Do not guess filenames.ProteinMPNN designs must feed a folding tool's sequence field. A structural template field does not mean "fold this designed sequence". Read generated FASTA/CSV sequences and validate one folding settings object per sequence.
Do not author internal fields such as
submit_method,msa, ormonomer_msa.
Batches and pipelines
POST /submit-batch accepts one type, a nonempty settings array, batchName,
and optional parallel jobNames. Validate every row using array-mode
/validate-job (up to 1,000 rows per call), and use each row's normalized settings.
Submission allows up to 30,000 expanded jobs, counting design fan-out, and
has a separate approximately 4.5 MB request limit. Split on both constraints.
Do not assume old weightedHoursBudget, maxRuntimeSeconds, or gpuType request
fields enforce a cap: they are absent from the current batch schema. Use confirmed
account controls and an agreed job/sample count.
Poll GET /jobs?jobName=<batchName> until batchStatus is Complete, Stopped,
or AggregationFailed. Subjobs can finish before aggregation. Fetch the archive
through /result and handle 202; resultUrl is optional and is not a reliable
readiness signal. Page GET /jobs?batch=... using startKey to inspect children.
For new saved workflows use the template/run API under /pipelines: read the
current pipeline graph contract, validate the proposed run with
POST /pipelines/validate, submit with POST /pipelines/submit (required
name, bindings, and one of templateId/pipeline), and poll
GET /pipelines/runs/{run_id}. Its statuses are lowercase and separate from job
statuses. The legacy /submit-pipeline and /run-pipeline remain documented;
API reference gives their actual required fields.
MCP alternative
Connect to https://mcp.tamarind.bio/mcp with OAuth 2.1 or the x-api-key header.
The official guide confirms submitJob, submitBatch, getJobs, getResult,
uploadFile, and getFiles. Read the connected server's tools/list schemas
before using signatures or interpreting result envelopes.
If the connection advertises discovery/validation helpers such as
getAvailableTools, getJobSchema, or validateJob, use their current schemas.
Extra helpers, filter vocabularies, submitBatch(fromJob=...), and upload-through-
MCP variants are not guaranteed by the public guide. This review's anonymous
tools/list request returned 401, so their current contracts were not verified.
Use the documented REST equivalents when needed.
Recovery
HTTP auth failures differ by route: classic endpoints can answer 400, jobs can answer 401 or gateway 403, and usage can answer 401. A 403 is not proof of a budget error. Check status and the actual response body before changing settings. Submission errors may be JSON or plain text regardless of Content-Type.
A timeout/5xx on submit does not prove that nothing queued. Look up the persisted
name before retrying; for campaigns use POST /jobs/search with up to 1,000 names
per request. Respect rate limits and avoid one-request-per-job polling at scale.
A 413 rejects the oversized request before creating jobs; split the body or upload
file content separately. DELETE /delete-job is a soft delete: it hides the
job and leaves stored result files intact.
Reference files
API reference: endpoint shapes, validation, pagination, authentication differences, and legacy/new pipeline boundaries.
Tool catalog: schema interpretation and discovery.
Examples: current catalog-backed settings examples and tool-specific caveats, explicitly bounded by verification scope.
Workflows: executable HTTP recipes with local mocked verification; no authenticated scientific jobs were run for this review.
Files
- ATTRIBUTION.mdAdded by AutoGineer910 B
- LICENSELicence file added by AutoGineer1.0 KiB
- SKILL.md13.4 KiB
- references/api_reference.md12.1 KiB
- references/examples.md5.3 KiB
- references/tool_catalog.md3.9 KiB
- references/workflows.md11.4 KiB
references/api_reference.md
Tamarind Bio REST API reference
Reviewed 2026-09-30 against the current OpenAPI, REST guide, and public catalog. These are documentation checks, not authenticated endpoint tests.
All paths below are relative to https://app.tamarind.bio/api, or the user's
organization deployment's /api base. Requests use x-api-key except public
catalog discovery. Do not send the key when downloading a signed storage URL.
Endpoint map
| Method | Path | Request and response |
|---|---|---|
| GET | /tools-catalog | Public catalog; also at host-level /tools.json. Optional type/tag filters; tools contains public types and conditional required settings. |
| GET | /tools | Account-scoped array with name, descriptions, trimmed settings, and optional output metadata. custom=true selects legacy custom tools only. |
| GET | /tools/{name}/schema | JSON Schema for the settings object. Optional version pins a custom build. 404 covers missing, inaccessible, and mid-deploy tools. |
| POST | /validate-job | type, object/array settings; optional jobName (single), jobNames (array), version. HTTP 200 contains a valid verdict. |
| POST | /submit-job | jobName, type, object settings; optional version, projectTag. 200 is a plain-text confirmation. |
| POST | /submit-batch | batchName, type, array settings; optional parallel jobNames, version, projectTag. 200 schema has batchName, jobs, totalJobs. |
| GET | /jobs | Exact lookup or cursor-paginated listing; shapes below. |
| POST | /jobs/search | jobNames (up to 1,000), optional organization, includeSubjobs, jobEmail. Returns jobs, notFound, statuses. |
| POST | /result | jobName; optional fileName, pdbsOnly, jobEmail, noAsync. 200 JSON string URL or 202 preparing object. |
| POST | /stop-job | jobName; stops queued/running work, including stoppable batch children. Returns message, stoppedCount. |
| DELETE | /delete-job | jobName; soft-deletes the job/batch children from listings. Result files remain. Unknown name: 400. |
| PUT | /upload/{filename} | Binary body; optional folder. This route redirects to the upload service; follow redirects. |
| GET | /files | Optional folder, includeFolders=true; complete array of name strings for that folder, no pagination. |
| DELETE | /delete-file | Query filePath or folder. A folder request removes its files. |
| GET | /usage-statistics | statistic=hours|weighted_hours|jobs, scope=user|organization; details below. |
| POST | /submit-pipeline | Legacy inline execution: jobName, stages, conditional initialInputs, optional projectTag. |
| POST | /run-pipeline | Legacy saved execution: jobName, pipelineName, nonempty initialInputs array, optional version. |
Discovery and validation
/tools is an array, not {"tools": [...]}. Each trimmed parameter has name
and required; optional metadata includes type, description, default,
options, extension, and list. Filter built-ins client-side; arbitrary search
query parameters are not documented. /tools?custom=true does not discover
current custom deployments: use the deployed name and /tools/{name}/schema.
The latter is a JSON Schema document, not the trimmed parameter array and not
an MCP parameters envelope. Domain strings may carry x-tamarind-type. Numeric
strings and sequence normalization are not fully checked by JSON Schema bounds;
use /validate-job for domain validation and file existence. Keep version
consistent across schema, validate, and submit for a pinned custom build.
For valid credentials, /validate-job returns 200 whether valid or invalid:
Single success:
{"valid": true, "normalized": {...}}. Currentnormalizedcontains cleaned settings and defaults intended for submission. Inspect these defaults for model/sample-count changes, then submit that settings object.Single failure:
valid: false,error, possiblymissing_fieldsandcode.missing_fieldsmay be empty despite failure. Do not interpret quota/policy codes as sequence-format errors.job_namereflects name normalization whenjobNamewas supplied;job_name_changedindicates a change. Persist this stored name.The guide additionally documents
unrecognized_settings: correct every typo, even ifvalidis true. Unknown settings sent directly to submit are carried through and may silently leave the intended optional field at its default.For array input, inspect presence of
results, not justvalid.resultsholds one verdict per row, with itsindex, and top-levelvalidaggregates all rows. Ifresultsis absent, the whole request was rejected and top-levelerrorexplains why. Array validation supports at most 1,000 rows per call and approximately 4.5 MB; large normalized responses can also require smaller chunks. Validate all rows, not a representative sample.
Field validation does not reserve compute or re-check every organization policy, queue constraint, or custom-tool deployment state. A valid verdict can still be rejected at submission. Do not manually add internal routing settings.
Names, projects, and batches
Names are sanitized: whitespace becomes _ and characters outside
[A-Za-z0-9_.-] are removed. Send an already-clean, nonempty name of at most 200
characters so exact job lookup works; this is a compatibility limit, not a
100-character submit validator. Parse the actual name from the successful
<stored-name> submitted to queue. response. On a lost response, check that
persisted clean name before retrying.
projectTag accepts an organization project ID or name. It is normally optional
but required under an organization's project policy. A refusal may include
availableProjects; absence does not establish that no projects exist.
Batch settings must be a nonempty array. If jobNames is supplied it must have
the same length, with no duplicates or child name equal to the parent. Stored
child names may be prefixed/rewritten; enumerate /jobs?batch=... rather than
assuming names. The batch cap is 30,000 jobs after design fan-out, plus a
separate approximately 4.5 MB request cap. The older {tool, jobs:[...]}
alternative is not the current documented contract. Do not rely on undocumented
weightedHoursBudget, maxRuntimeSeconds, or gpuType keys for limits.
Jobs, status, and pagination
GET /jobs query fields: jobName, batch, limit (1–1,000; default 1,000),
startKey, batchOnly, includeSubjobs, includeSequences, organization, and
jobEmail. Use lowercase string true for boolean query values.
Own-account exact
jobName: row directly, without ajobswrapper.Listing or
batch:{"jobs": [...], "statuses": {...}, "startKey": ...}. Follow nonemptystartKeyeven when a page is short. Batch children paginate.organization=trueexact-name collisions have a legacy exceptional response shape; prefer a known owner withjobEmail./jobs/searchinstead selects the newest visible match for each requested name, not every member's match.includeSubjobs=trueincludes children in ordinary listings.batchOnly=trueselects parents.includeSequencesis retained for compatibility; do not assume it controlsSettingspresence.Page
statusesis generally page-local, but organization queries may return a collection-wide tally. Do not sum those tallies to infer batch completion.
Rows require JobName, JobStatus, Created. Other fields are optional:
Type, Started, Completed, Batch, WeightedHours, Settings, Score,
User, batchStatus, AggregationError, and result/aggregation metadata.
Settings can be JSON text or a structured value; Score may be a string,
number, or null. Do not assume every successful tool emits pLDDT or any score.
/jobs/search omits large settings/scores/errors and result URLs; fetch individual
details only when needed.
Single-job terminal states are Complete, Stopped, Failed. Handle legacy
Deleted and lookup errors; a deleted/missing job need not remain pollable.
A batch parent uses batchStatus: Running, Aggregating, Complete, Stopped,
AggregationFailed. Discriminate by Type == "batch"/batchStatus, not
statuses, which also appears for a single job.
The guide and schema disagree about whether compatibility rows expose a signed
resultUrl; the schema makes it optional. Use /result for all downloads.
Results and uploads
Check HTTP status before decoding /result:
200:
response.json()is the signed URL string; download with a separate GET, no API key. File requests return that file instead of an archive.202: object with
status: "preparing",jobName, andmessage; wait and repeat the same result call. Do not resubmit compute.noAsync: truechanges a not-yet-built archive to a 400 instead of 202.A result request can wait up to approximately 290 seconds for archive assembly; use an adequate read timeout and persist the job name to resume later.
fileName: "output.log"is permitted for failed/stopped jobs before completion.
Upload uses Content-Type: application/octet-stream; curl -L --data-binary
follows the documented upload redirect. The schema describes success fields
message, fileUrl, signedUrl, but verify registered names with /files and
pass the relative stored path (target.pdb or inputs/target.pdb) to a tool.
The current guide says a redundant account-email prefix is stripped. Prefer the
relative path; do not construct internal storage keys. Prior results use
JobName/path/to/file.ext. Inline text can cause side effects/large bodies during
validation; prefer uploaded paths.
Usage and pipeline boundaries
Usage defaults to statistic=hours, scope=organization. The response has
users (each with email, total, per-tool tools), lastUpdated, and
metadata.statistic/metadata.scope. Unauthorized organization scope can narrow
to the user: read the applied scope. Weighted hours depend on compute resources;
inspect the current account report rather than assuming a per-job price.
Legacy /submit-pipeline requires jobName and stages; every stage requires
task and nonempty toolSettings keyed by tool name. initialInputs is required
when the first stage uses the "pipe" placeholder; file/sequence inputs must
match that stage. Filter names must be in the tool's published filterMetrics.
/run-pipeline requires jobName, pipelineName, and initialInputs (array of
uploaded PDB filenames or raw sequences with unique basenames), not an inputs
alias. Both return plain-text submission confirmations.
For new integrations, consult the pipeline guide:
POST /pipelines/templates creates a template; POST /pipelines/validate checks
the same run body accepted by POST /pipelines/submit: required name,
bindings, and exactly one of templateId or inline pipeline, plus optional
version and permitted per-node overrides. idempotencyKey enables safe retries
on this newer submit surface. Poll
GET /pipelines/runs/{run_id} with its lowercase statuses:
queued, running, finished, partial, stopped, failed. Terminal partial
runs need per-step inspection. Pipeline runs are not visible through /jobs.
Check the live spec for graph/binding shapes and account feature availability.
Errors and safe retries
Classic auth rejection is often 400 recovery JSON; jobs use 401 problem JSON or an earlier gateway 403; usage can return 401. A 403 can also mean policy, quota, or tool access. Parse the actual error; do not treat every 403 as a budget cap. Exact unknown job lookup is 400, not a guaranteed 404.
Submit 400 errors may be JSON or plain text, independent of Content-Type. Ordinary duplicate-name checks return 400; concurrent locks can return 409. A 413 means the request was rejected before jobs were created (body shape varies by deployment); split it or upload files. For timeout/5xx ambiguity, inspect the stored name before retrying a submit. Back off on rate limits, and use batched status/validation requests instead of flooding per-job calls.
Requirements and compatibility
Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta
“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.
Needs: Needs an MCP server, Needs network access, Needs an API key
The author says: 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 (these recipes use HTTP directly). Network access required. Optional MCP server at mcp.tamarind.bio/mcp for agent hosts.
Security
No issues found by our static scan· No issues found
A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.
Attribution and licence
- Created by
- Tamarind Bio
- Publisher
- K-Dense (Community)
- Distributed by
- K-Dense
- Source
- K-Dense-AI/scientific-agent-skills · skills/tamarind · commit a25cf9e
- Licence
- MIT License (redistribution allowed)
- LICENSE (added by AutoGineer from LICENSE.md)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
AutoGineer is not affiliated with or endorsed by Tamarind Bio or K-Dense.
Download ZIP
The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download tamarind.zip