Skip to main content
Glama
TakumiY235

UniProt MCP Server

by TakumiY235
README.md
[![MseeP.ai Security Assessment Badge](https://mseep.net/pr/takumiy235-uniprot-mcp-server-badge.png)](https://mseep.ai/app/takumiy235-uniprot-mcp-server)

# UniProt MCP Server

A Model Context Protocol (MCP) server that provides access to UniProt protein information. This server allows AI assistants to fetch protein function and sequence information directly from UniProt.

<a href="https://glama.ai/mcp/servers/ttjbai3lpx">
  <img width="380" height="200" src="https://glama.ai/mcp/servers/ttjbai3lpx/badge" alt="UniProt Server MCP server" />
</a>

## Features

- Get protein information by UniProt accession number
- Batch retrieval of multiple proteins
- Caching for improved performance (24-hour TTL)
- Error handling and logging
- Information includes:
  - Protein name
  - Function description
  - Full sequence
  - Sequence length
  - Organism

## Quick Start

1. Ensure you have Python 3.10 or higher installed
2. Clone this repository:
   ```bash
   git clone https://github.com/TakumiY235/uniprot-mcp-server.git
   cd uniprot-mcp-server
   ```
3. Install dependencies:
   ```bash
   # Using uv (recommended)
   uv pip install -r requirements.txt
   
   # Or using pip
   pip install -r requirements.txt
   ```

## Configuration

Add to your Claude Desktop config file:

- Windows: `%APPDATA%\Claude\claude_desktop_config.json`
- macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
- Linux: `~/.config/Claude/claude_desktop_config.json`

```json
{
  "mcpServers": {
    "uniprot": {
      "command": "uv",
      "args": ["--directory", "path/to/uniprot-mcp-server", "run", "uniprot-mcp-server"]
    }
  }
}
```

## Usage Examples

After configuring the server in Claude Desktop, you can ask questions like:

```
Can you get the protein information for UniProt accession number P98160?
```

For batch queries:

```
Can you get and compare the protein information for both P04637 and P02747?
```

## API Reference

### Tools

1. `get_protein_info`
   - Get information for a single protein
   - Required parameter: `accession` (UniProt accession number)
   - Example response:
     ```json
     {
       "accession": "P12345",
       "protein_name": "Example protein",
       "function": ["Description of protein function"],
       "sequence": "MLTVX...",
       "length": 123,
       "organism": "Homo sapiens"
     }
     ```

2. `get_batch_protein_info`
   - Get information for multiple proteins
   - Required parameter: `accessions` (array of UniProt accession numbers)
   - Returns an array of protein information objects

## Development

### Setting up development environment

1. Clone the repository
2. Create a virtual environment:
   ```bash
   python -m venv .venv
   source .venv/bin/activate  # On Windows: .venv\Scripts\activate
   ```
3. Install development dependencies:
   ```bash
   pip install -e ".[dev]"
   ```

### Running tests

```bash
pytest
```

### Code style

This project uses:
- Black for code formatting
- isort for import sorting
- flake8 for linting
- mypy for type checking
- bandit for security checks
- safety for dependency vulnerability checks

Run all checks:
```bash
black .
isort .
flake8 .
mypy .
bandit -r src/
safety check
```

## Technical Details

- Built using the MCP Python SDK
- Uses httpx for async HTTP requests
- Implements caching with 24-hour TTL using an OrderedDict-based cache
- Handles rate limiting and retries
- Provides detailed error messages

### Error Handling

The server handles various error scenarios:
- Invalid accession numbers (404 responses)
- API connection issues (network errors)
- Rate limiting (429 responses)
- Malformed responses (JSON parsing errors)
- Cache management (TTL and size limits)

## Contributing

We welcome contributions! Please feel free to submit a Pull Request. Here's how you can contribute:

1. Fork the repository
2. Create your feature branch (`git checkout -b feature/amazing-feature`)
3. Commit your changes (`git commit -m 'Add some amazing feature'`)
4. Push to the branch (`git push origin feature/amazing-feature`)
5. Open a Pull Request

Please make sure to update tests as appropriate and adhere to the existing coding style.

## License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.

## Acknowledgments

- UniProt for providing the protein data API
- Anthropic for the Model Context Protocol specification
- Contributors who help improve this project

TDQS

B3.3/5.0

Scored across 2 tools

Disambiguation5/5

The two tools have clearly distinct purposes: get_protein_info retrieves detailed function and sequence information for a single protein accession, while get_batch_protein_info handles multiple accessions in batch. There is no overlap or ambiguity in their functions.

Naming Consistency5/5

Both tools follow a consistent verb_noun pattern with 'get_' prefix and snake_case naming. The naming clearly indicates the action (get) and target (protein_info), with batch differentiation for the multi-accession tool.

Tool Count2/5

With only two tools, the server feels severely under-scoped for a UniProt domain. While the tools cover basic retrieval, there are obvious gaps for operations like searching, filtering, or accessing related data (e.g., taxonomy, structures), making the surface too thin for comprehensive protein information workflows.

Completeness2/5

The server is severely incomplete for UniProt functionality. It only provides protein information retrieval (single and batch), missing essential operations like search_by_keyword, get_taxonomy, get_structure, or update tracking. This will cause agent failures when trying to perform typical bioinformatics tasks beyond simple lookups.

Maintenance

ActivityInactive
ResponsivenessNo issues