mcpField
M
MCP SERVER LIMS

MCP SERVER LIMS

ローカル
github.com/sheffler科学・教育180 週間前に更新

MCP SERVER LIMS について

MCP SERVER LIMS は、実験室のワークフローでサンプルデータを管理する MCP サーバーの例です。複数工程を調整する AI エージェント向けに、模擬装置ツールとデータベースを使い、サンプル登録から結果の集計までを扱います。

主な機能

  1. 01サンプルデータの登録と追跡
  2. 02サンプル調製装置のシミュレーション
  3. 03分析と結果出力のシミュレーション
  4. 04構造化配列による入出力
  5. 05工程をまたいだサンプル情報の集計

活用シーン

  1. 01サンプル登録から分析までの実験フローの検証
  2. 02調製に合格したサンプルだけを分析に送る
  3. 03構造化されたツールデータの処理をテスト
  4. 04複数工程をまとめたワークフローレポートの生成

MCP 対応

実験室のサンプルワークフロー向けに、データベースと模擬装置のツールを MCP クライアントに公開します。中間データの保存には mcp-server-sqlite も必要です。

設定

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

mcp.json · 共通設定
{
"mcpServers": {
"lims": {
"command": "uvx",
"args": [
"mcp-server-sqlite"
]
}
}
}
起動コマンドuvx mcp-server-sqlite

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
pypimcp-server-sqlite

ツール

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

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

詳細

MCP SERVER LIMS

このリポジトリには、以下の LinkedIn 記事の動画で紹介された MCP Server のコードが格納されています。この例では、Anthropic の Claude が MCP のデータベースツールとシミュレーション機器ツールを呼び出し、ラボのワークフローを実行する手順を示しています。複数のステップにわたって、構造が複雑なデータの集合を管理する必要があるため、難易度の高い例となっています。

https://www.linkedin.com/pulse/ai-agent-lims-iot-mcp-tom-sheffler-ylmpc/

はじめに

LIMS(Laboratory Information Management System)の例では、サンプルの集合がラボのワークフローを進む際に関連するデータを AI エージェントが管理することを目指します。

ここでの架空のワークフローは、ラボで見られるようなものを簡略化し、多くの詳細を省略したものです。このワークフローでは、サンプルを処理または分析する機器の間で、物理サンプルを受け渡します。また、サンプルが機器に入るときと処理後に追跡するためのデータフローもあります。

以下のワークフロー図は、ワークフローの手順と管理が必要なデータを示す概略図です。データは、各ステップにおける各サンプルのエントリーを含む表として示されています。

README の画像

例

ワークフローは、チューブに入ったサンプルの到着から始まります。チューブは複数あります。それぞれに「サンプル名」と対応する「質量」があります。ラボにチューブを導入したときのデータは、データ追跡システムに入力されます。この手順は「受入登録」と呼ばれます。

サンプルがシステムに登録されると、最初の機器で処理できます。サンプルを機器にロードし、サンプルに関するデータも機器に送信します。その後、機器で処理を開始できます。この最初の機器は「調製」機器と呼ばれます。その出力は次の 2 つです。

  1. 出力チューブの集合に入った調製済みサンプル
  2. 各サンプルとその調製方法に関するデータ

シミュレーションによる調製ステップでは、各サンプルを処理し、チューブ内のサンプルに遺伝子タグ(「actg」、「acac」など)を付けます。各サンプルに付けられたタグは出力データに記録されます。(どのサンプルにどのタグが付くかを事前に知る方法はありません。)また、このステップが正常に実行されたかどうかも「status」フィールドに記録され、「passed」または「failed」の値が入ります。

調製済みサンプルは、「分析」機器で処理する準備が整います。最初の機器の出力サンプルを 2 台目の機器にロードし、各サンプルについて既知のデータを分析機器に送信します。

分析機器は物理サンプルを消費し、分析した各サンプルに関するデータを出力します。ここでは、「filename」と、分析ステップの測定量を示す「metric」があります。

ワークフロー実行の最終出力は、各ステップにわたる情報をわかりやすい形式でまとめたレポートである必要があります。

シミュレーション機器

実際のラボ機器では、HL7 や REST などのプロトコルを介して、サンプルの集合についてデータの入力と出力を処理します。実際の機器に搭載されたこのようなインターフェースを、MCP(Model Context Protocol)を使った「ツール」として AI エージェントと連携できる可能性があります。

このシミュレーションでは、実際の機器の API を呼び出す代わりに、ここでのツールがシミュレーション結果を生成します。調製機器の「tag」と「status」の値、および分析機器の「metric」の値はランダムに選択されます。

現実の機器では、処理に数分から数時間かかることがあります。シミュレーション機器では、1 秒につき 1 サンプルを処理することで時間の経過を表します。

AI エージェントとツールの統合における課題

この例では、複数の手順にわたるデータ管理の計画を AI エージェントに依頼します。AI エージェントは、中間結果の保存にデータベースを使用する場合があります。また、各手順のデータを最終的に「結合」するために、SQL データベースが役立つと判断することもあります。エージェントは別のデータ管理方法を考案する場合もあれば、単に会話の一部として扱う場合もあります。

ワークフローの仕様では、「合格」したサンプルのみを分析手順で処理するよう指示しています。

また、豊富な型定義を備えたインターフェースを持つ、機器を表すツールも定義しています。各機器は構造体の配列を受け取り、構造体の配列を生成します。「preparation_tool」の MCP 定義の例を以下に示します。

JSON Schema 定義の主な特徴は次のとおりです。

  1. JSON の「$defs」節で名前付き構造体「InputSample」を使用していること
  2. 入力パラメーター「sample_list」が配列であること
  3. 配列の項目がすべて「#/$defs/InputSample」型であり、同じ型で統一されていること

これまでのテストでは、多くの LLM がこれらのスキーマ要件を満たすデータを扱えることがわかっています。

{
 'tools': [{'function': {'description': 'Prepare the samples for analysis.  '
                                        "Mark samples as 'passed' or "
                                        "'failed'. ",
                         'name': 'preparation_tool',
                         'parameters': {
                             '$defs': {
                                 'InputSample': {
                                     'properties': {
                                         'mass': {
                                             'description': 'sample mass in ng',
                                             'title': 'Mass',
                                             'type': 'integer'
                                         },
                                         'sample_name': {
                                             'description': 'sample name identifier',
                                             'title': 'Sample Name',
                                             'type': 'string'
                                         }
                                     },
                                     'required': ['sample_name', 'mass'],
                                     'title': 'InputSample',
                                     'type': 'object'
                                 }
                             },
                             'properties': {
                                 'sample_list': {
                                     'items': {
                                         '$ref': '#/$defs/InputSample'
                                     },
                                     'type': 'array'
                                 }
                             },
                             'required': ['sample_list'],
                             'type': 'object'
                         }
                     },
            'type': 'function'
        }]}

要件

このリポジトリの LIMS Server に加えて、AI エージェントがデータベースを利用できるよう、Python サーバー「mcp-server-sqlite」も実行しておく必要があります。

ソースコードはこちらにあります。

プロンプト

最初のプロンプトでは、ワークフローの各手順と、ツールを実行して各手順をどのように実施するかを説明します。ツールの実行には特定のデータが必要なため、エージェントはそのデータをどのように取得または生成するかを判断する必要があります。エージェントに与えられる最終目標は、すべての手順にわたるデータを要約したワークフローレポートの作成です。

この最初のプロンプトの冒頭を以下に示します。

The assistant's goal is to manage the data associated with a set of samples.  There are four steps of concern.

- accessioning - entering the initial samples in the database
- preparation - calling a tool to process the input samples to attach a tag and monitor a "passed" or "failed" status
- analysis - calling a tool to analyze the outputs of the preparation step whose status is "passed"
- report generation - displaying the sample data across the first 3 steps
...
小規模 LLM 向けの簡易ツールテスト

最初のプロンプトは複雑であり、小規模な LLM では対応できません。2 つ目のプロンプトは、ツール呼び出しの形式を整え、表形式のデータをツールに必要な構造体の配列に変換する LLM の能力を試すことだけを目的としています。

(以下に示すプロンプトは、豊富な型を持つツールインターフェースの正確性を検証するのに役立つことがわかっています。)

Process the following table of data with the preparation_tool.
<table>
<tr>
  <th>Sample Name</th> <th>Input Mass</th>
<tr>
<tr>
  <td> NA12878 </td> <td> 45 </td>
</tr
<tr>
  <td> NCC1701 </td> <td> 77 </td>
</tr
<tr>
  <td> NACL </td> <td> 12 </td>
</tr
<tr>
  <td> NA12879 </td> <td> 32 </td>
</tr
</table>

ビルドと実行

uv がインストールされていることを確認してください。

$ git clone https://github.com/sheffler/mcp-server-lims
$ cd mcp-server-lims
$ uv init
$ uv venv
$ . .venv/bin/activate
$ uv sync

この時点で、MCP サーバー SDK の依存関係が venv にインストールされているはずです。

Claude Desktop の設定

以下を編集して Claude Desktop を設定します。

  • ~/Library/Application Support/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "mcp-lims-server" : {
      "command": "/Users/sheffler/git/mcp-server-lims/.venv/bin/python",
      "args": [
        "/Users/sheffler/git/mcp-server-lims/lims_server.py"
      ]
    },
    "sqlite": {
      "command": "/Users/sheffler/.local/bin/uvx",
      "args": [
        "mcp-server-sqlite",
        "--db-path",
        "/Users/sheffler/test.db"
      ]
    },
  }
}

Oterm の設定

~/Library/Application Support/oterm/config.json

{"theme": "textual-dark",
 "splash-screen": false,
 "mcpServers": {

    "mcp-lims-server" : {
      "command": "/Users/sheffler/git/mcp-server-lims/.venv/bin/python",
      "args": [
        "/Users/sheffler/git/mcp-server-lims/lims_server.py"
      ]
    },

    "sqlite": {
      "command": "/Users/sheffler/.local/bin/uvx",
      "args": [
        "mcp-server-sqlite",
        "--db-path",
        "/Users/sheffler/test.db"
      ]
    },

 }
}

Claude が生成したワークフローレポート

Claude が生成したレポートの出力例(Claude Desktop を使用)を以下に示します。

README の画像

会話記録

参考として、Claude との会話記録を収録しています。

コメント

MCP は初めてですか?

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

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