Retrieve protein sequences and functional information from UniProt database by protein name, enabling protein analysis and bioinformatics workflows.
Scanned 9/7/2026
Install to Claude Code
npx -y skills add InternScience/scp --skill uniprot-protein-retrieval --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Uniprot Protein Retrieval?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/internscience-uniprot-protein-retrieval)More formats (shields.io, HTML) on the badges page.
---
name: uniprot-protein-retrieval
description: Retrieve protein sequences and functional information from UniProt database by protein name, enabling protein analysis and bioinformatics workflows.
license: MIT license
metadata:
skill-author: PJLab
---
# UniProt Protein Sequence Retrieval
## Usage
### 1. MCP Server Definition
Use the standard MCP client pattern for Origene-UniProt server.
### 2. Protein Sequence Retrieval Workflow
This workflow retrieves protein sequences and associated information from the UniProt database using protein names or identifiers.
**Workflow Steps:**
1. **Query by Protein Name** - Search UniProt using common protein names
2. **Retrieve Sequence Data** - Get amino acid sequence and metadata
**Implementation:**
```python
from mcp.client.streamable_http import streamablehttp_client
from mcp import ClientSession
import json
class OrigeneClient:
def __init__(self, server_url: str):
self.server_url = server_url
self.session = None
async def connect(self):
try:
self.transport = streamablehttp_client(
url=self.server_url,
headers={"SCP-HUB-API-KEY": "<your-api-key>"}
)
self.read, self.write, self.get_session_id = await self.transport.__aenter__()
self.session_ctx = ClientSession(self.read, self.write)
self.session = await self.session_ctx.__aenter__()
await self.session.initialize()
print("✓ Connected to Origene-UniProt")
return True
except Exception as e:
print(f"✗ Connection failed: {e}")
return False
async def disconnect(self):
try:
if self.session:
await self.session_ctx.__aexit__(None, None, None)
if hasattr(self, 'transport'):
await self.transport.__aexit__(None, None, None)
print("✓ Disconnected")
except Exception as e:
print(f"✗ Disconnect error: {e}")
def parse_result(self, result):
try:
if hasattr(result, 'content') and result.content:
content = result.content[0]
if hasattr(content, 'text'):
return json.loads(content.text)
return str(result)
except Exception as e:
return {"error": f"Parse error: {e}", "raw": str(result)}
## Initialize client
client = OrigeneClient("https://scp.intern-ai.org.cn/api/v1/mcp/10/Origene-UniProt")
if not await client.connect():
print("Connection failed")
return
## Step 1: Retrieve protein sequence by name
protein_name = "insulin" # Can be common name, gene symbol, or UniProt ID
result = await client.session.call_tool(
"get_protein_sequence_by_name",
arguments={
"protein_name": protein_name
}
)
result_data = client.parse_result(result)
## Display results
print(f"\nProtein: {protein_name}")
print("=" * 80)
if "sequence" in result_data:
sequence = result_data["sequence"]
print(f"Amino Acid Sequence ({len(sequence)} residues):")
print(sequence)
# Format sequence in blocks of 60
print("\nFormatted Sequence:")
for i in range(0, len(sequence), 60):
position = i + 1
block = sequence[i:i+60]
print(f"{position:6d} {block}")
if "uniprot_id" in result_data:
print(f"\nUniProt ID: {result_data['uniprot_id']}")
if "protein_names" in result_data:
print(f"Protein Names: {result_data['protein_names']}")
if "organism" in result_data:
print(f"Organism: {result_data['organism']}")
if "function" in result_data:
print(f"Function: {result_data['function'][:200]}...")
await client.disconnect()
```
### Extended Example: Multiple Protein Retrieval
```python
## Retrieve multiple proteins
protein_list = ["p53", "BRCA1", "insulin", "hemoglobin"]
sequences = {}
for protein in protein_list:
result = await client.session.call_tool(
"get_protein_sequence_by_name",
arguments={"protein_name": protein}
)
data = client.parse_result(result)
if "sequence" in data:
sequences[protein] = {
"sequence": data["sequence"],
"length": len(data["sequence"]),
"uniprot_id": data.get("uniprot_id", "N/A")
}
## Display summary
print("\nProtein Sequence Summary:")
print(f"{'Protein':<15} {'UniProt ID':<12} {'Length':<10}")
print("-" * 40)
for name, info in sequences.items():
print(f"{name:<15} {info['uniprot_id']:<12} {info['length']:<10}")
```
### Tool Description
**Origene-UniProt Server:**
- `get_protein_sequence_by_name`: Retrieve protein sequence from UniProt database
- Args:
- `protein_name` (str): Protein common name, gene symbol, or UniProt ID
- Returns:
- `sequence` (str): Amino acid sequence (one-letter code)
- `uniprot_id` (str): UniProt accession number
- `protein_names` (str): Official and alternative protein names
- `organism` (str): Source organism
- `function` (str): Protein function description
- `length` (int): Sequence length in residues
- `mass` (float): Molecular mass (Da)
### Input/Output
**Input:**
- `protein_name`: Protein identifier (flexible format)
- Examples: "insulin", "P53", "BRCA1", "P01308"
- Supports: common names, gene symbols, UniProt IDs
**Output:**
- Protein sequence and comprehensive metadata
- Ready for downstream analysis (alignment, structure prediction, etc.)
### Supported Query Types
1. **Common Names**: "insulin", "hemoglobin", "actin"
2. **Gene Symbols**: "TP53", "BRCA1", "EGFR"
3. **UniProt IDs**: "P01308", "P04637"
4. **Protein Families**: "kinase", "protease" (returns multiple entries)
### Applications
**Use retrieved sequences for:**
- Protein alignment and homology analysis
- Structure prediction (AlphaFold, ESM Fold)
- Primer design for cloning
- Antibody epitope mapping
- Conservation analysis
- Mutation impact assessment
- Phylogenetic studies
### Integration with Other Workflows
**Combine with:**
1. **Protein BLAST** → Find homologs
2. **InterProScan** → Identify domains
3. **AlphaFold** → Predict 3D structure
4. **STRING** → Find protein interactions
5. **OpenTargets** → Link to diseases
### Example: Complete Protein Analysis Pipeline
```python
## 1. Retrieve sequence
result = await uniprot_client.session.call_tool(
"get_protein_sequence_by_name",
arguments={"protein_name": "BRCA1"}
)
sequence = uniprot_client.parse_result(result)["sequence"]
## 2. Find similar proteins (BLAST)
result = await biotools_client.session.call_tool(
"blast_search",
arguments={
"sequence": sequence,
"evalue": 1e-10,
"max_hits": 20
}
)
homologs = biotools_client.parse_result(result)
## 3. Identify domains (InterProScan)
result = await biotools_client.session.call_tool(
"interproscan_analyze",
arguments={
"sequence": sequence,
"databases": ["Pfam", "SMART"]
}
)
domains = biotools_client.parse_result(result)
## 4. Get disease associations (OpenTargets)
result = await opentargets_client.session.call_tool(
"get_target_associated_diseases",
arguments={"gene_symbol": "BRCA1"}
)
diseases = opentargets_client.parse_result(result)
print(f"Complete analysis for BRCA1:")
print(f"- Sequence length: {len(sequence)} amino acids")
print(f"- Homologs found: {len(homologs)}")
print(f"- Functional domains: {len(domains)}")
print(f"- Associated diseases: {len(diseases)}")
```
### Error Handling
**Common issues:**
- **Protein not found**: Check spelling, try alternative names or UniProt ID
- **Multiple matches**: Use more specific identifier (UniProt ID preferred)
- **No sequence available**: Some entries may lack sequence data
- **Network timeout**: Retry with exponential backoff
### Data Quality Notes
- UniProt is manually curated (Swiss-Prot) and computationally annotated (TrEMBL)
- Sequence quality: Swiss-Prot entries are highly reliable
- Updates: UniProt is updated regularly; sequences may change
- Isoforms: Multiple isoforms may exist; canonical sequence is returned by default
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!