Skip to main content
Glama
josefdc

UniProt MCP Server

by josefdc

fetch_entry_flatfile

Retrieve UniProt entry flatfiles in txt or fasta format using accession numbers and version identifiers for protein data analysis.

Instructions

Return the UniProt flatfile (txt or fasta) for a specific entry version.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
accessionYes
versionYes
formatNotxt

Implementation Reference

  • MCP tool handler for fetch_entry_flatfile. This is the primary implementation decorated with @mcp.tool(), handling input validation and delegating to the raw client helper.
    @mcp.tool()  # type: ignore[misc]
    async def fetch_entry_flatfile(
        accession: str,
        version: str,
        format: str = "txt",
    ) -> str:
        """Return the UniProt flatfile (txt or fasta) for a specific entry version."""
    
        normalized = _validate_accession(accession)
        normalized_format = format.lower()
        async with new_client() as client:
            text = cast(
                str,
                await fetch_entry_flatfile_raw(
                    client,
                    normalized,
                    version,
                    format=normalized_format,
                ),
            )
        if not text:
            return RESOURCE_NOT_FOUND_MESSAGE.format(accession=normalized)
        return text
  • Supporting utility function (imported as fetch_entry_flatfile_raw) that performs the actual HTTP request to the UniProt API with retry logic and error handling.
    @retry(  # type: ignore[misc]
        reraise=True,
        stop=stop_after_attempt(4),
        wait=_wait_retry_after_or_exponential,
        retry=retry_if_exception(_should_retry),
        before_sleep=_before_sleep,
    )
    async def fetch_entry_flatfile(
        client: httpx.AsyncClient,
        accession: str,
        version: str,
        *,
        format: str = "txt",
    ) -> str:
        """Return a flatfile representation (txt or fasta) for a specific entry version."""
    
        normalized_format = format.lower()
        if normalized_format not in FLATFILE_ACCEPT:
            raise ValueError("format must be 'txt' or 'fasta'")
    
        headers = {"Accept": FLATFILE_ACCEPT[normalized_format]}
        params = {"version": version, "format": normalized_format}
    
        async with _SEMAPHORE:
            response = await client.get(
                f"/uniprotkb/{accession}",
                params=params,
                headers=headers,
            )
        if response.status_code == 404:
            return ""
        if response.status_code >= 400:
            if response.status_code in RETRYABLE_STATUS:
                response.raise_for_status()
            else:
                try:
                    response.raise_for_status()
                except httpx.HTTPStatusError as exc:
                    raise UniProtClientError(str(exc)) from exc
        return cast(str, response.text)
  • The @mcp.tool() decorator registers this function as an MCP tool.
    @mcp.tool()  # type: ignore[misc]

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/josefdc/Uniprot-MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server