> ## Documentation Index
> Fetch the complete documentation index at: https://proto.evodesign.org/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Unified Sequence Fetch

> The `sequence-fetch` tool is a multi-source orchestrator that resolves a batch of heterogeneous sequence and structure requests into a uniform result. Each request names a gene, protein, or RNA target and the molecule types to retrieve (protein, genomic DNA, coding DNA, transcript RNA, inferred pre-mRNA, or PDB structure), optionally pinned by accession overrides. It federates over [NCBI Entrez](https://www.ncbi.nlm.nih.gov/search/), [UniProt](https://www.uniprot.org/), and [RCSB PDB](https://www.rcsb.org/), returning per-request sequences, structure metadata, resolved identifiers, and status.

<div class="page-hero">
  <img class="page-hero-banner" src="https://proto-bio.github.io/proto-assets/images/tool/sequence_fetch/hero.png" alt="Unified Sequence Fetch" />
</div>

<p class="entity-disclaimer">This toolkit is open source. Any third-party models, product names, or trademarks referenced are the property of their respective owners, and Proto is not affiliated with them.</p>

<hr class="entity-rule" />

<input type="radio" name="tab-sequence-fetch" id="none-sequence-fetch" class="tab-radio-input" />

<input type="radio" name="tab-sequence-fetch" id="paper-sequence-fetch" class="tab-radio-input" defaultChecked />

<input type="radio" name="tab-sequence-fetch" id="cite-sequence-fetch" class="tab-radio-input" />

<input type="radio" name="tab-sequence-fetch" id="source-sequence-fetch" class="tab-radio-input" />

<input type="radio" name="tab-sequence-fetch" id="notebook-sequence-fetch" class="tab-radio-input" />

<input type="radio" name="tab-sequence-fetch" id="proto-sequence-fetch" class="tab-radio-input" />

<div class="tool-tab-bar">
  <span class="tool-tab-wrap"><label for="paper-sequence-fetch" class="tool-tab tab-open badge-paper"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z" /><polyline points="14 2 14 8 20 8" /><line x1="16" y1="13" x2="8" y2="13" /><line x1="16" y1="17" x2="8" y2="17" /><polyline points="10 9 9 9 8 9" /></svg> Publication</label><label for="none-sequence-fetch" class="tool-tab tab-close badge-paper"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z" /><polyline points="14 2 14 8 20 8" /><line x1="16" y1="13" x2="8" y2="13" /><line x1="16" y1="17" x2="8" y2="17" /><polyline points="10 9 9 9 8 9" /></svg> Publication</label></span> <span class="tool-tab-wrap"><label for="cite-sequence-fetch" class="tool-tab tab-open badge-cite"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 21c3 0 7-1 7-8V5c0-1.25-.756-2.017-2-2H4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2 1 0 1 0 1 1v1c0 1-1 2-2 2s-1 .008-1 1.031V20c0 1 0 1 1 1z" /><path d="M15 21c3 0 7-1 7-8V5c0-1.25-.757-2.017-2-2h-4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2h.75c0 2.25.25 4-2.75 4v3c0 1 0 1 1 1z" /></svg> Cite</label><label for="none-sequence-fetch" class="tool-tab tab-close badge-cite"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 21c3 0 7-1 7-8V5c0-1.25-.756-2.017-2-2H4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2 1 0 1 0 1 1v1c0 1-1 2-2 2s-1 .008-1 1.031V20c0 1 0 1 1 1z" /><path d="M15 21c3 0 7-1 7-8V5c0-1.25-.757-2.017-2-2h-4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2h.75c0 2.25.25 4-2.75 4v3c0 1 0 1 1 1z" /></svg> Cite</label></span> <span class="tool-tab-wrap"><label for="source-sequence-fetch" class="tool-tab tab-open badge-source"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="16 18 22 12 16 6" /><polyline points="8 6 2 12 8 18" /></svg> Tool Source</label><label for="none-sequence-fetch" class="tool-tab tab-close badge-source"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="16 18 22 12 16 6" /><polyline points="8 6 2 12 8 18" /></svg> Tool Source</label></span> <span class="tool-tab-wrap"><label for="notebook-sequence-fetch" class="tool-tab tab-open badge-notebook"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z" /><path d="M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z" /></svg> Open as Notebook</label><label for="none-sequence-fetch" class="tool-tab tab-close badge-notebook"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z" /><path d="M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z" /></svg> Open as Notebook</label></span> <span class="tool-tab-wrap"><label for="proto-sequence-fetch" class="tool-tab tab-open badge-proto"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M13 2L3 14h9l-1 8 10-12h-9l1-8z" /></svg> Open on Proto</label><label for="none-sequence-fetch" class="tool-tab tab-close badge-proto"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M13 2L3 14h9l-1 8 10-12h-9l1-8z" /></svg> Open on Proto</label></span>
</div>

<a href="https://doi.org/10.1093/nar/gkab1135" target="_blank" class="tab-panel paper-panel" data-tab="paper-sequence-fetch">
  <div class="paper-info">
    <div class="paper-title">GenBank</div>
    <div class="paper-meta">Eric W Sayers, Mark Cavanaugh, ... Ilene Karsch-Mizrachi</div>
    <div class="paper-meta paper-venue">Nucleic Acids Research (2022)</div>
  </div>

  <span class="panel-goto-btn pub-goto-btn"><span><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z" /><polyline points="14 2 14 8 20 8" /><line x1="16" y1="13" x2="8" y2="13" /><line x1="16" y1="17" x2="8" y2="17" /><polyline points="10 9 9 9 8 9" /></svg> Read paper</span></span>
</a>

<div class="tab-panel cite-panel" data-tab="cite-sequence-fetch">
  <div class="cite-code-wrap">
    ```bibtex theme={null}
    @article{sayers2022genbank,
      title={GenBank},
      author={Sayers, Eric W and Cavanaugh, Mark and Clark, Karen and Pruitt, Kim D and Schoch, Conrad L and Sherry, Stephen T and Karsch-Mizrachi, Ilene},
      journal={Nucleic Acids Research},
      volume={50},
      number={D1},
      pages={D161--D164},
      year={2022},
      publisher={Oxford University Press},
      doi={10.1093/nar/gkab1135}
    }

    @article{theuniprotconsortium2025,
      title={UniProt: the Universal Protein Knowledgebase in 2025},
      author={The UniProt Consortium},
      journal={Nucleic Acids Research},
      volume={53},
      number={D1},
      pages={D609--D617},
      year={2025},
      publisher={Oxford University Press},
      doi={10.1093/nar/gkae1010}
    }

    @article{berman2000pdb,
      title={The Protein Data Bank},
      author={Berman, Helen M and Westbrook, John and Feng, Zukang and Gilliland, Gary and Bhat, T N and Weissig, Helge and Shindyalov, Ilya N and Bourne, Philip E},
      journal={Nucleic Acids Research},
      volume={28},
      number={1},
      pages={235--242},
      year={2000},
      publisher={Oxford University Press},
      doi={10.1093/nar/28.1.235}
    }
    ```
  </div>

  <span class="panel-goto-btn cite-copy-btn"><span><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 21c3 0 7-1 7-8V5c0-1.25-.756-2.017-2-2H4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2 1 0 1 0 1 1v1c0 1-1 2-2 2s-1 .008-1 1.031V20c0 1 0 1 1 1z" /><path d="M15 21c3 0 7-1 7-8V5c0-1.25-.757-2.017-2-2h-4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2h.75c0 2.25.25 4-2.75 4v3c0 1 0 1 1 1z" /></svg> Copy citation</span></span>
</div>

<a href="https://github.com/evo-design/proto-tools/tree/47e34afa5ea240a3b406e323dc38aa5dc85f223e/proto_tools/tools/database_retrieval/sequence_fetch" target="_blank" class="tab-panel source-panel" data-tab="source-sequence-fetch">
  <div class="source-info">
    <img src="https://github.com/evo-design.png?size=40" class="source-avatar" width="36" height="36" />

    <span class="source-path">evo-design/proto-tools<span class="source-subpath">/proto\_tools/tools/database\_retrieval/sequence\_fetch</span></span>
  </div>

  <span class="panel-goto-btn source-goto-btn"><span><svg width="14" height="14" viewBox="0 0 24 24" fill="currentColor"><path d="M12 0C5.37 0 0 5.37 0 12c0 5.31 3.435 9.795 8.205 11.385.6.105.825-.255.825-.57 0-.285-.015-1.23-.015-2.235-3.015.555-3.795-.735-4.035-1.41-.135-.345-.72-1.41-1.23-1.695-.42-.225-1.02-.78-.015-.795.945-.015 1.62.87 1.845 1.23 1.08 1.815 2.805 1.305 3.495.99.105-.78.42-1.305.765-1.605-2.67-.3-5.46-1.335-5.46-5.925 0-1.305.465-2.385 1.23-3.225-.12-.3-.54-1.53.12-3.18 0 0 1.005-.315 3.3 1.23.96-.27 1.98-.405 3-.405s2.04.135 3 .405c2.295-1.56 3.3-1.23 3.3-1.23.66 1.65.24 2.88.12 3.18.765.84 1.23 1.905 1.23 3.225 0 4.605-2.805 5.625-5.475 5.925.435.375.81 1.095.81 2.22 0 1.605-.015 2.895-.015 3.3 0 .315.225.69.825.57A12.02 12.02 0 0024 12c0-6.63-5.37-12-12-12z" /></svg> View source</span></span>
</a>

<a href="https://github.com/evo-design/proto-tools/blob/47e34afa5ea240a3b406e323dc38aa5dc85f223e/proto_tools/tools/database_retrieval/sequence_fetch/examples/example.ipynb" target="_blank" class="tab-panel notebook-panel" data-tab="notebook-sequence-fetch">
  <div class="notebook-info">
    <span class="notebook-icon">
      <svg width="40" height="40" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">
        <path d="M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z" />

        <path d="M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z" />
      </svg>
    </span>

    <span class="notebook-label">Open Notebook</span>
  </div>

  <span class="panel-goto-btn notebook-goto-btn"><span><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z" /><path d="M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z" /></svg> Open notebook</span></span>
</a>

<div class="tab-panel proto-panel" data-tab="proto-sequence-fetch">
  <div class="proto-info">
    <div class="proto-cloud">
      <svg class="proto-cloud-bg" viewBox="0 0 640 512" xmlns="http://www.w3.org/2000/svg">
        <path d="M0 336c0 79.5 64.5 144 144 144H512c70.7 0 128-57.3 128-128c0-61.9-44-113.6-102.4-125.4c4.1-10.7 6.4-22.4 6.4-34.6c0-53-43-96-96-96c-19.7 0-38.1 6-53.3 16.2C367 64.2 315.3 32 256 32C167.6 32 96 103.6 96 192c0 2.7 .1 5.4 .2 8.1C40.2 219.8 0 273.2 0 336z" />
      </svg>

      <img noZoom src="https://mintcdn.com/bio-pro/KVh0EKV-IKblvXR8/assets/logo/evo-logo-light.svg?fit=max&auto=format&n=KVh0EKV-IKblvXR8&q=85&s=0cb66034ba45618505501aee6ea5f5c1" class="proto-panel-logo block dark:hidden" alt="Proto" width="198" height="151" data-path="assets/logo/evo-logo-light.svg" />

      <img noZoom src="https://mintcdn.com/bio-pro/KVh0EKV-IKblvXR8/assets/logo/evo-logo-dark.svg?fit=max&auto=format&n=KVh0EKV-IKblvXR8&q=85&s=2c9e23a14635e60384a434e220788f54" class="proto-panel-logo hidden dark:block" alt="Proto" width="198" height="151" data-path="assets/logo/evo-logo-dark.svg" />
    </div>
  </div>

  <div class="proto-actions">
    <a href="https://proto.evodesign.org/tools/sequence-fetch" target="_blank" class="proto-action-btn"><span>Multi-source Sequence Fetch</span><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="7" y1="17" x2="17" y2="7" /><polyline points="7 7 17 7 17 17" /></svg></a>
  </div>
</div>

<div class="entity-contributors"><span class="entity-contributors-label">Toolkit contributors</span><span class="entity-contributors-people"><a class="entity-contributor" href="https://github.com/dguo8412" target="_blank" rel="noopener" title="dguo8412: 16 commits"><img noZoom class="entity-contributor-avatar" src="https://avatars.githubusercontent.com/u/46211285?v=4&s=64" alt="" loading="lazy" /><span class="entity-contributor-login">dguo8412</span></a><a class="entity-contributor" href="https://github.com/bviggiano" target="_blank" rel="noopener" title="bviggiano: 15 commits"><img noZoom class="entity-contributor-avatar" src="https://avatars.githubusercontent.com/u/21143637?v=4&s=64" alt="" loading="lazy" /><span class="entity-contributor-login">bviggiano</span></a><a class="entity-contributor" href="https://github.com/leba01" target="_blank" rel="noopener" title="leba01: 1 commit"><img noZoom class="entity-contributor-avatar" src="https://avatars.githubusercontent.com/u/124846286?v=4&s=64" alt="" loading="lazy" /><span class="entity-contributor-login">leba01</span></a></span></div>

| Function               | Description                                                                |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| ---------------------- | -------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `run_sequence_fetch()` | Fetch DNA, RNA, protein, and structure records from NCBI, UniProt, and PDB | <a href="#api-run-sequence-fetch" class="func-table-btn func-api-btn"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H19a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1H6.5a1 1 0 0 1 0-5H20" /></svg> Docs</a> <a href="https://github.com/evo-design/proto-tools/blob/47e34afa5ea240a3b406e323dc38aa5dc85f223e/proto_tools/tools/database_retrieval/sequence_fetch/sequence_fetch.py#L511" target="_blank" class="func-table-btn func-source-btn"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="16 18 22 12 16 6" /><polyline points="8 6 2 12 8 18" /></svg> Source</a> |

<Note>
  **License:** Unified Sequence Fetch's own code is licensed under MIT, and it federates over bundled data sources and components, each under its own license terms.

  Bundled dependencies, each under its own license:

  * [NCBI Entrez](https://bio-pro.mintlify.app/tools/database-retrieval/ncbi): U.S. Government public domain
  * [UniProt](https://bio-pro.mintlify.app/tools/database-retrieval/uniprot): CC-BY-4.0
  * [RCSB PDB](https://bio-pro.mintlify.app/tools/database-retrieval/pdb): CC0-1.0

  Review each source's terms before commercial use or redistribution.
</Note>

## Background

This tool wraps three public databases rather than a single predictive model, so it has no single primary paper. The underlying sources are [GenBank](https://www.ncbi.nlm.nih.gov/genbank/) ([Sayers et al., 2022](https://doi.org/10.1093/nar/gkab1135)), [UniProt](https://www.uniprot.org/) ([The UniProt Consortium, 2025](https://doi.org/10.1093/nar/gkae1010)), and the [RCSB Protein Data Bank](https://www.rcsb.org/) ([Berman et al., 2000](https://doi.org/10.1093/nar/28.1.235)). Internally, `SequenceFetchInput` wraps a `list[SequenceFetchRequest]`, and each request is resolved independently by molecule type with deterministic, priority-based routing where provided identifiers are consulted before a name-and-organism search. For a protein request the routing priority is a supplied UniProt accession (resolved at `rest.uniprot.org`), then an NCBI protein accession, then a linked PDB entry's FASTA chains, and finally a name-and-organism search. Nucleotide requests use the [NCBI E-utilities](https://www.ncbi.nlm.nih.gov/books/NBK25501/) at `https://eutils.ncbi.nlm.nih.gov/entrez/eutils` (esearch, esummary, efetch), with a gene-locus coordinate fallback that fetches the genomic interval directly from the chromosome accession. Structure requests resolve a PDB identifier and read entry metadata from `https://data.rcsb.org`, with chain sequences pulled from `https://www.rcsb.org/fasta/entry`. Every returned record carries a source URL and a SHA256 checksum for provenance, and the NCBI API key and contact email are sanitized out of provenance URLs. Genomic coordinates are interpreted as 1-indexed, inclusive intervals to match biological residue selection conventions. Results reflect the live databases at query time rather than a fixed release snapshot.

### Learning Resources

* [Entrez Programming Utilities help](https://www.ncbi.nlm.nih.gov/books/NBK25501/) (NCBI) - official documentation for the E-utilities API, including esearch, esummary, and efetch.
* [UniProt help and documentation](https://www.uniprot.org/help) (UniProt) - official documentation covering accessions, query syntax, and the REST API.
* [RCSB PDB Data API](https://data.rcsb.org/) (RCSB PDB) - official documentation for the PDB entry data and FASTA endpoints.

## Tools

<a name="api-run-sequence-fetch" />

<div class="tool-section-card tool-section-card--fetch">
  ### Multi-source Sequence Fetch (`sequence-fetch`)

  Resolves a list of `SequenceFetchRequest` objects across NCBI Entrez, UniProt, and RCSB PDB, returning per-request fetched sequences, fetched structures, resolved identifiers, warnings, and errors, with run-level counts of successful, warning, and failed requests.

  #### API Reference

  <div class="api-model-section api-input-section">
    <a href="https://github.com/evo-design/proto-tools/blob/47e34afa5ea240a3b406e323dc38aa5dc85f223e/proto_tools/tools/database_retrieval/sequence_fetch/sequence_fetch.py#L157" target="_blank" class="func-table-btn func-source-btn api-model-source"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="16 18 22 12 16 6" /><polyline points="8 6 2 12 8 18" /></svg> Source</a>

    <Accordion title="Input: SequenceFetchInput">
      <ParamField path="requests" type="List[SequenceFetchRequest]" required>
        One or more retrieval requests.

        <Expandable title="SequenceFetchRequest">
          <ParamField path="request_id" type="string">
            Optional caller-provided request identifier.
          </ParamField>

          <ParamField path="target_name" type="string" required>
            Gene, protein, or RNA name to resolve.
          </ParamField>

          <ParamField path="organism" type="string" required>
            Organism name used for disambiguation.
          </ParamField>

          <ParamField path="sequence_types" type="List[string]" required>
            Requested outputs: protein, dna, rna, or structure.
          </ParamField>

          <ParamField path="uniprot_id" type="string">
            UniProt accession override.
          </ParamField>

          <ParamField path="genbank_accession" type="string">
            GenBank accession override.
          </ParamField>

          <ParamField path="refseq_accession" type="string">
            RefSeq accession override.
          </ParamField>

          <ParamField path="pdb_id" type="string">
            PDB accession override.
          </ParamField>

          <ParamField path="gene_id" type="string">
            NCBI Gene ID override.
          </ParamField>

          <ParamField path="protein_id" type="string">
            NCBI protein accession override.
          </ParamField>

          <ParamField path="transcript_id" type="string">
            Transcript accession override.
          </ParamField>

          <ParamField path="genomic_coordinates" type="string">
            Genomic interval like NC\_000913.3:1-100:+.
          </ParamField>

          <ParamField path="additional_ids" type="Dict[string, string]">
            Extra IDs used for custom routing.
          </ParamField>
        </Expandable>
      </ParamField>
    </Accordion>
  </div>

  <div class="api-model-section api-config-section">
    <a href="https://github.com/evo-design/proto-tools/blob/47e34afa5ea240a3b406e323dc38aa5dc85f223e/proto_tools/tools/database_retrieval/sequence_fetch/sequence_fetch.py#L389" target="_blank" class="func-table-btn func-source-btn api-model-source"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="16 18 22 12 16 6" /><polyline points="8 6 2 12 8 18" /></svg> Source</a>

    <Accordion title="Config: SequenceFetchConfig">
      <ParamField path="max_candidates_per_source" type="integer" default="5">
        Maximum database candidates to evaluate per name-based search.
      </ParamField>

      <ParamField path="type_check_mode" type="enum" default="error">
        Controls how molecule-type mismatches are handled (e.g. requesting "protein" for a name that looks like an ncRNA gene). `"off"` skips validation entirely; `"warn"` records a warning but continues; `"error"` (default) fails the request.

        Available options: `off`, `warn`, `error`
      </ParamField>

      <ParamField path="ncbi_api_key" type="string">
        Optional NCBI API key (lifts rate limit from 3 to 10 requests/second). Defaults to the `NCBI_API_KEY` environment variable; an explicit value passed to the config overrides the env var.
      </ParamField>

      <ParamField path="ncbi_email" type="string">
        Optional contact email. Defaults to the `NCBI_EMAIL` environment variable; an explicit value passed to the config overrides the env var.
      </ParamField>

      <ParamField path="verbose" type="integer" default="0">
        Verbosity level (0=quiet, 1=info, 2=debug, 3=raw subprocess stderr). `True` is coerced to `1` and `False` to `0`.
      </ParamField>

      <ParamField path="device" type="string" default="cpu">
        Device to run the tool on.
      </ParamField>

      <ParamField path="timeout" type="integer" default="3600">
        Maximum execution time in seconds. `None` waits indefinitely.
      </ParamField>

      <ParamField path="seed" type="integer">
        Random seed. When set, tools run reproducibly up to small GPU float noise (see `BaseToolOutput.approx_equal`), and the seed participates in cache keys. When None, cacheable seed-sensitive tools skip cache until seeded.
      </ParamField>
    </Accordion>
  </div>

  <div class="api-model-section api-output-section">
    <a href="https://github.com/evo-design/proto-tools/blob/47e34afa5ea240a3b406e323dc38aa5dc85f223e/proto_tools/tools/database_retrieval/sequence_fetch/sequence_fetch.py#L287" target="_blank" class="func-table-btn func-source-btn api-model-source"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="16 18 22 12 16 6" /><polyline points="8 6 2 12 8 18" /></svg> Source</a>

    <Accordion title="Output: SequenceFetchOutput">
      <ResponseField name="results" type="List[SequenceFetchResult]">
        Per-request retrieval outcomes.

        <Expandable title="SequenceFetchResult">
          <ResponseField name="request_id" type="string" required>
            Request identifier used in this result.
          </ResponseField>

          <ResponseField name="target_name" type="string" required>
            Original target name.
          </ResponseField>

          <ResponseField name="organism" type="string" required>
            Original organism name.
          </ResponseField>

          <ResponseField name="requested_types" type="List[string]" required>
            Requested output molecule types.
          </ResponseField>

          <ResponseField name="status" type="enum" required>
            One of success, warning, or failed.
          </ResponseField>

          <ResponseField name="fetched_sequences" type="List[FetchedSequence]">
            Retrieved sequence records.
          </ResponseField>

          <ResponseField name="fetched_structures" type="List[FetchedStructure]">
            Retrieved structure records.
          </ResponseField>

          <ResponseField name="resolved_ids" type="Dict[string, string]">
            IDs resolved or used during retrieval.
          </ResponseField>

          <ResponseField name="warnings" type="List[string]">
            Non-fatal warnings.
          </ResponseField>

          <ResponseField name="errors" type="List[string]">
            Fatal or partial failure messages.
          </ResponseField>
        </Expandable>
      </ResponseField>
    </Accordion>
  </div>

  #### Applications

  Use this to pull mixed protein, nucleotide, and structure data for many targets in a single call. Resolve a batch of gene symbols plus organisms to reference protein sequences for analysis or design, retrieve coding DNA and transcript RNA alongside the protein for a codon-optimization workflow, or fetch a protein and its linked PDB structures together to seed structure-aware downstream steps. Partial batches are normal. Each request reports its own status, sequences, structures, and errors independently, so one unresolved target does not fail the job.

  #### Usage Tips

  * **Provide identifiers whenever possible.** Accession overrides such as `uniprot_id`, `genbank_accession`, or `pdb_id` route directly and are far more reliable than a name-and-organism search, which selects a single top-ranked candidate that may be ambiguous.
  * **The strand in `genomic_coordinates` changes the returned sequence.** Coordinates are interpreted as 1-indexed, inclusive intervals to match biological residue selection conventions, and an explicit `+` or `-` strand controls whether the forward or reverse-complement sequence is returned. Omitting the strand can yield the wrong-orientation sequence for genes on the minus strand.
  * **A protein hit does not guarantee a structure exists.** Structure retrieval requires a linked PDB entry. A UniProt or NCBI protein match with no PDB cross-reference produces a not-found error for the `structure` type while the protein sequence still returns.
  * **`type_check_mode` defaults to `"error"`, the right setting for production.** It rejects obvious molecule-type mismatches early, such as requesting `protein` for a name that looks like a non-coding RNA (ncRNA) gene or for an `NR_` or `XR_` RefSeq transcript. `"warn"` records the mismatch and continues, and `"off"` skips the check entirely.
  * **`rna_premrna` is inferred, not curated.** It is transcribed from the genomic DNA sequence and includes introns where present, so it is annotation-dependent and not a directly curated transcript.
</div>

## Toolkit Notes

These apply to every Sequence Fetch tool in this toolkit (`sequence-fetch`).

* **Requires network access.** The tool federates the live NCBI, UniProt, and RCSB PDB endpoints. It does not run offline and keeps no local copy of any database.
* **An NCBI API key raises the rate limit for NCBI-backed requests.** Requests routed to NCBI E-utilities are limited to 3 requests per second per IP without credentials. Setting credentials raises this to 10 requests per second. A key is obtained at no cost from the Settings page of a free NCBI account ([https://www.ncbi.nlm.nih.gov/account/](https://www.ncbi.nlm.nih.gov/account/)). NCBI also asks that a contact email be set; it uses the email for abuse handling and IP-block recovery. Provide credentials either via the `ncbi_api_key` / `ncbi_email` config attributes or via the `NCBI_API_KEY` / `NCBI_EMAIL` environment variables. An explicit config value overrides the env var. The UniProt and RCSB PDB backends are keyless and have no equivalent mechanism.

<Tip>
  **Example notebook:** See the [full working example](https://github.com/evo-design/proto-tools/blob/47e34afa5ea240a3b406e323dc38aa5dc85f223e/proto_tools/tools/database_retrieval/sequence_fetch/examples/example.ipynb) for a copy-paste-ready walkthrough.
</Tip>

## Infrastructure Guides

The following guides cover how to run tools efficiently and at scale.

<CardGroup cols={2}>
  <Card title="Tool Persistence" icon="repeat" href="/docs/tools/guides/tool-persistence">Keep a tool's model warm across calls instead of reloading it every invocation.</Card>
  <Card title="Device Management" icon="cpu" href="/docs/tools/guides/device-management">How GPUs are allocated to tools and how to target specific devices.</Card>
  <Card title="Parallel Execution" icon="layers" href="/docs/tools/guides/parallel-execution">Fan a batch of inputs out across multiple GPUs.</Card>
</CardGroup>
