mcpField
I
INDIAN MEDICINES (MCP SERVER)

INDIAN MEDICINES (MCP SERVER)

ローカル
github.com/nowitsidbヘルスケア780 週間前に更新

INDIAN MEDICINES (MCP SERVER) について

INDIAN MEDICINESは、指定されたデータベースの医薬品情報を検索・分析するMCPサーバーです。名称の完全一致・あいまい検索、成分や価格による絞り込み、成分分析、代替薬の提案に対応します。

主な機能

  1. 01医薬品名の完全一致・あいまい検索
  2. 02有効成分による検索
  3. 03価格、メーカー、処方要件による絞り込み
  4. 04成分分析と類似薬の比較
  5. 05代替薬の提案とデータベース統計

活用シーン

  1. 01正確な名称や誤記から医薬品を探す
  2. 02成分が似た医薬品の価格を比較する
  3. 03メーカーや処方要件で記録を絞り込む

MCP 対応

MCPを通じて、医薬品の検索、絞り込み、分析、ユーティリティに関する15のエンドポイントをクライアントに提供します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

インストール方法は未掲載です

このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。

リポジトリ

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

インドの医薬品(MCP SERVER)

Python FastMCP JSON

医薬品情報の検索、代替品の提案、組成の分析を行う包括的なAPIサーバーです。このサーバーは、ファジーマッチングや価格比較などの高度な機能を備え、医薬品データの検索、絞り込み、分析を行う複数のエンドポイントを提供します。

📖 目次

📋 はじめに

MedicineDB API Serverは、医薬品情報への包括的なアクセスを提供するために設計された高性能ツールです。基本的な医薬品検索から、高度な組成分析や代替医薬品の提案まで、幅広い機能を提供します。このサーバーは、正確で関連性の高い結果を提供しながら、大規模なデータセットを効率的に処理できるように構築されています。

✨ 機能

  • 高度な検索機能

    • 医薬品名の完全一致およびファジーマッチング
    • 組成・成分に基づく検索
    • ページネーション付きの複数条件による絞り込み
    • 製造元および価格帯による絞り込み
  • 分析ツール

    • 組成文字列の解析および分析
    • データベースの統計分析
    • 成分の分類
  • 医療上の意思決定支援

    • 代替医薬品の提案
    • 類似する医薬品間の価格比較
    • 処方箋が必要かどうかによる絞り込み
  • パフォーマンスの最適化

    • 高速な検索を実現する複数のインデックス
    • 効率的な類似度計算
    • 抽出済み成分の事前計算

🛠️ 技術スタック

技術用途
Python中核となるプログラミング言語
FastMCPサーバーフレームワーク
JSONデータ保存形式

ライブラリ:

  • difflib:ファジーな文字列照合と医薬品名の類似度判定に使用
  • re:組成文字列の解析と成分の抽出に使用
  • collections:最適化されたデータ構造(defaultdict、Counter)に使用
  • math:価格の分類とページネーションの計算に使用
  • typing:型ヒントに使用
  • dataclasses:構造化データに使用

🚀 インストール

  1. リポジトリをクローンします:
git clone https://github.com/yourusername/medicines-db.git
cd medicines-db
  1. 依存関係をインストールします:
pip install -r requirements.txt
  1. 医薬品データベースを準備します:
# Ensure your JSON data file is at the correct path
# Default path: /Users/siddharthbajpai/Downloads/MCP_SERVER/medicines.json
# Update DATA_PATH in the code if needed
  1. サーバーを実行します:
python medicines_server.py

📘 使い方

このサーバーは、MCP(Model Context Protocol)アーキテクチャを通じて複数のAPIエンドポイントを公開します。任意のMCPクライアントを使用してサーバーとやり取りできます。

基本的な例:

from mcp.client import MCPClient

# Connect to the server
client = MCPClient("medicines-db")

# Search for a medicine
result = client.search_medicines("paracetamol", max_results=5)
print(result)

# Get alternatives to a specific medicine
alternatives = client.suggest_alternatives("Dolo 650")
print(alternatives)

📚 API リファレンス

このサーバーは、MCPフレームワークを通じて15個のAPIエンドポイントを提供します:

検索エンドポイント
1. get_medicine_by_name
GET /get_medicine_by_name

正確なNameに基づいて医薬品レコードを取得します。より安価な代替品も任意で含められます。

パラメーター:

  • name(文字列、必須):医薬品のNameフィールドと完全に一致する値
  • include_alternatives(ブール値、任意、デフォルト=true):より安価な代替品を結果に含めるかどうか

レスポンス:

{
  "medicine": {
    "Name": "Dolo 650",
    "Manufacturer": "Micro Labs Ltd",
    "Composition": "Paracetamol (650mg)",
    "MRP": "30.29",
    "Prescription": "No",
    "Price_INR": "₹30.29",
    "Price_Category": "Low",
    "Active_Ingredients": ["Paracetamol"],
    "Ingredient_Count": 1,
    "Is_Combination": false,
    "Requires_Prescription": false,
    "Prescription_Type": "Over-the-Counter"
  },
  "cheaper_alternatives": [
    {
      "medicine": {...},
      "price_savings": "₹10.30",
      "savings_percentage": "34.0%",
      "similarity_score": "1.00"
    }
  ]
}
2. search_medicines
GET /search_medicines

すべての医薬品フィールドを対象とした全文検索です。

パラメーター:

  • query(文字列、必須):検索する部分文字列(大文字と小文字を区別しません)
  • max_results(整数、任意、デフォルト=10):返す一致レコードの最大数

レスポンス:

[
  {
    "Name": "Dolo 650",
    "Manufacturer": "Micro Labs Ltd",
    "Composition": "Paracetamol (650mg)",
    "MRP": "30.29",
    "Price_INR": "₹30.29",
    ...
  },
  ...
]
3. fuzzy_search_by_name
GET /fuzzy_search_by_name

ファジーマッチングを使用して、指定した部分的な名前に類似する名前の医薬品を検索します。

パラメーター:

  • partial_name(文字列、必須):検索する医薬品名の一部、または誤記された医薬品名
  • similarity_threshold(数値、任意、デフォルト=0.6):結果に含める最低類似度スコア(0.0~1.0)
  • max_results(整数、任意、デフォルト=10):返す一致レコードの最大数

レスポンス:

[
  {
    "similarity_score": "0.92",
    "medicine": {
      "Name": "Dolo 650",
      ...
    }
  },
  ...
]
4. search_by_composition
GET /search_by_composition

特定の有効成分を含む医薬品を検索します。

パラメーター:

  • ingredient(文字列、必須):検索する有効成分の名前
  • max_results(整数、任意、デフォルト=10):返す一致レコードの最大数

レスポンス:

[
  {
    "Name": "Dolo 650",
    "Composition": "Paracetamol (650mg)",
    ...
  },
  ...
]
フィルターエンドポイント
5. filter_by_price_range
GET /filter_by_price_range

価格帯で医薬品を絞り込みます。

パラメーター:

  • min_price(数値、任意、デフォルト=0):最低価格(INR)
  • max_price(数値、任意、デフォルト=null):最高価格(INR)
  • max_results(整数、任意、デフォルト=20):返す一致レコードの最大数

レスポンス:

[
  {
    "Name": "Crocin Pain Relief",
    "MRP": "49.43",
    "Price_INR": "₹49.43",
    ...
  },
  ...
]
6. filter_by_manufacturer
GET /filter_by_manufacturer

製造元で医薬品を絞り込みます。

パラメーター:

  • manufacturer(文字列、必須):製造元の正式名称またはその一部
  • max_results(整数、任意、デフォルト=20):返す一致レコードの最大数

レスポンス:

[
  {
    "Name": "Dolo 650",
    "Manufacturer": "Micro Labs Ltd",
    ...
  },
  ...
]
7. filter_by_prescription_requirement
GET /filter_by_prescription_requirement

処方箋の要否で医薬品を絞り込みます。

パラメーター:

  • prescription_required(ブール値、必須):処方薬の場合はTrue、市販薬の場合はFalse
  • max_results(整数、任意、デフォルト=20):返す一致レコードの最大数

レスポンス:

[
  {
    "Name": "Dolo 650",
    "Prescription": "No",
    "Requires_Prescription": false,
    "Prescription_Type": "Over-the-Counter",
    ...
  },
  ...
]
8. paginated_search
GET /paginated_search

ページネーションと複数のフィルターを使用した高度な検索です。

パラメーター:

  • query(文字列、任意、デフォルト=""):一般的な検索語(すべてのフィールドを検索)
  • page(整数、任意、デフォルト=1):ページ番号(1から開始)
  • page_size(整数、任意、デフォルト=10):1ページあたりの結果数
  • manufacturer(文字列、任意、デフォルト=""):製造元で絞り込み(正式名称またはその一部)
  • min_price(数値、任意、デフォルト=0):最低価格のフィルター
  • max_price(数値、任意、デフォルト=null):最高価格のフィルター
  • prescription_required(ブール値またはnull、任意、デフォルト=null):処方箋の要否で絞り込み(任意の場合はnull)
  • ingredient(文字列、任意、デフォルト=""):有効成分で絞り込み

レスポンス:

{
  "meta": {
    "total_results": 150,
    "page": 1,
    "page_size": 10,
    "total_pages": 15
  },
  "results": [
    {
      "Name": "Dolo 650",
      ...
    },
    ...
  ]
}
分析エンドポイント
9. find_similar_medicines
GET /find_similar_medicines

指定した医薬品と組成が類似する医薬品を検索します。

パラメーター:

  • medicine_name(文字列、必須):参照する医薬品の名前
  • max_results(整数、任意、デフォルト=5):返す類似医薬品の最大数

レスポンス:

{
  "reference_medicine": {
    "Name": "Dolo 650",
    ...
  },
  "similar_medicines": [
    {
      "similarity_score": "1.00",
      "medicine": {
        "Name": "Crocin Pain Relief",
        ...
      }
    },
    ...
  ]
}
10. analyze_composition
GET /analyze_composition

医薬品の組成文字列を分析し、成分を抽出して構造化します。

パラメーター:

  • composition(文字列、必須):組成文字列(例:"Ambroxol (30mg/5ml) + Levosalbutamol (1mg/5ml)")

レスポンス:

{
  "raw_composition": "Ambroxol (30mg/5ml) + Levosalbutamol (1mg/5ml)",
  "ingredients": [
    {
      "raw_text": "Ambroxol (30mg/5ml)",
      "name": "Ambroxol",
      "dosage": "30mg/5ml",
      "dosage_value": "30",
      "dosage_unit": "mg"
    },
    {
      "raw_text": "Levosalbutamol (1mg/5ml)",
      "name": "Levosalbutamol",
      "dosage": "1mg/5ml",
      "dosage_value": "1",
      "dosage_unit": "mg"
    }
  ],
  "medicines_with_this_composition": [
    {
      "Name": "Ascoril LS Syrup",
      ...
    },
    ...
  ]
}
11. count_medicines_by_composition
GET /count_medicines_by_composition

特定の組成を持つ、または特定の成分を含む医薬品をすべて数え、一覧表示します。

パラメーター:

  • composition(文字列、必須):検索する組成または成分
  • exact_match(ブール値、任意、デフォルト=false):Trueの場合、組成が完全に一致する医薬品のみを検索します。Falseの場合、この成分を含む医薬品を検索します。

レスポンス:

{
  "query": "Paracetamol",
  "exact_match": false,
  "total_medicines_found": 500,
  "total_manufacturers": 25,
  "price_statistics": {
    "min_price": "₹10.50",
    "max_price": "₹150.75",
    "avg_price": "₹45.30",
    "total_medicines_with_price": 490
  },
  "medicines": [...],
  "by_manufacturer": {
    "Cipla": {
      "count": 50,
      "medicines": [...]
    },
    ...
  }
}
12. categorize_medicines
GET /categorize_medicines

有効成分に基づいて医薬品を分類し、最も一般的なカテゴリーを返します。

パラメーター:

  • max_categories(整数、任意、デフォルト=10):返すカテゴリーの最大数

レスポンス:

[
  {
    "category": "Paracetamol",
    "medicine_count": 500,
    "example_medicines": [...]
  },
  {
    "category": "Amoxicillin",
    "medicine_count": 300,
    "example_medicines": [...]
  },
  ...
]
ユーティリティエンドポイント
13. get_medicine_statistics
GET /get_medicine_statistics

医薬品データベースの統計概要を取得します。

パラメーター: なし

レスポンス:

{
  "total_medicines": 15000,
  "prescription_count": 7500,
  "otc_count": 7000,
  "unknown_prescription_status": 500,
  "manufacturer_counts": {
    "Sun Pharma": 1200,
    "Cipla": 900,
    ...
  },
  "price_distribution": {
    "min_price": "₹1.50",
    "max_price": "₹2500.00",
    "avg_price": "₹125.45",
    "price_ranges": {
      "₹0 - ₹99.99": 5000,
      "₹100 - ₹199.99": 4000,
      ...
    }
  },
  "common_ingredients": {
    "Paracetamol": 500,
    "Amoxicillin": 300,
    ...
  }
}
14. get_all_manufacturers
GET /get_all_manufacturers

データベース内のすべての製造元の一覧を取得します。

パラメーター: なし

レスポンス:

[
  {
    "name": "Sun Pharma",
    "medicine_count": 1200
  },
  {
    "name": "Cipla",
    "medicine_count": 900
  },
  ...
]
15. suggest_alternatives
GET /suggest_alternatives

成分の類似性と価格に基づいて、代替医薬品を提案します。

パラメーター:

  • medicine_name (string, required):基準となる医薬品の名前
  • max_suggestions (integer, optional, default=5):提案する代替品の最大数

レスポンス:

{
  "reference_medicine": {
    "Name": "Dolo 650",
    "MRP": "30.29",
    ...
  },
  "alternatives": [
    {
      "medicine": {
        "Name": "Calpol 650",
        "MRP": "26.50",
        ...
      },
      "ingredient_similarity": 1.0,
      "price_difference_percentage": -12.5,
      "price_comparison": "cheaper",
      "absolute_price_difference": 3.79
    },
    ...
  ]
}

📊 データ構造

システムでは、以下の構造を持つ医薬品オブジェクトの JSON 配列を想定しています。

[
  {
    "Name": "Medicine Name",
    "Manufacturer": "Company Name",
    "Composition": "Ingredient1 (10mg) + Ingredient2 (20mg)",
    "MRP": "123.45",
    "Prescription": "Yes"
  },
  ...
]

システムは、このデータに以下の計算フィールドを追加します。

  • Price_INR:通貨記号付きの書式設定済み価格
  • Price_Category:低・中・高・プレミアムの分類
  • Active_Ingredients:抽出された成分の一覧
  • Ingredient_Count:有効成分の数
  • Is_Combination:医薬品に複数の成分が含まれているかどうか
  • Requires_Prescription:処方箋が必要かどうかを示すブール値
  • Prescription_Type:処方箋の要否を人が読みやすい形式で示したもの

⚡ パフォーマンスの最適化

サーバーでは、いくつかの最適化を実装しています。

  1. 高速な検索のための複数のインデックス:

    • 名前インデックス
    • 製造元インデックス
    • 組成インデックス
    • 価格インデックス
    • 処方箋インデックス
  2. 繰り返しの解析を避けるため、成分の抽出は起動時に一度だけ行います。

  3. 類似度の計算には、効率的なアルゴリズムを使用します。

    • 文字列の類似度には SequenceMatcher
    • 成分の類似度にはジャッカード指数
  4. 範囲検索を高速化するための価格の分類

🤝 コントリビューション

コントリビューションを歓迎します。以下の方法でご協力いただけます。

  1. リポジトリをフォークします
  2. 機能ブランチを作成します(git checkout -b feature/amazing-feature)
  3. 変更をコミットします(git commit -m 'Add some amazing feature')
  4. ブランチにプッシュします(git push origin feature/amazing-feature)
  5. プルリクエストを作成します

適宜、テストも更新してください。

📄 ライセンス

このプロジェクトは MIT License の下でライセンスされています。詳細は LICENSE ファイルをご覧ください。


Siddharth Bajpai が開発

ご質問やサポートについては、 までお問い合わせください。

医薬品データについては、LinkedIn からご連絡ください。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。