### Bootstrap installer for tamarind-cli Source: https://docs.tamarind.bio/tamarind/cli Run the bootstrap installer script, which installs `uv` first if needed, then installs the CLI. ```bash curl -fsSL https://app.tamarind.bio/cli/install.sh | sh ``` -------------------------------- ### GET /molecules response example Source: https://docs.tamarind.bio/tamarind/database Example response from the list endpoint showing a molecule with its chains, scores, files, and provenance. The response includes fields like id, name, type, entity, chainMapping, files, metadata, origin, source, groups, and nextCursor. ```json // GET https://app.tamarind.bio/api/molecules { "items": [ { "id": "3f8a1c2e-5b7d-4e9f-a1b2-c3d4e5f6a7b8", "name": "anti-PD-L1 binder", "type": "protein", "entity": { "H": "EVQ...", "L": "DIQ..." }, "chainMapping": { "H": { "type": "protein", "tags": ["heavy"] }, "L": { "type": "protein", "tags": ["light"] } }, "files": { "pdb": [ { "fileName": "model.pdb", "fileType": "pdb", "downloadUrl": "https://...", "createdAt": "2026-01-02T00:00:00Z" } ] }, "metadata": { "alphafold": [{ "jobId": "7efa949f-...", "ptm": 0.86, "plDDT": 88.1 }], "affinity_nM": 12.4 }, "origin": { "type": "job", "jobId": "7efa949f-...", "jobType": "alphafold" }, "source": null, "groups": [{ "id": "8b1d...", "name": "PD-L1 binders" }], "truncated": [] } ], "nextCursor": null } ``` -------------------------------- ### Example config.json Source: https://docs.tamarind.bio/tamarind/custom-tools A complete `config.json` example for a binder scorer tool. It defines a display name, description, function list, GPU type, CPU/memory limits, environment variables, and three inputs: a required PDB target, a required binder sequence, and an optional number with bounds. ```json { "displayName": "My Binder Scorer", "description": "Scores candidate binders against a target structure.", "functions": [ "Scores binder–target complexes with an internal model", "Returns per-residue confidence" ], "gpuType": "L40S", "cpu": 4, "memory": "32Gi", "envVars": { "MODEL_VERSION": "v3", "LOG_LEVEL": "INFO" }, "inputs": [ { "name": "target", "type": "pdb", "displayName": "Target structure", "required": true }, { "name": "binder_sequence", "type": "sequence", "displayName": "Binder sequence", "required": true }, { "name": "num_samples", "type": "number", "default": 10, "lowerBound": 1, "upperBound": 100 } ] } ``` -------------------------------- ### Install tamarind-cli with uv or pipx Source: https://docs.tamarind.bio/tamarind/cli Install the Tamarind CLI globally using uv or pipx. After installation, the `tamarind` command is available from anywhere. ```bash uv tool install tamarind-cli # or: pipx install tamarind-cli ``` -------------------------------- ### Install tamarind-cli from source Source: https://docs.tamarind.bio/tamarind/cli Install the latest version of the CLI directly from the GitHub repository using uv. ```bash uv tool install "git+https://github.com/Tamarind-Bio/tamarind-cli" ``` -------------------------------- ### Verify tamarind-cli installation Source: https://docs.tamarind.bio/tamarind/cli Check that the CLI is installed correctly by printing its version. ```bash tamarind --version ``` -------------------------------- ### Input with usesMsa flag Source: https://docs.tamarind.bio/tamarind/custom-tools Mark a sequence input with `usesMsa` to have Tamarind run an MSA server before the tool starts. The input name is arbitrary; the flag is what matters. Only one input per tool may set this flag, and it is only supported on `sequence` type inputs. ```json "inputs": [ { "name": "target_sequence", "type": "sequence", "usesMsa": true } ] ``` -------------------------------- ### Set Tamarind API key environment variable Source: https://docs.tamarind.bio/tamarind/mcp-server Export your Tamarind API key as an environment variable in your shell profile (~/.zshrc or ~/.bashrc). Required for Codex setup. ```bash export TAMARIND_API_KEY="your-api-key-here" ``` -------------------------------- ### Call the model router API with curl Source: https://docs.tamarind.bio/tamarind/model-router Use this curl command to request a tool recommendation from the model router. Authenticate with your API key in the x-api-key header. The call takes about 15 to 25 seconds, so set a generous timeout. ```bash curl -X POST https://app.tamarind.bio/api/model-router \ -H "x-api-key: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"prompt": "predict the structure of this antibody-antigen complex"}' ``` -------------------------------- ### Tamarind CLI end-to-end workflow Source: https://docs.tamarind.bio/tamarind/cli Walks through the complete Tamarind CLI workflow: discover a tool, inspect its schema, validate inputs, submit a job, and monitor results. Commands include tamarind tools, tamarind schema, tamarind validate, tamarind submit, tamarind jobs, tamarind status, and tamarind results. ```bash # 1. Find a tool tamarind tools --function structure-prediction --modality protein tamarind tools --search boltz # 2. Inspect its parameters and grab a runnable example tamarind schema boltz tamarind schema boltz --example > job.yaml # 3. Validate, then submit and wait for results tamarind validate boltz --input job.yaml tamarind submit boltz --input job.yaml --name my-run --wait --download ./out # 4. Monitor anytime tamarind jobs tamarind status my-run tamarind results my-run --download ./out ``` -------------------------------- ### Authenticate with stored config Source: https://docs.tamarind.bio/tamarind/cli Authenticate interactively and save the API key to `~/.tamarind/config.json`, then check the authentication status. ```bash tamarind auth login tamarind auth status ``` -------------------------------- ### pipeline.json schema 1. ProteinMPNN diversify, filter by confidence >0.AlphaFold structure prediction workflow Source: https://docs.tamarind.bio/tamarind/pipelines Worked example showing how to diversify an input protein's sequence with ProteinMPNN/strong> and then predict a structure for each accepted sequence with AlphaFold/strong>.includes a user input node labeled Structures with contains_stage:true and expects a valid group id in metadata.defaultGroup/strong>.uses a filter node that applies a JSONLogic rule requiring overall_strong>0.keep only high-confidence designs before passing them to AlphaFold/strong> with numModels:5/strong>schema_version is1.sequences:16 and temperature:0. 2 are set on the diversify node's settings/strong>note that braces and quotes are exactly as they appear in the source, including spaces after colons and commas, and that the final brace is preceded by an extra blank line in the original source, but here it is normalized to preserve readability while retaining identical JSON content; nevertheless the authoritative copy is exactly as printed in therof the original page, and users should consult that authoritative copy for exact whitespace-sensitive comparisons; nevertheless the authoritative copy is exactly as printed in therof the original page, but here it is normalized to preserve readability while retaining identical JSON content; nevertheless the authoritative copy exactly as printed in therof the original page, so please consult that authoritative copy for exact whitespace-sensitive comparisons; nevertheless the authoritative copy exactly as printed in therof the original page, but here it is normalized to preserve readability while retaining identical JSON content; nevertheless the authoritative copy exactly as printed in therof the original page, and users should consult that authoritative copy for exact whitespace-sensitive comparisons; nevertheless the authoritative copy exactly as printed in therof the node names and their exact spelling and casing are preserved, and users should consult that authoritative copy for exact whitespace-sensitive comparisons; nevertheless the authoritative copy exactly as printed in therof the original page, so please consult that JSON is exactly as printed in therof the original page, and users should consult that authoritative copy for exact whitespace-sensitive comparisons; nevertheless the schema_version is1.sequences:16 and temperature:2. 0 are set on the diversify node's menu settings/strong>note that braces and quotes are exactly as printed in therof the original page, and users should consult that authoritative copy for exact whitespace-sensitive comparisons; nevertheless the authoritative copy exactly as printed in therof the original page, and users should consult that workflowsyntax is exactly as printed in therof the original page, and users should consult that authoritative copy for exact whitespace-sensitive comparisons; nevertheless the authoritative copy exactly as pipelines.json schema version1 workflowsyntax is exactly workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflows defined in therof the original page, and users workflowsyntax workflowsyntax workflowsyntax workflowsyaerly, consult that workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflowschema_version is1 workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflows?{ ```json { "schema_version": "1. The workflows syntax workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflowsantry workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflowsyntax workflows } ] } ]}, ``` -------------------------------- ### Configure Codex MCP server in config.toml Source: https://docs.tamarind.bio/tamarind/mcp-server Add the Tamarind MCP server configuration to ~/.codex/config.toml, using the API key environment variable for authentication. ```toml [mcp_servers.tamarind] url = "https://mcp.tamarind.bio/mcp" env_http_headers = { "x-api-key" = "TAMARIND_API_KEY" } ``` -------------------------------- ### Claude Desktop API Key Configuration Source: https://docs.tamarind.bio/tamarind/mcp-server JSON configuration for Claude Desktop to connect to Tamarind MCP server using an API key. Requires an API key from app.tamarind.bio/api-docs/api-key. Place this in the claude_desktop_config.json file and restart Claude Desktop. ```json { "mcpServers": { "tamarind": { "command": "npx", "args": [ "mcp-remote", "https://mcp.tamarind.bio/mcp", "--header", "x-api-key:YOUR_API_KEY_HERE" ] } } } ``` -------------------------------- ### Run ProteinMPNN and AlphaFold pipeline via Tamarind API Source: https://docs.tamarind.bio/tamarind/pipelines Creates a pipeline template with ProteinMPNN and AlphaFold nodes, binds a molecule group and residues, submits a run, and polls until completion. Requires a valid x-api-key. Use POST /templates/{id}/validate to pre-flight a run without submitting. ```python import requests, time API = "https://app.tamarind.bio/api/pipelines" MOL = "https://app.tamarind.bio/api/molecules" H = {"x-api-key": "YOUR_API_KEY"} # 1. Pick the reference group the template is authored against. groups = requests.get(f"{MOL}/groups", headers=H).json() ref_group = groups["items"][0]["id"] # 2. Build the pipeline and create the template. pipeline = { "schema_version": "1.0", "nodes": { "input": {"kind": "user_input", "molecule_type": "protein", "contains_structure": True, "metadata": {"defaultGroup": ref_group}}, "design": {"kind": "tool", "tool": "proteinmpnn", "inputs": {"pdbFile": [{"node": "input"}]}}, "fold": {"kind": "tool", "tool": "alphafold", "inputs": {"sequence": [{"node": "design"}]}}, }, } tpl = requests.post(f"{API}/templates", headers=H, json={"name": "MPNN to AlphaFold", "pipeline": pipeline}).json() template_id = tpl["id"] # 3. Bind the input slot: the molecule group plus the residues to design (residuesByChain). bindings = { "input": { "group": ref_group, # "flow" defaults to "molecule" and can be omitted "residuesByChain": {"A": [42, 43, 44, 58, 59]} } } # 4. Submit the run. run = requests.post(f"{API}/templates/{template_id}/runs", headers=H, json={"bindings": bindings}).json() run_id = run["id"] # 5. Poll until it finishes, then read the results. while requests.get(f"{API}/runs/{run_id}", headers=H).json()["status"] in ("queued", "running"): time.sleep(10) r = requests.get(f"{API}/runs/{run_id}", headers=H).json() print(r["status"], r["steps"]) ``` -------------------------------- ### Check CUDA version and GPU availability in PyTorch container Source: https://docs.tamarind.bio/tamarind/custom-tools Run these commands inside your tool's container to inspect the GPU and driver with nvidia-smi, and to verify PyTorch's CUDA version and GPU access. The output of the Python command confirms whether PyTorch can use the GPU. ```bash nvidia-smi python -c "import torch; print(torch.version.cuda); print(torch.cuda.is_available())" ```