jpskill.com
🛠️ 開発・MCP コミュニティ

uniprot

UniProtのデータベースにアクセスし、タンパク質の配列や機能に関する情報を検索したり、関連するタンパク質や構造の情報を見つけたりするなど、タンパク質に関する様々な情報を効率的に取得するSkill。

📜 元の英語説明(参考)

Access UniProt for protein sequence and annotation retrieval. Use this skill when: (1) Looking up protein sequences by accession, (2) Finding functional annotations, (3) Getting domain boundaries, (4) Finding homologs and variants, (5) Cross-referencing to PDB structures. For structure retrieval, use pdb. For sequence design, use proteinmpnn.

🇯🇵 日本人クリエイター向け解説

一言でいうと

UniProtのデータベースにアクセスし、タンパク質の配列や機能に関する情報を検索したり、関連するタンパク質や構造の情報を見つけたりするなど、タンパク質に関する様々な情報を効率的に取得するSkill。

※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。

⚡ おすすめ: コマンド1行でインストール(60秒)

下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。

🍎 Mac / 🐧 Linux
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o uniprot.zip https://jpskill.com/download/9557.zip && unzip -o uniprot.zip && rm uniprot.zip
🪟 Windows (PowerShell)
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/9557.zip -OutFile "$d\uniprot.zip"; Expand-Archive "$d\uniprot.zip" -DestinationPath $d -Force; ri "$d\uniprot.zip"

完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。

💾 手動でダウンロードしたい(コマンドが難しい人向け)
  1. 1. 下の青いボタンを押して uniprot.zip をダウンロード
  2. 2. ZIPファイルをダブルクリックで解凍 → uniprot フォルダができる
  3. 3. そのフォルダを C:\Users\あなたの名前\.claude\skills\(Win)または ~/.claude/skills/(Mac)へ移動
  4. 4. Claude Code を再起動

⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。

🎯 このSkillでできること

下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。

📦 インストール方法 (3ステップ)

  1. 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
  2. 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
  3. 3. 展開してできたフォルダを、ホームフォルダの .claude/skills/ に置く
    • · macOS / Linux: ~/.claude/skills/
    • · Windows: %USERPROFILE%\.claude\skills\

Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。

詳しい使い方ガイドを見る →
最終更新
2026-05-18
取得日時
2026-05-18
同梱ファイル
1

📖 Skill本文(日本語訳)

※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。

UniProtデータベースへのアクセス

注記: このスキルは、UniProt REST APIを直接使用します。Modalのデプロイは不要で、すべての操作はHTTPリクエストを通じてローカルで実行されます。

シーケンスの取得

アクセッションによる取得

# FASTA形式
curl "https://rest.uniprot.org/uniprotkb/P00533.fasta"

# アノテーション付きJSON形式
curl "https://rest.uniprot.org/uniprotkb/P00533.json"

Pythonの使用

import requests

def get_uniprot_sequence(accession):
    """UniProtからシーケンスを取得します。"""
    url = f"https://rest.uniprot.org/uniprotkb/{accession}.fasta"
    response = requests.get(url)
    if response.ok:
        lines = response.text.strip().split('\n')
        header = lines[0]
        sequence = ''.join(lines[1:])
        return header, sequence
    return None, None

アノテーションの取得

エントリー全体

def get_uniprot_entry(accession):
    """UniProtのエントリー全体をJSONとして取得します。"""
    url = f"https://rest.uniprot.org/uniprotkb/{accession}.json"
    response = requests.get(url)
    return response.json() if response.ok else None

entry = get_uniprot_entry("P00533")
print(f"Protein: {entry['proteinDescription']['recommendedName']['fullName']['value']}")

ドメイン境界

def get_domains(accession):
    """ドメインのアノテーションを抽出します。"""
    entry = get_uniprot_entry(accession)
    domains = []

    for feature in entry.get('features', []):
        if feature['type'] == 'Domain':
            domains.append({
                'name': feature.get('description', ''),
                'start': feature['location']['start']['value'],
                'end': feature['location']['end']['value']
            })

    return domains

# 例: EGFRドメイン
domains = get_domains("P00533")
# [{'name': 'Kinase', 'start': 712, 'end': 979}, ...]

UniProtの検索

遺伝子名による検索

def search_uniprot(query, organism=None, limit=10):
    """クエリでUniProtを検索します。"""
    url = "https://rest.uniprot.org/uniprotkb/search"
    params = {
        "query": query,
        "format": "json",
        "size": limit
    }
    if organism:
        params["query"] += f" AND organism_id:{organism}"

    response = requests.get(url, params=params)
    return response.json()['results']

# ヒトEGFRの検索
results = search_uniprot("EGFR", organism=9606)

配列類似性による検索 (BLAST)

# UniProt BLASTを使用
# https://www.uniprot.org/blast

相互参照

PDB構造の取得

def get_pdb_references(accession):
    """UniProtエントリーのPDB構造を取得します。"""
    entry = get_uniprot_entry(accession)
    pdbs = []

    for xref in entry.get('uniProtKBCrossReferences', []):
        if xref['database'] == 'PDB':
            pdbs.append({
                'pdb_id': xref['id'],
                'method': xref.get('properties', [{}])[0].get('value', ''),
                'chains': xref.get('properties', [{}])[1].get('value', '')
            })

    return pdbs

# 例: EGFRのPDB構造
pdbs = get_pdb_references("P00533")

一般的なユースケース

ターゲットの選択

# 1. 名前でタンパク質を検索
results = search_uniprot("insulin receptor", organism=9606)

# 2. アクセッションを取得
accession = results[0]['primaryAccession']  # 例: P06213

# 3. ドメインを取得
domains = get_domains(accession)

# 4. PDB構造を検索
pdbs = get_pdb_references(accession)

# 5. 設計に最適な構造をダウンロード

配列アラインメント情報

def get_sequence_variants(accession):
    """UniProtから天然変異体を取得します。"""
    entry = get_uniprot_entry(accession)
    variants = []

    for feature in entry.get('features', []):
        if feature['type'] == 'Natural variant':
            variants.append({
                'position': feature['location']['start']['value'],
                'original': feature.get('alternativeSequence', {}).get('originalSequence', ''),
                'variant': feature.get('alternativeSequence', {}).get('alternativeSequences', [''])[0],
                'description': feature.get('description', '')
            })

    return variants

APIリファレンス

Endpoint 説明
/uniprotkb/{id}.fasta FASTAシーケンス
/uniprotkb/{id}.json エントリー全体のJSON
/uniprotkb/search エントリーの検索
/uniprotkb/stream バッチダウンロード

トラブルシューティング

エントリーが見つからない: アクセッション形式を確認してください (例: P00533) レート制限: リクエスト間に遅延を追加してください 大規模なダウンロード: ページネーション付きのstreamエンドポイントを使用してください


: エンベディングにはesm、構造にはcolabfoldでシーケンスを使用します。

📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開

UniProt Database Access

Note: This skill uses the UniProt REST API directly. No Modal deployment needed - all operations run locally via HTTP requests.

Fetching Sequences

By Accession

# FASTA format
curl "https://rest.uniprot.org/uniprotkb/P00533.fasta"

# JSON format with annotations
curl "https://rest.uniprot.org/uniprotkb/P00533.json"

Using Python

import requests

def get_uniprot_sequence(accession):
    """Fetch sequence from UniProt."""
    url = f"https://rest.uniprot.org/uniprotkb/{accession}.fasta"
    response = requests.get(url)
    if response.ok:
        lines = response.text.strip().split('\n')
        header = lines[0]
        sequence = ''.join(lines[1:])
        return header, sequence
    return None, None

Getting Annotations

Full Entry

def get_uniprot_entry(accession):
    """Fetch full UniProt entry as JSON."""
    url = f"https://rest.uniprot.org/uniprotkb/{accession}.json"
    response = requests.get(url)
    return response.json() if response.ok else None

entry = get_uniprot_entry("P00533")
print(f"Protein: {entry['proteinDescription']['recommendedName']['fullName']['value']}")

Domain Boundaries

def get_domains(accession):
    """Extract domain annotations."""
    entry = get_uniprot_entry(accession)
    domains = []

    for feature in entry.get('features', []):
        if feature['type'] == 'Domain':
            domains.append({
                'name': feature.get('description', ''),
                'start': feature['location']['start']['value'],
                'end': feature['location']['end']['value']
            })

    return domains

# Example: EGFR domains
domains = get_domains("P00533")
# [{'name': 'Kinase', 'start': 712, 'end': 979}, ...]

Searching UniProt

By Gene Name

def search_uniprot(query, organism=None, limit=10):
    """Search UniProt by query."""
    url = "https://rest.uniprot.org/uniprotkb/search"
    params = {
        "query": query,
        "format": "json",
        "size": limit
    }
    if organism:
        params["query"] += f" AND organism_id:{organism}"

    response = requests.get(url, params=params)
    return response.json()['results']

# Search for human EGFR
results = search_uniprot("EGFR", organism=9606)

By Sequence Similarity (BLAST)

# Use UniProt BLAST
# https://www.uniprot.org/blast

Cross-References

Get PDB Structures

def get_pdb_references(accession):
    """Get PDB structures for UniProt entry."""
    entry = get_uniprot_entry(accession)
    pdbs = []

    for xref in entry.get('uniProtKBCrossReferences', []):
        if xref['database'] == 'PDB':
            pdbs.append({
                'pdb_id': xref['id'],
                'method': xref.get('properties', [{}])[0].get('value', ''),
                'chains': xref.get('properties', [{}])[1].get('value', '')
            })

    return pdbs

# Example: PDB structures for EGFR
pdbs = get_pdb_references("P00533")

Common Use Cases

Target Selection

# 1. Find protein by name
results = search_uniprot("insulin receptor", organism=9606)

# 2. Get accession
accession = results[0]['primaryAccession']  # e.g., P06213

# 3. Get domains
domains = get_domains(accession)

# 4. Find PDB structure
pdbs = get_pdb_references(accession)

# 5. Download best structure for design

Sequence Alignment Info

def get_sequence_variants(accession):
    """Get natural variants from UniProt."""
    entry = get_uniprot_entry(accession)
    variants = []

    for feature in entry.get('features', []):
        if feature['type'] == 'Natural variant':
            variants.append({
                'position': feature['location']['start']['value'],
                'original': feature.get('alternativeSequence', {}).get('originalSequence', ''),
                'variant': feature.get('alternativeSequence', {}).get('alternativeSequences', [''])[0],
                'description': feature.get('description', '')
            })

    return variants

API Reference

Endpoint Description
/uniprotkb/{id}.fasta FASTA sequence
/uniprotkb/{id}.json Full entry JSON
/uniprotkb/search Search entries
/uniprotkb/stream Batch download

Troubleshooting

Entry not found: Check accession format (e.g., P00533) Rate limits: Add delay between requests Large downloads: Use stream endpoint with pagination


Next: Use sequence with esm for embeddings or colabfold for structure.