mcpField
D
database-lookup

database-lookup

github.com/itallstartedwithaideaデータ・データベース4479 回インストール29 週間前に更新
リポジトリ

database-lookup について

database-lookup は、科学・公共データベースの情報を取得・統合する Agent Skills のスキルです。クエリの振り分け、結果の正規化、レスポンスのキャッシュにより、再現可能な研究を支援します。

主な機能

  1. 0178以上の科学・公共データベースを検索
  2. 02データ分野に応じてクエリを振り分け
  3. 03レスポンスを DataFrame に正規化
  4. 04ページネーションと API エラーに対応
  5. 05結果をキャッシュしてオフライン分析

活用シーン

  1. 01PubChem または ChEMBL から化合物データを取得
  2. 02UniProt でタンパク質情報を検索
  3. 03ClinicalTrials.gov で研究を検索
  4. 04複数の研究データベースの情報を統合

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/itallstartedwithaidea/agent-skills --skill database-lookup

インストール後、Claude Code で/database-lookupを入力して読み込まれたか確認します。

詳細

データベース検索

googleadsagent.ai™ による Agent Skills™ の一部です

説明

Database Lookup は、化学(PubChem、ChEMBL)、生物学(UniProt、COSMIC、Ensembl)、臨床(ClinicalTrials.gov、FDA)、経済(FRED、World Bank)、知的財産(USPTO、EPO)にまたがる78以上の科学・公共データベースに、統一されたプログラム経由でアクセスできる機能を提供します。エージェントはAPIクエリを構築し、ページネーションを処理し、レスポンスを正規化して、再現可能な研究ワークフローのために結果をキャッシュします。

科学研究では、複数の異種データベースからデータを統合することがますます重要になっています。創薬プロジェクトでは、1つの研究課題に対して、ChEMBLで生物活性データを、UniProtで標的タンパク質の情報を、PubChemで化合物の特性を、ClinicalTrials.govで関連する臨床試験を、FREDで医療費の傾向を検索することがあります。このスキルは、APIごとの違いを抽象化し、統一されたクエリインターフェースを提供します。

各データベースコネクターは、認証、レート制限、レスポンスの解析、エラー回復を処理します。結果は、ソースAPIの形式(REST JSON、XML、CSV、SPARQL)にかかわらず、一貫したスキーマ(型付き列を持つDataFrame)に正規化されます。キャッシュにより、APIへの重複した呼び出しを防ぎ、以前に取得したデータを使ったオフライン分析が可能になります。

使用する場面

  • PubChemまたはChEMBLから化合物データを取得する
  • UniProtからタンパク質配列または注釈を検索する
  • ClinicalTrials.govで臨床試験を検索する
  • FREDまたはWorld Bankから経済指標を取得する
  • USPTOで特許情報を検索する
  • 複数の科学データベースにまたがるデータを統合する

仕組み

graph TD
    A[Research Query] --> B[Query Router]
    B --> C{Database Selection}
    C -->|Chemistry| D[PubChem / ChEMBL / DrugBank]
    C -->|Biology| E[UniProt / Ensembl / COSMIC]
    C -->|Clinical| F[ClinicalTrials.gov / FDA / OMIM]
    C -->|Economics| G[FRED / World Bank / BLS]
    C -->|Patents| H[USPTO / EPO / WIPO]
    D --> I[API Request + Rate Limiting]
    E --> I
    F --> I
    G --> I
    H --> I
    I --> J[Response Normalization]
    J --> K[Cache Layer]
    K --> L[Unified DataFrame Output]

クエリルーターは、クエリの種類とエンティティに基づいて適切なデータベースを特定します。すべてのレスポンスは正規化され、列名と型が標準化された一貫性のあるDataFrameが生成されます。

実装

import requests
import pandas as pd
from functools import lru_cache
from time import sleep

class DatabaseClient:
    BASE_URLS = {
        "pubchem": "https://pubchem.ncbi.nlm.nih.gov/rest/pug",
        "chembl": "https://www.ebi.ac.uk/chembl/api/data",
        "uniprot": "https://rest.uniprot.org/uniprotkb",
        "clinicaltrials": "https://clinicaltrials.gov/api/v2/studies",
        "fred": "https://api.stlouisfed.org/fred/series/observations",
    }

    def __init__(self, cache_dir: str = ".db_cache"):
        self.session = requests.Session()
        self.session.headers["User-Agent"] = "AgentSkills/1.0 (research)"

    def pubchem_compound(self, name: str) -> dict:
        url = f"{self.BASE_URLS['pubchem']}/compound/name/{name}/JSON"
        resp = self._get(url)
        props = resp["PC_Compounds"][0]["props"]
        return {
            "cid": resp["PC_Compounds"][0]["id"]["id"]["cid"],
            "name": name,
            "properties": {p["urn"]["label"]: p["value"] for p in props},
        }

    def chembl_target(self, uniprot_id: str) -> pd.DataFrame:
        url = f"{self.BASE_URLS['chembl']}/target.json"
        resp = self._get(url, params={
            "target_components__accession": uniprot_id,
            "limit": 100,
        })
        return pd.json_normalize(resp["targets"])

    def uniprot_search(self, query: str, limit: int = 25) -> pd.DataFrame:
        url = f"{self.BASE_URLS['uniprot']}/search"
        resp = self._get(url, params={
            "query": query,
            "format": "json",
            "size": limit,
            "fields": "accession,id,protein_name,organism_name,length,sequence",
        })
        return pd.json_normalize(resp["results"])

    def clinical_trials(self, condition: str, status: str = "RECRUITING") -> pd.DataFrame:
        url = self.BASE_URLS["clinicaltrials"]
        resp = self._get(url, params={
            "query.cond": condition,
            "filter.overallStatus": status,
            "pageSize": 50,
        })
        return pd.json_normalize(resp["studies"])

    def fred_series(self, series_id: str, api_key: str) -> pd.DataFrame:
        url = self.BASE_URLS["fred"]
        resp = self._get(url, params={
            "series_id": series_id,
            "api_key": api_key,
            "file_type": "json",
        })
        df = pd.DataFrame(resp["observations"])
        df["value"] = pd.to_numeric(df["value"], errors="coerce")
        df["date"] = pd.to_datetime(df["date"])
        return df

    def _get(self, url: str, params: dict = None) -> dict:
        sleep(0.25)
        resp = self.session.get(url, params=params, timeout=30)
        resp.raise_for_status()
        return resp.json()

ベストプラクティス

  • レート制限を遵守してください。PubChemは5 req/s、ChEMBLは1 req/s、UniProtは3 req/sです
  • オフライン分析を可能にし、サーバー負荷を軽減するため、APIレスポンスをすべてローカルにキャッシュしてください
  • データベースをまたいで結合する前に、識別子(CID、ChEMBL ID、UniProt accession)を正規化してください
  • 大量の結果を取得する場合はページネーションを処理してください。すべての結果が1回のレスポンスに収まると想定しないでください
  • 再現性を確保するため、タイムスタンプとレスポンスハッシュを含め、すべてのAPIクエリをログに記録してください
  • ツール名と連絡先情報を示すUser-Agentヘッダーを設定してください

プラットフォームの互換性

プラットフォームサポート備考
Cursor完全対応Python + HTTPクライアント
VS Code完全対応RESTクライアント統合
Windsurf完全対応APIクエリに対応
Claude Code完全対応データベースクエリの生成
Cline完全対応API統合
aider部分対応コードレベルでサポート

関連スキル

キーワード

database-lookup pubchem chembl uniprot clinical-trials fred scientific-databases api-integration data-retrieval


© 2026 googleadsagent.ai™ | Agent Skills™ | MIT License

コメント