Uniprot Mcp Server

io.github.cyanheadsPublished by GitHub account cyanheadsv0.4.0Updated Nov 4, 2026

Protein research over UniProtKB: search by function, fetch curated records, map IDs, proteomes.

VerifiedStreamable HTTPWeb executableKnowledge & MemoryData & AnalyticsAI & ML

Overview

AI-generated overview

Keyless UniProt protein research: search UniProtKB, fetch curated entries, map identifiers across databases, and pull proteomes, taxonomy and FASTA sequences.

What you can do
  • Search UniProtKB by plain text or Lucene field query, with reviewed Swiss-Prot filtering and facet counts
  • Fetch full curated entries by accession in batches, including function, disease, variants, GO terms and cross-references
  • Map identifiers between gene names, Ensembl, RefSeq, ChEMBL, PDB, GeneID and UniProtKB accessions
  • Retrieve reference proteomes by UPID or taxon ID, with protein counts and BUSCO completeness
  • Resolve taxonomy records by NCBI taxon ID or organism name, with lineage and optional children
  • Fetch canonical and isoform amino-acid sequences in FASTA form
When to use it
Useful when an assistant needs to answer protein or gene questions grounded in UniProt: identifying a protein from a gene or external database ID, reading curated functional and disease annotations, or gathering sequences and proteome statistics for a species.
Requirements
Either the public hosted Streamable HTTP endpoint or a local install via npx, bunx or Docker; Bun v1.4.0+ or Node.js v24+ for local runs. No API key is needed. Optional environment overrides include UNIPROT_BASE_URL, MCP_TRANSPORT_TYPE, MCP_HTTP_PORT and MCP_AUTH_MODE.
Before you install
Read-only lookups against UniProt; no writes or payments. Data is UniProt under CC BY 4.0 and should be attributed in downstream use. If LOG_TOOL_FAILURE_PAYLOADS is enabled, failed tool call arguments and results are logged, and a secret inside a free-form value is not redacted. The public hosted instance is operated by a third party.

Installation

In SourceWeft

  1. Open Uniprot Mcp Server in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/io.github.cyanheads%2Funiprot-mcp-server/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "uniprot": {
      "type": "http",
      "url": "https://uniprot.caseyjhand.com/mcp"
    }
  }
}

README

@cyanheads/uniprot-mcp-server

Search UniProtKB by protein function, fetch curated records, map IDs across databases, and pull reference proteomes, taxonomy, and sequences via MCP. STDIO or Streamable HTTP.

6 Tools • 2 Data Resources • 1 Prompt • 1 Skill

Public Hosted Server: https://uniprot.caseyjhand.com/mcp


Overview

Protein research over UniProtKB. Search by function or gene, fetch curated records, map identifiers from Ensembl, ChEMBL, RefSeq, PDB, and more, and pull reference proteomes, taxonomy, and sequences.

Tools

ToolDescription
uniprot_search_proteinsSearch UniProtKB by plain text or a Lucene field query, with the reviewed (Swiss-Prot) filter foregrounded and optional server-side facet counts. Cursor-paginated. The discovery entry point.
uniprot_get_entryFetch full curated entries by accession in one batch (up to 20) — function, catalytic activity, disease, variants, isoforms, GO terms, cross-references. Partial-success output; an oversized record returns a section outline.
uniprot_map_idsTranslate identifiers across databases via UniProt's async ID-mapping service — gene names, Ensembl, RefSeq, ChEMBL, PDB, GeneID ↔ UniProtKB accessions. Polls within a budget; running jobs return a ticket and completed pages return a continuation.
uniprot_get_proteomeFetch a reference proteome by UPID or NCBI taxon ID — protein count, BUSCO completeness, genome assembly inline, plus an opt-in capped page of the proteins.
uniprot_get_taxonomyResolve a taxonomy record by NCBI taxon ID or organism name — exact name matching, rank, parent, full lineage, and optionally the immediate children, cursor-paginated.
uniprot_get_sequenceFetch the canonical amino-acid sequence (FASTA) for an accession, with length and parsed header — and optionally the isoform sequences. The cheap sequence-only path.

Resources

ResourceDescription
uniprot://entry/{accession}A curated UniProtKB entry by accession — the resource mirror of uniprot_get_entry for a single accession.
uniprot://taxonomy/{taxonId}A taxonomy record by NCBI taxon ID — name, rank, parent, full lineage. The mirror of uniprot_get_taxonomy by ID.

All resource data is also reachable via tools — tool-only clients lose nothing. UniProtKB is far too large to enumerate, so there is no resource list(); discovery is uniprot_search_proteins's job.

Prompts

PromptDescription
uniprot_protein_dossierGuided protein-research workflow — resolve an identifier, fetch the curated entry, pull disease and variants, and surface cross-references for structure, citations, and bioactivity.

Agent skill

The UniProt guide covers protein identity, species versus strain scope, mapping completeness, and evidence-backed interpretation. It ships with plugin, npm, MCPB, and Docker installations and is available over MCP at skill://uniprot-guide/SKILL.md.

Capability reference

uniprot_search_proteins tool

  • text_search for plain language or query for Lucene field syntax (gene, organism_id, taxonomy_id, keyword, go, reviewed, protein_name, family, length, existence, accession) — exactly one. Plain-text punctuation and uppercase Boolean words are escaped. Structured queries reject unbalanced parentheses. Optional facets return count breakdowns (e.g. reviewed, model_organism)
  • The organism_id input restricts the whole query to that taxon and its descendants. For exact-node scope, use organism_id:<id> inside query instead
  • reviewed defaults to true (Swiss-Prot only); false searches both tiers (put reviewed:false in query for TrEMBL only). Every hit carries reviewed, annotationScore, and proteinExistence
  • Forward-only cursor pagination; returns totalResults and the effective query. Cursors bind to this tool and the exact assembled query, including organism/reviewed filters. Changing size, fields, or facets keeps continuation valid; a changed query, malformed token, or legacy raw cursor fails invalid_cursor: restart without it
  • Inactive accessions (merged, demerged, or deleted) go in inactive[] with the reason and replacements, not in results[]

uniprot_get_entry tool

  • Up to 20 accessions per call, from uniprot_search_proteins or uniprot_map_ids (strip any -N isoform suffix). Sectioned record: function, catalytic activity, cofactors, subcellular location, disease, PTMs, natural variants, isoforms, domains, GO terms, keywords, cross-references. fields trims the output; identity and provenance fields are always kept
  • Resolved entries come back in succeeded[], unknown or inactive ones in failed[], so one bad accession doesn't abort the batch. An inactive accession's error names the merge target, the demerge products, or the UniParc ID
  • Initial responses exceeding 24,000 UTF-8 bytes across content[] and structuredContent return kind: "outline". A single resolved accession returns a section listing; an oversized batch returns outlinedEntries in request order, preserving every failed[] entry. Re-call each outlined accession individually, then use sections: [...] for the parts you need. Explicit sections render every returned item, including all cross-reference IDs; a very large list section pages with section_limit (1–500) and section_offset, reporting totalCount and nextOffset

uniprot_map_ids tool

  • from_db / to_db are validated enums (e.g. Gene_Name, Ensembl, RefSeq_Protein, ChEMBL, PDB, GeneID, and UniProtKB_AC-ID as a source); an unknown database fails before any request. Target UniProtKB-Swiss-Prot for reviewed accessions only, or UniProtKB to include TrEMBL. Mapping tax_id restricts submission to an exact node, excluding descendants; use the intended strain's taxon ID when needed
  • Submits the job and polls within a time budget. A job still running returns status: "running" with a ticket; pass that ticket alone to poll it. A finished call returns status: "finished" with one page, and continuation (pass it alone) fetches the next; no continuation means the last page
  • mappedCount counts the current page; totalMappings is UniProt's job-wide total when available. unmappedIds is UniProt's job-wide failed-ID metadata, repeated on completed pages rather than inferred from the displayed rows
  • UniProtKB targets include available entry name, reviewed status, organism, and primary gene. Inactive targets carry their reason and replacements. Metadata or enrichment outages fall back to generic identifier rows with a notice; jobs above UniProt's 100,000-mapping enrichment limit remain pageable
  • Terminal job failures use mapping_failed with UniProt's safe error message and recovery guidance. Only an explicitly unsupported database combination at submission uses unsupported_db_pair
  • A rejected completed-page continuation (HTTP 400), unknown page, or expired job fails invalid_continuation with restart guidance. Upstream outages retain their upstream error classification

uniprot_get_proteome tool

  • Provide exactly one of upid (e.g. UP000005640) or taxon_id; both or neither fails validation. Resolve an organism name to a taxon ID first with uniprot_get_taxonomy. Taxon lookup prefers an exact reference proteome, then a unique descendant reference. Multiple descendants return candidate UPIDs and organism identities for explicit selection, with a next-page link when suggestions are incomplete
  • Returns proteome type, total protein count, BUSCO completeness (score, complete/fragmented/missing counts, lineage dataset), and genome assembly accession
  • Proteins are opt-in via include_proteins (human has ~147,506) and come back as a capped page with a forward cursor; narrow with query (UniProtKB Lucene syntax). Cursors bind to the resolved UPID, exact query, and tool; a taxon ID and UPID resolving to the same proteome may share a cursor, and size may change. Changed membership or a legacy raw cursor fails invalid_cursor: restart without it

uniprot_get_taxonomy tool

  • Provide exactly one of taxon_id (NCBI numeric ID) or name (organism name); both or neither fails validation. Gives the taxon ID that uniprot_search_proteins (organism_id) and uniprot_get_proteome (taxon_id) expect
  • Name matching prefers exact case-insensitive scientific names, then common names, mnemonics, and aliases. Quote/backslash-tolerant matching follows exact matching. Ties or partial matches return candidate taxon IDs instead of selecting the first hit
  • Name resolution shares a 45-second budget across candidate pages and the selected record lookup. If candidate scanning cannot finish, incomplete_candidates supplies partial suggestions and a candidate-search URL; use an explicit taxon ID or narrow the name
  • Returns scientific and common name, mnemonic, rank, parent, and the full lineage (root → near ancestor)
  • include_children adds the immediate child taxa, 100 per page with the total count and a cursor for the next page. A cursor sent with a different taxon fails invalid_cursor

uniprot_get_sequence tool

  • Returns the canonical sequence with its length and parsed FASTA header; include_isoforms adds the isoform sequences. Accessions come from uniprot_search_proteins or uniprot_map_ids (strip any -N isoform suffix)
  • A merged accession returns its merge target's sequences, with the requested accession in mergedFrom; a demerged or deleted one fails not_found naming its replacements or UniParc ID

uniprot://entry/{accession} resource

  • Same record as uniprot_get_entry for a single accession, addressed by URI. An inactive accession (merged, demerged, or deleted) fails not_found
  • A very large entry returns an identity summary (accession, entry name, protein name, genes, organism, length, reviewed status, annotation score, protein existence) plus a section outline; fetch specific sections with uniprot_get_entry (sections: [...]), since the URI takes no sections parameter

uniprot://taxonomy/{taxonId} resource

  • Addressed by NCBI taxon ID, e.g. uniprot://taxonomy/9606 for human
  • Returns scientific and common name, mnemonic, rank, parent, and full lineage — same shape as uniprot_get_taxonomy without include_children
  • Tool-only clients reach the same data via uniprot_get_taxonomy

uniprot_protein_dossier prompt

  • Arguments: identifier required (gene name, accession, or protein name); organism optional to disambiguate
  • Five-step workflow embedded in the generated message: resolve identifier → fetch entry → summarize function/localization/provenance → pull disease & variants → surface cross-references for structure (PDB), bioactivity (ChEMBL), and citations (PubMed)
  • Returns a single user-role message carrying the full instructions — no separate assistant framing message

Features

Built on @cyanheads/mcp-ts-core: stdio and Streamable HTTP transports, pluggable auth (none / jwt / oauth), swappable storage (in-memory, filesystem, Supabase, Cloudflare KV/R2/D1), structured logging with optional OpenTelemetry tracing.

UniProt-specific:

  • Keyless — UniProt REST requires no API key; works against any rest.uniprot.org-compatible base (override UNIPROT_BASE_URL for a private mirror)
  • Batch entry fetch — N accessions in one round trip, with any missing ones flagged
  • Async ID mapping with a bounded poll, a resumable ticket for running jobs, and paginated results

Agent-friendly output:

  • Provenance is data, not decoration — reviewed, annotationScore, proteinExistence, and per-field PubMed/ECO evidence ship on every record so the agent can weigh manual vs. predicted annotation
  • Graceful partial failure — uniprot_get_entry returns per-accession succeeded[] / failed[] rows instead of aborting the batch
  • Explicit output shapes — uniprot_get_entry returns kind: "full" | "outline", and uniprot_map_ids returns either a ticket or a continuation
  • Sparsity preserved — absent upstream fields stay absent, never fabricated (most curated sections are legitimately missing on TrEMBL entries)

Getting started

Public Hosted Instance

A public instance is available at https://uniprot.caseyjhand.com/mcp — no installation required. Point any MCP client at it via Streamable HTTP:

json
{  "mcpServers": {    "uniprot-mcp-server": {      "type": "streamable-http",      "url": "https://uniprot.caseyjhand.com/mcp"    }  }}

Self-Hosted / Local

Add the following to your MCP client configuration file. UniProt REST is keyless — no API key required.

json
{  "mcpServers": {    "uniprot-mcp-server": {      "type": "stdio",      "command": "bunx",      "args": ["@cyanheads/uniprot-mcp-server@latest"],      "env": {        "MCP_TRANSPORT_TYPE": "stdio",        "MCP_LOG_LEVEL": "info"      }    }  }}

Or with npx (no Bun required):

json
{  "mcpServers": {    "uniprot-mcp-server": {      "type": "stdio",      "command": "npx",      "args": ["-y", "@cyanheads/uniprot-mcp-server@latest"],      "env": {        "MCP_TRANSPORT_TYPE": "stdio",        "MCP_LOG_LEVEL": "info"      }    }  }}

Or with Docker:

json
{  "mcpServers": {    "uniprot-mcp-server": {      "type": "stdio",      "command": "docker",      "args": ["run", "-i", "--rm", "-e", "MCP_TRANSPORT_TYPE=stdio", "ghcr.io/cyanheads/uniprot-mcp-server:latest"]    }  }}

For Streamable HTTP, set the transport and start the server:

sh
MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 bun run start:http# Server listens at http://localhost:3010/mcp

Prerequisites

  • Bun v1.4.0 or higher (or Node.js v24+).
  • No API key — UniProt REST is keyless and open. Data is UniProt, CC BY 4.0.

Installation

  1. Clone the repository:
sh
git clone https://github.com/cyanheads/uniprot-mcp-server.git
  1. Navigate into the directory:
sh
cd uniprot-mcp-server
  1. Install dependencies:
sh
bun install

Configuration

All configuration is validated at startup via Zod schemas in src/config/server-config.ts. UniProt REST is keyless, so every server-specific variable below is an optional override.

VariableDescriptionDefault
UNIPROT_BASE_URLUniProt REST base URL. Override for a private mirror or testing.https://rest.uniprot.org
UNIPROT_TIMEOUT_MSPer-request HTTP timeout in ms.30000
UNIPROT_ID_MAPPING_BUDGET_MSTime budget for the ID-mapping poll before returning a ticket. Must be less than UNIPROT_TIMEOUT_MS.8000
UNIPROT_DEFAULT_PAGE_SIZEDefault page size for search and proteome protein listing when the caller leaves it unset.25
MCP_TRANSPORT_TYPETransport: stdio or http.stdio
MCP_HTTP_PORTPort for HTTP server.3010
MCP_AUTH_MODEAuth mode: none, jwt, or oauth.none
MCP_SESSION_MODEHTTP session mode: auto, stateful, or stateless. The server is stateless by default.stateless
MCP_LOG_LEVELLog level (RFC 5424).info
LOGS_DIRDirectory for log files (Node.js only).<project-root>/logs
LOG_TOOL_FAILURE_PAYLOADSLog each failed tool call's arguments and result, redacted by key name and capped at LOG_TOOL_FAILURE_PAYLOAD_MAX_BYTES (default 16384). A secret inside a free-form value is not redacted.false
STORAGE_PROVIDER_TYPEStorage backend.in-memory
OTEL_ENABLEDEnable OpenTelemetry instrumentation (spans, metrics, completion logs).false

See .env.example for the full list of optional overrides.

Running the server

Local development

  • Build and run:

    sh
    # One-time buildbun run rebuild
    # Run the built serverbun run start:stdio# orbun run start:http
  • Run checks and tests:

    sh
    bun run devcheck        # Lint, format, typecheck, securitybun run test            # Vitest test suitebun run test:coverage   # Test suite with coverage, enforcing the framework thresholdsbun run lint:mcp        # Validate MCP definitions against spec

Docker

sh
docker build -t uniprot-mcp-server .docker run --rm -e MCP_TRANSPORT_TYPE=stdio ghcr.io/cyanheads/uniprot-mcp-server:latest

The Dockerfile defaults to HTTP transport, stateless session mode, and logs to /var/log/uniprot-mcp-server. OpenTelemetry peer dependencies are installed by default — build with --build-arg OTEL_ENABLED=false to omit them.

Project structure

DirectoryPurpose
src/index.tscreateApp() entry point — registers tools/resources/prompts and inits the UniProt service.
src/configServer-specific environment variable parsing and validation with Zod.
src/mcp-server/toolsTool definitions (*.tool.ts). Six tools over UniProtKB, ID mapping, proteomes, taxonomy, and sequences.
src/mcp-server/resourcesResource definitions (*.resource.ts). Entry and taxonomy by-ID mirrors.
src/mcp-server/promptsPrompt definitions (*.prompt.ts). The protein-dossier workflow prompt.
src/services/uniprotThe rest.uniprot.org REST client — search, batch entries, ID mapping, proteomes, taxonomy, FASTA — plus normalized domain types.
skills/Published UniProt guide and query reference for agents calling the tools.
tests/Unit and integration tests mirroring src/.

Development guide

See CLAUDE.md (and the byte-identical AGENTS.md) for development guidelines and architectural rules. The short version:

  • Handlers throw, framework catches — no try/catch in tool logic
  • Use ctx.log for request-scoped logging, ctx.state for tenant-scoped storage
  • Register new tools and resources in the createApp() arrays
  • Wrap the UniProt API: validate raw → normalize to domain type → return the output schema; never fabricate missing fields

Contributing

Issues are welcome. Run checks and tests before submitting:

sh
bun run devcheckbun run test

License

Apache-2.0 — see LICENSE for details.

Source: README.md at commit fa73d8c

Tools

6

uniprot_search_proteins

uniprot-mcp-server: search proteins

Search UniProtKB and return curated protein records. Pass text_search for a plain-language query (the 80% case) or query for the full Lucene field syntax (gene:TP53 AND organism_id:9606 AND reviewed:true) — exactly one is required. Reviewed (Swiss-Prot) entries are manually curated; unreviewed (TrEMBL) are computationally predicted and ~30x more numerous, so reviewed defaults to true to avoid drowning in predictions — set it false to search both tiers together (for TrEMBL only, put reviewed:false in query). The organism_id and reviewed filters apply to the whole query. Request facets (e.g. reviewed, model_organism) for server-side count breakdowns. Results page forward with an opaque cursor; UniProtKB has no offset paging. An inactive accession the query matches (merged, demerged, or deleted) comes back in inactive[] with the accessions that replace it, never as a result. This is the discovery entry point — chain results[].accession into uniprot_get_entry for full records, or uniprot_get_sequence for FASTA.

Parameterssizequerycursorfacetsfieldsreviewedorganism_idtext_search

uniprot_get_entry

uniprot-mcp-server: get entry

Fetch full curated UniProtKB entries by accession in one batch (up to 20). Each entry carries function, catalytic activity, cofactors, subcellular location, disease involvement, PTMs, natural variants, isoforms, domains, GO terms, keywords, and cross-references. Partial failures do not abort the batch — resolved entries land in succeeded[] and unknown or inactive (merged, demerged, deleted) accessions in failed[], where an inactive accession names its replacement or UniParc ID. Pass fields to trim the upstream projection. Initial responses exceeding 24,000 UTF-8 bytes across both output surfaces return kind: "outline": a single resolved record lists sections with byte sizes; a batch lists outlinedEntries in request order and retains failed[]. Re-call each outlined accession individually, e.g. accessions:["P04637"], for its full record or section outline, then add sections:["disease","variants"] to select sections. sections takes exactly one accession; trim a batch with fields instead. All returned list items and cross-reference IDs render in full. A large list section pages with section_limit/section_offset on a re-call naming that one section. This tool does not search: accessions come from uniprot_search_proteins.results[].accession or uniprot_map_ids. Strip any isoform suffix (P04637-2 to P04637) before calling.

Parametersfieldssectionsaccessionsrequiredsection_limitsection_offset

uniprot_map_ids

uniprot-mcp-server: map IDs

Translate identifiers across databases via UniProt's ID-mapping service — gene names to accessions, accession to PDB / Ensembl / RefSeq / ChEMBL / GeneID, and back. The job runs asynchronously; this tool submits it and polls within a budget. A running job returns status "running" with a ticket; pass that ticket alone to poll the same job. A completed call returns status "finished" with one results page; when continuation is present, pass it alone to fetch the next completed page without re-submitting or polling the job. A gene name often maps to one reviewed Swiss-Prot accession plus dozens of unreviewed TrEMBL ones, so target UniProtKB-Swiss-Prot (reviewed only) for the usual intent, or UniProtKB to include TrEMBL. Pair a gene-symbol from_db with tax_id to disambiguate species. A row whose UniProtKB target is inactive (merged, demerged, or deleted) carries an inactive marker naming its replacements. Chain the resulting active accessions into uniprot_get_entry.

Parametersidsto_dbtax_idticketfrom_dbcontinuation

uniprot_get_proteome

uniprot-mcp-server: get proteome

Fetch the reference proteome for an organism by UPID (e.g. "UP000005640") or NCBI taxon ID (e.g. 9606) — provide exactly one. Returns metadata inline: proteome type, total protein count, BUSCO completeness (score, complete/fragmented/missing counts, lineage dataset), and the genome assembly accession. The protein set is opt-in via include_proteins (it is large — human is ~147,506) and returns a capped page with a forward cursor; narrow it with the query filter (UniProtKB Lucene syntax) for a subset. Resolve an organism name to a taxon ID first with uniprot_get_taxonomy.

Parameterssizeupidquerycursortaxon_idinclude_proteins

uniprot_get_taxonomy

uniprot-mcp-server: get taxonomy

Resolve a taxonomy record by NCBI taxon ID (e.g. 9606) or organism name (e.g. "Homo sapiens" or "human") — provide exactly one. Exact case-insensitive scientific names take priority, then common names, mnemonic and aliases; stray double quotes and backslashes are tolerated after exact matching. Ties and partial matches return candidate taxon IDs instead of guessing. Returns the scientific and common name, mnemonic, rank, parent, and full lineage. Set include_children for immediate child taxa in pages of 100; pass the returned cursor for the next page. Use the resolved taxon ID with uniprot_search_proteins (organism_id) or uniprot_get_proteome (taxon_id).

Parametersnamecursortaxon_idinclude_children

uniprot_get_sequence

uniprot-mcp-server: get sequence

Fetch the canonical amino-acid sequence (FASTA) for a UniProtKB accession, with length and the parsed header. Set include_isoforms to also return the alternatively-spliced isoform sequences. This is the cheap sequence-only path — for the full functional record use uniprot_get_entry. A merged accession returns the sequences of its merge target, labelled with the target accession and the requested one in mergedFrom; a demerged or deleted accession fails not_found naming its replacements or UniParc ID. Accessions come from uniprot_search_proteins or uniprot_map_ids; strip any "-N" isoform suffix (P04637-2 to P04637) before calling.

Parametersaccessionrequiredinclude_isoforms

Version history

6
  1. v0.4.0LatestNov 4, 2026
  2. v0.3.0Oct 22, 2026
  3. v0.2.6Oct 13, 2026
  4. v0.2.5Oct 9, 2026
  5. v0.2.4Sep 20, 2026
  6. v0.2.3Sep 16, 2026

Score

100% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts