UniProt MCP Server
by TakumiY235
# 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