bertron-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@bertron-mcpsearch for entities near 40.7128, -74.006 within 10 km"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
bertron-mcp
A Model Context Protocol (MCP) server providing access to the BERtron API, which aggregates genomic and environmental data from multiple Biological and Environmental Research (BER) data sources including EMSL, ESS-DIVE, JGI, MONET, and NMDC.
Quick Start
Install and run directly from GitHub
# Run directly without installing
uvx --from git+https://github.com/ber-data/bertron-mcp.git bertron-mcp
# Or install first, then run
uvx --from git+https://github.com/ber-data/bertron-mcp.git bertron-mcp --versionRelated MCP server: BioMCP
Features
🔍 Geospatial Search: Find entities within a specified radius of geographic coordinates
💊 Health Check: Verify BERtron API connectivity and database status
🌍 Multi-Source Data: Access data from major BER research facilities
🔌 MCP Integration: Seamless integration with Claude, Goose, and other MCP-compatible AI tools
Requirements
Python 3.12+
UV package manager (recommended)
Access to BERtron API (https://bertron-api.bertron.production.svc.spin.nersc.org)
Installation
From Source (Development)
git clone https://github.com/ber-data/bertron-mcp.git
cd bertron-mcp
make devFrom PyPI (Coming Soon)
pip install bertron-mcpAvailable Tools
geosearch
Search for entities within a specified distance of geographic coordinates.
Parameters:
latitude(float): Latitude coordinate (-90.0 to 90.0)longitude(float): Longitude coordinate (-180.0 to 180.0)search_radius_km(float, optional): Search radius in kilometers (default: 1.0)
Returns: QueryResponse with entities, count, and metadata
bbox_search
Search for entities within a rectangular geographic bounding box.
Parameters:
southwest_lat(float): Southwest corner latitude (-90.0 to 90.0)southwest_lng(float): Southwest corner longitude (-180.0 to 180.0)northeast_lat(float): Northeast corner latitude (-90.0 to 90.0)northeast_lng(float): Northeast corner longitude (-180.0 to 180.0)
Returns: QueryResponse with entities within the bounding box
entity_lookup
Retrieve detailed information for a specific entity by its unique ID.
Parameters:
entity_id(string): Unique identifier of the entity (e.g., "nmdc:bsm-12-abc123")
Returns: Entity object with complete metadata
advanced_query
Execute complex MongoDB queries with filtering, projection, and sorting.
Parameters:
filter_dict(dict, optional): MongoDB filter criteria (e.g., {"entity_type": "sample"})projection(dict, optional): Fields to include/exclude (e.g., {"name": 1, "coordinates": 1})skip(int, optional): Number of documents to skip for pagination (default: 0)limit(int, optional): Maximum number of documents to return (default: 100)sort(dict, optional): Sort criteria (e.g., {"name": 1} for ascending)
Returns: QueryResponse with matching entities
search_by_source
Find entities from a specific BER data source.
Parameters:
source(string): BER data source name (EMSL, ESS-DIVE, JGI, NMDC, MONET)
Returns: QueryResponse with entities from the specified source
search_by_type
Find entities of a specific entity type.
Parameters:
entity_type(string): Entity type (biodata, sample, sequence, taxon, jgi_biosample)
Returns: QueryResponse with entities of the specified type
search_by_name
Search for entities by name using regex pattern matching.
Parameters:
name_pattern(string): Name pattern to search for (supports regex)case_sensitive(bool, optional): Whether search should be case sensitive (default: False)
Returns: QueryResponse with entities matching the name pattern
health_check
Check the health status of the BERtron API.
Parameters: None
Returns: Dictionary with web_server and database boolean status
API Limits and Constraints
To prevent overwhelming responses and protect system resources, the following limits are enforced:
Default Limits
Default result limit: 100 items per query
Maximum result limit: 1,000 items per query
Maximum pagination offset: 50,000 items
Constraint Reporting
When limits are applied, tools automatically report constraints in the response metadata:
{
"entities": [...],
"count": 1000,
"metadata": {
"constraints_applied": {
"requested_limit": 5000,
"actual_limit": 1000,
"reason": "Exceeded maximum limit of 1000"
}
}
}Tools with Limit Parameters
The following tools accept optional limit parameters:
search_by_source(source, limit=100)search_by_type(entity_type, limit=100)search_by_name(name_pattern, case_sensitive=False, limit=100)advanced_query(filter_dict=None, limit=100, skip=0, ...)
Safety Features
advanced_queryrequires filter criteria to prevent accidental full database dumpsAll limits are enforced server-side with automatic constraint reporting
Deep pagination (skip > 50,000) is blocked to prevent performance issues
Setup
Development
Install dependencies for development:
make devTesting
Run the complete test suite:
make allTest specific components:
# API integration tests
make test-integration
# MCP protocol tests
make test-mcp
make test-mcp-extended
# Test with Claude CLI
make test-claude-mcp
# Version check
make test-versionMCP Integration
Claude Desktop Configuration
Option 1: From GitHub (Recommended)
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"bertron-mcp": {
"command": "uvx",
"args": ["--from", "git+https://github.com/ber-data/bertron-mcp.git", "bertron-mcp"]
}
}
}Option 2: Local Development
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"bertron-mcp": {
"command": "uv",
"args": ["run", "python", "src/bertron_mcp/main.py"],
"cwd": "/path/to/bertron-mcp"
}
}
}Claude Code MCP Setup
From GitHub:
claude mcp add bertron-mcp "uvx --from git+https://github.com/ber-data/bertron-mcp.git bertron-mcp"Local development:
claude mcp add -s project bertron-mcp uv run python src/bertron_mcp/main.pyProduction (after publishing to PyPI):
claude mcp add -s project bertron-mcp uvx bertron-mcpGoose Setup
From GitHub:
goose session --with-extension "uvx --from git+https://github.com/ber-data/bertron-mcp.git bertron-mcp"Local development:
goose session --with-extension "uv run python src/bertron_mcp/main.py"Usage Examples
Using with Claude
Search for genomic samples near Orlando, FL within 100km radius:
> Use the bertron-mcp to search for entities near latitude 28.5383, longitude -81.3792 within 100km
Search for entities in a bounding box covering Yellowstone National Park:
> Use bbox_search to find entities between southwest corner (44.0, -125.0) and northeast corner (49.0, -110.0)
Find all NMDC sample entities:
> Search for all sample entities from the NMDC data source
Look up detailed information for a specific entity:
> Use entity_lookup to get details for entity ID "nmdc:bsm-12-abc123"Direct MCP Protocol
# Test geosearch tool
echo '{"jsonrpc": "2.0", "method": "tools/call", "params": {"name": "geosearch", "arguments": {"latitude": 28.5383, "longitude": -81.3792, "search_radius_km": 100.0}}, "id": 1}' | uv run python src/bertron_mcp/main.py
# Test bounding box search
echo '{"jsonrpc": "2.0", "method": "tools/call", "params": {"name": "bbox_search", "arguments": {"southwest_lat": 44.0, "southwest_lng": -125.0, "northeast_lat": 49.0, "northeast_lng": -110.0}}, "id": 2}' | uv run python src/bertron_mcp/main.py
# Test search by data source
echo '{"jsonrpc": "2.0", "method": "tools/call", "params": {"name": "search_by_source", "arguments": {"source": "NMDC"}}, "id": 3}' | uv run python src/bertron_mcp/main.py
# Test advanced query with filtering
echo '{"jsonrpc": "2.0", "method": "tools/call", "params": {"name": "advanced_query", "arguments": {"filter_dict": {"entity_type": "sample"}, "limit": 10}}, "id": 4}' | uv run python src/bertron_mcp/main.pyDevelopment
Code Quality
# Format and lint code
make format
make lint
# Type checking
make mypy
# Dependency analysis
make deptryBuilding and Publishing
# Build package
make build
# Full release workflow
make releaseData Sources
BERtron aggregates data from:
EMSL - Environmental Molecular Sciences Laboratory
ESS-DIVE - ESS Data and Information for Virtual Ecosystems
JGI - Joint Genome Institute
MONET - Molecular Observation Network
NMDC - National Microbiome Data Collaborative
Contributing
Fork the repository
Create a feature branch:
git checkout -b feature/your-featureMake changes and add tests
Run the test suite:
make allCommit your changes:
git commit -m "Add your feature"Push to the branch:
git push origin feature/your-featureSubmit a pull request
License
BSD-3-Clause
Available Tools
8 toolsadvanced_queryAdvanced Database QueryB
Execute sophisticated searches with custom filters, field selection, pagination, and sorting options
| Name | Required | Description | Default |
|---|---|---|---|
| filter_dict | No | ||
| projection | No | ||
| skip | No | ||
| limit | No | ||
| sort | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It implies a read-only query operation but does not explicitly state that it is non-destructive, nor does it mention rate limits, authentication needs, or other behavioral traits. It adds minimal value beyond the name.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that efficiently enumerates key capabilities without extraneous words. It is front-loaded and fits within a standard length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While an output schema exists (reducing need to describe returns), the description lacks details on parameter usage, constraints, or error conditions. Given the tool has five parameters with no schema descriptions, more information would improve completeness. It is minimally adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the five parameters have no inline descriptions. The description lists 'custom filters, field selection, pagination, and sorting options,' which loosely map to filter_dict, projection, skip/limit, and sort respectively, providing some semantic link. However, it does not explain parameter formats or constraints, leaving gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it performs sophisticated searches with custom filters, field selection, pagination, and sorting, indicating a general-purpose query tool. However, it does not explicitly differentiate itself from sibling tools like search_by_name or bbox_search, which could lead to ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. The description lacks context about scenarios or prerequisites, leaving the agent to infer usage without explicit direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bbox_searchRegional Bounding Box SearchB
Find all samples within a rectangular geographic region defined by corner coordinates
| Name | Required | Description | Default |
|---|---|---|---|
| southwest_lat | Yes | ||
| southwest_lng | Yes | ||
| northeast_lat | Yes | ||
| northeast_lng | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are empty, so the description carries full burden. It does not disclose any behavioral traits beyond the basic operation, e.g., whether coordinates are in WGS84, if results are paginated, or any limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence that directly conveys the tool's purpose with no wasted words. It is front-loaded with the primary action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite the tool's apparent simplicity, the description lacks information about coordinate system, box inclusiveness, maximum bounding box size, or any constraints. Even with an output schema, the agent needs more context to use it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds meaning by stating 'rectangular geographic region' and 'corner coordinates', but does not clarify coordinate system or parameter order. Parameter names and titles provide some semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Find', the resource 'samples', and the method 'within a rectangular geographic region defined by corner coordinates'. It differentiates from sibling tools like geosearch, which likely handles point-radius searches.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like geosearch or advanced_query. The description does not mention any use cases or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
entity_lookupSample Details LookupA
Get comprehensive metadata for a specific biological sample or dataset using its unique identifier
| Name | Required | Description | Default |
|---|---|---|---|
| entity_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden for behavioral disclosure. It states 'Get' implying a read-only operation, but does not disclose any behavioral traits such as authentication requirements, rate limits, error handling for invalid IDs, or output characteristics beyond the existence of an output schema. This is insufficient for a tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is concise and front-loaded with the key action and resource. No filler or redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity (one required parameter, output schema exists), the description covers the basic purpose and usage. However, it lacks details on error scenarios (e.g., invalid ID), what 'comprehensive metadata' includes, and any behavioral context (like rate limits or authentication), making it minimally complete but with gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has one parameter 'entity_id' with 0% schema description coverage. The description only mentions 'using its unique identifier', which adds no meaning beyond the parameter name. The description does not compensate by explaining format, constraints, or valid values, leaving the agent to guess.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get', the resource 'comprehensive metadata for a specific biological sample or dataset', and the method 'using its unique identifier'. It distinguishes from sibling search tools like search_by_name or search_by_type, which do not use a unique identifier.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies usage when a unique identifier is available and comprehensive metadata is needed. The context of sibling tools (search, query) provides implicit when-not-to-use guidance, but there is no explicit exclusion or alternative mentioned. This is clear context without exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
geosearchGeographic Sample SearchC
Find genomic and environmental samples near any location on Earth using latitude/longitude coordinates
| Name | Required | Description | Default |
|---|---|---|---|
| latitude | Yes | ||
| longitude | Yes | ||
| search_radius_km | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With empty annotations, the description carries full burden for disclosing behavioral traits. It does not mention side effects, rate limits, authentication, pagination, or result limitations, leaving significant unknowns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, which is concise but lacks structure. It could be improved with bullet points or clearer separation of purpose from usage details. It is not overly verbose but misses opportunities for clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 3 parameters and an output schema, the description is too sparse. It does not explain expected inputs, output structure, or limitations. It fails to provide a complete picture for the agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description should explain what each parameter means and how to use them. However, it only reiterates the tool's purpose without detailing the inputs (e.g., coordinate format, radius range), adding no value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: finding genomic/environmental samples near any location using coordinates. It is informative but does not explicitly differentiate from sibling tools like bbox_search, which might also perform geographic searches.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. The description lacks any context about preferred scenarios, prerequisites, or exclusions, making it difficult for an agent to decide when to select this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
health_checkAPI Health StatusA
Verify that the BERtron API and database are online and responding correctly
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of transparency. It clearly states the tool checks online status and correct response, which is sufficient for a simple health check. No side effects are expected.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no unnecessary words. It is front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple no-parameter tool with an output schema, the description is mostly complete. It could mention what the output looks like, but that is presumably covered by the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, and schema description coverage is 100% (trivially). The description adds meaning by explaining the tool's purpose beyond the empty schema, earning a baseline of 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Verify') and clearly identifies the resource ('BERtron API and database'). It is unambiguous and distinguishes well from sibling tools which focus on data queries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for checking system status, but does not explicitly state when to use this tool versus alternatives (e.g., before starting queries). No exclusions or when-not-to-use guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_by_nameText Search by Name/DescriptionC
Search through sample names, project titles, and descriptions using text patterns and keywords
| Name | Required | Description | Default |
|---|---|---|---|
| name_pattern | Yes | ||
| case_sensitive | No | ||
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| entities | Yes | |
| count | Yes | |
| query_type | No | |
| metadata | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are empty, so description carries full burden. It mentions text pattern matching but does not explain default values for case_sensitive and limit, or behavior like wildcards, pagination, or ordering.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence, concise and to the point. Could be slightly improved by adding parameter context without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 3 parameters and no annotations, the description lacks details on pattern syntax, default behavior, and output format. Incomplete for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% parameter description coverage. Description does not explain any parameter beyond the general concept of text patterns; case_sensitive and limit are not addressed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it searches across sample names, project titles, and descriptions using text patterns. The name and title support this, but it does not differentiate from sibling search tools like search_by_source or search_by_type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like advanced_query or search_by_source. No instructions on prerequisites or limitations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_by_sourceSearch by Research FacilityB
Find samples and datasets from specific DOE research facilities (EMSL, ESS-DIVE, JGI, NMDC, MONET)
| Name | Required | Description | Default |
|---|---|---|---|
| source | Yes | ||
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so description must carry the burden of behavioral traits. It does not disclose any side effects, auth needs, rate limits, or behavior when source is invalid. It only lists example facilities without confirming they are exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that directly states the tool's purpose. It is concise and front-loads the action, with no redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has two simple parameters and an output schema, the description is somewhat complete but lacks details on valid source values and limit usage. It would benefit from clarifying the exact input format for source.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds partial meaning by listing example facility codes for the source parameter, but does not clarify if these are the only valid values or explain the limit parameter. Schema coverage is 0%, so the description partially compensates but is insufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool finds samples and datasets from specific DOE research facilities, listing examples (EMSL, ESS-DIVE, etc.). It distinguishes from siblings like search_by_name and bbox_search by focusing on source/facility.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. It does not mention that it should be used when the user knows the facility name or that other tools handle different criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_by_typeSearch by Data TypeA
Find specific types of biological or environmental data (samples, sequences, biodata, taxa)
| Name | Required | Description | Default |
|---|---|---|---|
| entity_type | Yes | ||
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fails to disclose behavioral traits such as whether the operation is read-only, pagination behavior, or error handling. It only states the basic function, missing details that help an agent anticipate side effects or constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no filler. Every word adds value, and the core information is presented upfront, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is adequate given the output schema (which documents return values) and low parameter count. However, it lacks details on pagination, valid entity types, and does not reference sibling tools to guide selection, leaving some gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, but the description adds meaning to 'entity_type' by listing example values (samples, sequences, biodata, taxa). However, 'limit' is not explained, and the description does not clarify that entity_type may be an enumeration or free text, leaving ambiguity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: to find specific types of biological or environmental data, listing examples like samples, sequences, biodata, and taxa. This distinguishes it from siblings like search_by_name or search_by_source, which filter by other criteria.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for searching by type but provides no explicit guidance on when to use it versus alternatives (e.g., advanced_query, bbox_search). It does not mention when not to use it or specify any prerequisites, leaving the agent to infer usage from context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
The specific search tools (bbox_search, geosearch, search_by_name, etc.) each target distinct criteria, but the generic advanced_query tool overlaps with all of them, creating potential confusion for tool selection.
Tool names use a mix of patterns: adjective_noun (advanced_query), abbreviation_noun (bbox_search), noun_verb (entity_lookup, health_check), and verb_preposition_noun (search_by_name, etc.), with no consistent convention.
8 tools is an appropriate scope for a query-focused data server; not too many or too few.
The server covers a wide range of query methods (text, location, facility, type) and includes a health check, but lacks tools for discovering available sources or types without a specific query, and does not include any write operations.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP gateway federating 21 biomedical MCP servers behind one endpoint: gnomAD, ClinVar, HPO, VEP.
MCP server for Mireye Earth — federal-source-cited geospatial data for any MCP-aware agent.
Hosted MCP server for finding authoritative primary data sources and official portals.
Geospatial MCP server for earthquake, tsunami, volcano, disaster, and FX data queries.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceMCP server for interacting with Google Earth Engine, enabling geospatial analysis such as dataset visualization, statistics computation, and search via AI assistants.14MIT
- AlicenseAqualityAmaintenanceA high-performance MCP server that gives LLMs access to 25 biomedical tools federated across 50+ upstream APIs for genes, variants, drugs, diseases, literature, clinical trials, and structural biology.412,0542Apache 2.0
- AlicenseNot gradedqualityAmaintenanceFederates 13 gene-related MCP backends (gnomAD, GTEx, etc.) behind a single Streamable HTTP endpoint with collision-free namespacing and search-based tool discovery.2MIT
- AlicenseCqualityCmaintenanceMCP server for the Geopera geospatial data platform that enables AI agents to discover imagery, place and manage orders, and run analytics using the same API as other Geopera clients.100MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/ber-data/bertron-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server