Wraps the keyless EBI BioSamples database — metadata for biological samples (cell lines, tissues, organisms) referenced across EBI archives. Search samples by organism/tissue/keyword and fetch a sample's characteristics. Keyless.
Two tools with complete input schemas and reasonable descriptions. Naming follows verb_noun convention (search_samples, get_sample). Descriptions are adequate (120-180 chars, within baseline 34-392 range) but lack actionable context for LLM selection. Parameters have types and descriptions, but lack constraints (enums, ranges, patterns). Output schemas are not documented, LLMs cannot predict response structure. Error handling is minimal (generic error objects). No pagination guidance despite search_samples accepting limit/page. Missing output schema documentation is a significant gap for agent planning.
Fetch a single EBI BioSamples record by accession. Returns the sample name, dates, taxId, organism, and a flattened map of its characteristics (organism, tissue, sex, cell type, etc.). Keyless.
Search EBI BioSamples — metadata for biological samples (cell lines, tissues, organisms) referenced across EBI archives. Free-text search by organism, tissue, or keyword; returns matching samples with accession, name, organism, and release date. Keyless.
Output schemas not documented. LLMs cannot predict response structure (fields, types, nesting). search_samples returns {total, count, samples: [{accession, name, organism, release, taxId}]} but this is invisible to the agent.
Numeric parameters lack constraints. limit accepts 'number' with no min/max validation in schema, LLMs could pass 0, -1, or 999999. page similarly unbounded. Schema should declare limit: {type: 'number', minimum: 1, maximum: 100} and page: {type: 'number', minimum: 0}.
Descriptions lack actionable context. 'Search EBI BioSamples...' tells WHAT but not WHEN to use it vs get_sample, or what to do with results. Missing: 'Use this to find samples by organism/tissue. Returns accession IDs suitable for get_sample() calls.'
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 56 | 2026-07-28+ | v2 |
No error recovery guidance. callTool() returns {error: string} but does not categorize errors (retryable vs fatal) or suggest next steps. E.g., 'sample not found' should suggest 'Try search_samples() to find the correct accession.'
Pagination not explained. search_samples accepts limit/page but description does not state default behavior, max results per call, or how to iterate. LLMs may not realize pagination is needed for large result sets.