MCP SERVER LIMS

MCP SERVER LIMS

MCP 工具用于实验室信息管理系统。 (MCP gōngjù yòng yú shíyànshì xìnxī guǎnlǐ xìtǒng.)

sheffler

研究与数据
访问服务器

README

MCP SERVER LIMS

本仓库托管了在以下 LinkedIn 文章视频中展示的 MCP Server 代码。该示例演示了 Anthropic 的 Claude 调用 MCP 数据库和模拟仪器工具来执行实验室工作流程的步骤。该示例的挑战在于,它要求跨多个步骤管理结构丰富的数据集合。

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

简介

LIMS(实验室信息管理系统)示例的目标是让 AI Agent 管理与一系列样本在实验室工作流程中传递时相关的数据。

这里的合成工作流程是实验室中可能发现的简化版本,但省略了许多细节。在工作流程中,存在在处理或分析样本的仪器之间传递物理样本的过程。 还有与跟踪样本进入仪器以及处理后相关的数据流。

下面的工作流程图展示了一个示意图,说明了工作流程的步骤以及必须管理的数据。 数据以表格形式表示,每个步骤中每个样本都有一条记录。

示例

工作流程从试管中样本的到达开始。 有一些数量的试管。 每个试管都有一个“样本名称”和一个相关的“质量”。 与实验室中试管引入相关的数据被输入到数据跟踪系统中。 此步骤称为“登记”。

现在样本已在系统中注册,它们可以由第一台仪器处理。 样本被加载到仪器中,并且关于样本的数据也被发送到该仪器。 然后仪器可以开始其处理。 第一台仪器称为“制备”仪器。 它的输出包括两件事。

  1. 制备好的样本在一系列输出试管中
  2. 关于每个样本及其制备方式的数据

在我们的模拟制备步骤中,每个样本都经过处理,以将遗传标签(“actg”、“acac”等)附加到试管中的样本,并且每个样本附加的标签都记录在输出数据中。 (无法提前知道哪个标签附加到哪个样本。) 还有一个关于此步骤是否成功执行的注释,位于“状态”字段中,可以是“passed”或“failed”。

然后,制备好的样本就可以在“分析仪”仪器中进行处理。 来自第一台仪器的输出样本被加载到第二台仪器中,并且关于每个样本的已知数据被发送到分析仪仪器。

分析仪仪器消耗物理样本并发出关于每个分析样本的数据。 这里有一个“文件名”和一个“指标”,用于测量关于分析步骤的量。

工作流程执行的最终输出应该是一份报告,以易于理解的格式总结各个步骤的信息。

模拟仪器

真实的实验室仪器确实会处理集合样本的数据输入和输出,通过 HL7 或 REST 等协议。 真实仪器上的此类接口有可能使用 MCP(模型上下文协议)与 AI Agent 集成作为“工具”。

在此模拟中,工具不是调用真实仪器的 API,而是生成模拟结果。 制备仪器的“标签”和“状态”值是随机选择的,分析仪仪器的“指标”也是如此。

在现实世界中,仪器的处理可能需要几分钟或几小时。 在我们的模拟仪器中,我们通过每秒处理一个样本来记录时间的流逝。

AI Agent 和工具集成的挑战

在此示例中,我们要求 AI Agent 计划跨一系列步骤管理数据。 AI Agent 可以使用数据库来保存中间结果,并且它可能会发现使用 SQL 数据库对于准备跨步骤的最终数据“连接”很有用。 Agent 还可以设计一种管理数据的替代方法,或者可以简单地将其作为对话的一部分包含在内。

工作流程规范指示只有“通过”的样本才能由分析步骤处理。

我们还使用具有丰富类型定义的接口定义了代表仪器的工具。 每个仪器都接受结构数组并生成结构数组。 下面显示了“preparation_tool”的 MCP 定义示例。

JSON Schema 定义的一些值得注意的特征是:

  1. 在 JSON 的“$defs”节中使用命名结构“InputSample”
  2. 输入参数“sample_list”是一个数组
  3. 数组是同质的,所有“items”的类型都是“#/$defs/InputSample”

到目前为止,在我们的测试中,许多 LLM 能够管理满足这些模式要求的数据。

{
 'tools': [{'function': {'description': '准备用于分析的样本。 '
                                        "将样本标记为 'passed' 或 "
                                        "'failed'。 ",
                         'name': 'preparation_tool',
                         'parameters': {
                             '$defs': {
                                 'InputSample': {
                                     'properties': {
                                         'mass': {
                                             'description': '样本质量,单位为 ng',
                                             'title': '质量',
                                             'type': 'integer'
                                         },
                                         'sample_name': {
                                             'description': '样本名称标识符',
                                             'title': '样本名称',
                                             '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 之外,还应运行 Python 服务器“mcp-server-sqlite”,以便 AI Agent 可以使用数据库。

源代码位于此处。

  • https://github.com/modelcontextprotocol/servers/tree/main/src/sqlite

PROMPTS

第一个提示描述了工作流程的步骤以及如何通过执行工具来执行每个步骤。 由于工具的执行需要某些数据的可用性,因此 Agent 需要确定如何获取或生成该数据。 赋予 Agent 的最终目标是生成一份工作流程报告,该报告总结了所有步骤的数据。

下面显示了第一个提示的开头。

助理的目标是管理与一组样本相关的数据。 有四个需要关注的步骤。

- 登记 - 将初始样本输入数据库
- 制备 - 调用工具来处理输入样本以附加标签并监控“passed”或“failed”状态
- 分析 - 调用工具来分析状态为“passed”的制备步骤的输出
- 报告生成 - 显示前 3 个步骤中的样本数据
...

针对较小 LLM 的较小工具测试

第一个提示的复杂性超出了较小 LLM 的能力。 第二个提示旨在仅练习 LLM 格式化和处理工具调用的能力,并将表格数据转换为工具所需的结构数组。

(事实证明,下面显示的提示对于检查具有丰富类型的工具接口的正确性很有用。)

使用 preparation_tool 处理以下数据表。
<table>
<tr>
  <th>样本名称</th> <th>输入质量</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)生成的示例输出报告。

记录稿

为了方便参考,这里提供了一份与 Claude 的对话记录稿。

推荐服务器

Crypto Price & Market Analysis MCP Server

Crypto Price & Market Analysis MCP Server

一个模型上下文协议 (MCP) 服务器,它使用 CoinCap API 提供全面的加密货币分析。该服务器通过一个易于使用的界面提供实时价格数据、市场分析和历史趋势。 (Alternative, slightly more formal and technical translation): 一个模型上下文协议 (MCP) 服务器,利用 CoinCap API 提供全面的加密货币分析服务。该服务器通过用户友好的界面,提供实时价格数据、市场分析以及历史趋势数据。

精选
TypeScript
MCP PubMed Search

MCP PubMed Search

用于搜索 PubMed 的服务器(PubMed 是一个免费的在线数据库,用户可以在其中搜索生物医学和生命科学文献)。 我是在 MCP 发布当天创建的,但当时正在度假。 我看到有人在您的数据库中发布了类似的服务器,但还是决定发布我的服务器。

精选
Python
mixpanel

mixpanel

连接到您的 Mixpanel 数据。 从 Mixpanel 分析查询事件、留存和漏斗数据。

精选
TypeScript
Sequential Thinking MCP Server

Sequential Thinking MCP Server

这个服务器通过将复杂问题分解为顺序步骤来促进结构化的问题解决,支持修订,并通过完整的 MCP 集成来实现多条解决方案路径。

精选
Python
Nefino MCP Server

Nefino MCP Server

为大型语言模型提供访问德国可再生能源项目新闻和信息的能力,允许按地点、主题(太阳能、风能、氢能)和日期范围进行筛选。

官方
Python
Vectorize

Vectorize

将 MCP 服务器向量化以实现高级检索、私有深度研究、Anything-to-Markdown 文件提取和文本分块。

官方
JavaScript
Mathematica Documentation MCP server

Mathematica Documentation MCP server

一个服务器,通过 FastMCP 提供对 Mathematica 文档的访问,使用户能够从 Wolfram Mathematica 检索函数文档和列出软件包符号。

本地
Python
kb-mcp-server

kb-mcp-server

一个 MCP 服务器,旨在实现便携性、本地化、简易性和便利性,以支持对 txtai “all in one” 嵌入数据库进行基于语义/图的检索。任何 tar.gz 格式的 txtai 嵌入数据库都可以被加载。

本地
Python
Research MCP Server

Research MCP Server

这个服务器用作 MCP 服务器,与 Notion 交互以检索和创建调查数据,并与 Claude Desktop Client 集成以进行和审查调查。

本地
Python
Cryo MCP Server

Cryo MCP Server

一个API服务器,实现了模型补全协议(MCP),用于Cryo区块链数据提取,允许用户通过任何兼容MCP的客户端查询以太坊区块链数据。

本地
Python