iflow-mcp_uniprot-mcp-server 0.1.0
MCP server for UniProt protein data access
Requires Python: >=3.10

# 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