nmdc-mcp
Official# NMDC MCP
A fastmcp-based tool for writing prompts against data in the NMDC database.
## Installation
You can install the package from source using uv:
```bash
uv sync
```
## Usage
You can use the CLI:
```bash
nmdc-mcp
```
Or import in your Python code: # TODO incorrect instructions
```python
from nmdc_mcp.main import create_mcp
mcp = create_mcp()
mcp.run()
```
Or utilize the `nmdc_mcp.client`. This client uses OpenAI API and assumes you have `API_KEY` set in a .env file in the root directory of this repo. The `BASE_URL` and `MODEL` are also customizable in .env. For PNNL staff that want to run via this client - the `BASE_URL` and `MODEL` are specific. Contact Olivia Hess if you need help setting these values up.
```bash
uv run 'path/to/nmdc_mcp/client.py' 'path/to/nmdc_mcp/main.py'
```
Or using python
```bash
python 'path/to/nmdc_mcp/client.py' 'path/to/nmdc_mcp/main.py'
```
## Development
### Local Setup
```bash
# Clone the repository
git clone https://github.com/microbiomedata/nmdc-mcp.git
cd nmdc-mcp
# Install development dependencies
make dev
```
### Development Workflow
The project uses a comprehensive Makefile for development tasks:
```bash
# Run all development checks (tests, formatting, linting, type checking)
make all
# Individual commands
make dev # Install development dependencies
make test-coverage # Run tests with coverage
make format # Format code with black
make lint # Lint with ruff
make mypy # Type checking
make deptry # Check for unused dependencies
make build # Build package
```
### Testing
```bash
# Run all tests with coverage
make test-coverage
# Run specific test types
make test-unit # Unit tests only
make test-integration # Integration tests
make test-real-api # Tests against real NMDC API
make test-mcp # Test MCP protocol
```
### MCP Integration
#### Claude Desktop Setup
Add to `~/Library/Application Support/Claude/claude_desktop_config.json`:
```json
{
"mcpServers": {
"nmdc-mcp": {
"command": "uvx",
"args": ["nmdc-mcp"]
}
}
}
```
#### Claude Code MCP Setup
```bash
claude mcp add -s project nmdc-mcp uvx nmdc-mcp
```
#### Goose Setup
```bash
goose session --with-extension "uvx nmdc-mcp"
```
## License
MITTDQS
Scored across 16 tools
Each tool has a clearly distinct purpose: fetching GFF by PFAM domains, retrieving collection IDs, biosamples by study, collection names/stats, data objects by PFAM, entities by ID with/without projection, samples by annotation/ecosystem/elevation/lat-lon, study DOI details, study for biosample, and searching studies by DOI. Even similar functions like entity retrieval are differentiated by batch vs single and projection vs full.
All tool names follow a consistent verb_noun pattern using snake_case, primarily starting with 'get_' or 'fetch_', with clear and descriptive nouns. The only variation is 'search_studies_by_doi_criteria', but it still maintains the pattern. No mixing of camelCase or inconsistent verb styles.
16 tools is slightly above the typical 3-15 range, but it is well-scoped for the NMDC database query domain. Each tool serves a specific purpose without redundancy, and the count is reasonable given the variety of query needs (by ID, by annotation, by location, etc.).
The tool set covers a comprehensive range of query operations for the NMDC database: listing collections, retrieving entities by ID, searching biosamples by multiple criteria (study, ecosystem, elevation, location, PFAM domains), and accessing study DOIs. Minor gaps include lack of direct query for data objects by other attributes, but for a read-only query interface, this is nearly complete.