ต้นแบบ · รุ่นทดลอง: มีทุก server ในทะเบียนทางการ อัปเดตทุก 30 นาที รีวิวและบัญชีผู้ใช้จะมาในขั้นถัดไป
PopNx MCPที่รวม MCP สำหรับคนใช้ AI · อธิบายเป็นภาษาคน

ASTM LIS Analyzer Receiver

โดย K-Dense-AIรุ่น 0.1.3i★ –iรันบนเครื่อง
ชื่อใน registryio.github.K-Dense-AI/labmcp-astm-lis

ติดตั้ง

ภาพรวม

คำอธิบายจากผู้ทำ (ภาษาอังกฤษตามต้นฉบับ)

MCP server that receives results from clinical/lab analyzers over ASTM E1381/E1394 (CLSI LIS1/LIS2).

สามเสาของ PopNx MCP

สามเรื่องนี้ไม่รวมเป็นคะแนนเดียว เพราะความเห็น การวัด และความนิยม เป็นคนละเรื่องกัน

ใช้ทำอะไรได้

ตัวนี้ยังไม่ได้เรียบเรียงเป็นภาษาไทย ด้านล่างคือข้อเท็จจริงที่เราอ่านจาก registry

  • การเชื่อมต่อ: รันบนเครื่อง
  • ช่องทาง (transport): stdio
  • หมวด: คลินิกและสุขภาพ

ติดตั้ง

เลือกโปรแกรม AI ที่คุณใช้ แล้วคัดลอกค่าตั้งไปวาง

ก่อนติดตั้ง

ต้องเตรียมก่อน

  • PyPIติดตั้ง uv ของ Python (มีคำสั่ง uvx) ในเครื่อง

คุณใช้แอปไหน

เลือกแอปด้านบน เราจำไว้ให้ ครั้งหน้าปุ่มจะขึ้นว่า “ติดตั้งลง …”

เปิด Claude Desktop → Settings → Developer → Edit Config แล้ววางค่านี้ในไฟล์ claude_desktop_config.json

{
  "mcpServers": {
    "labmcp-astm-lis": {
      "command": "uvx",
      "args": [
        "labmcp-astm-lis"
      ],
      "env": {
        "LABMCP_ADDRESS": "ใส่ค่าของคุณ",
        "LABMCP_SIMULATE": "ใส่ค่าของคุณ",
        "LABMCP_READ_ONLY": "ใส่ค่าของคุณ",
        "LABMCP_LIMITS": "ใส่ค่าของคุณ"
      }
    }
  }
}

พิมพ์คำสั่งนี้ใน Terminal

claude mcp add labmcp-astm-lis --env LABMCP_ADDRESS='ใส่ค่าของคุณ' --env LABMCP_SIMULATE='ใส่ค่าของคุณ' --env LABMCP_READ_ONLY='ใส่ค่าของคุณ' --env LABMCP_LIMITS='ใส่ค่าของคุณ' -- uvx labmcp-astm-lis

เติมค่าที่เว้นว่างไว้ก่อนรัน

เปิดใน Cursor

หรือคัดลอกค่าตั้งเอง

วางในไฟล์ .cursor/mcp.json ของโปรเจกต์ หรือ ~/.cursor/mcp.json

{
  "mcpServers": {
    "labmcp-astm-lis": {
      "command": "uvx",
      "args": [
        "labmcp-astm-lis"
      ],
      "env": {
        "LABMCP_ADDRESS": "ใส่ค่าของคุณ",
        "LABMCP_SIMULATE": "ใส่ค่าของคุณ",
        "LABMCP_READ_ONLY": "ใส่ค่าของคุณ",
        "LABMCP_LIMITS": "ใส่ค่าของคุณ"
      }
    }
  }
}

เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง

เปิดใน VS Code

หรือคัดลอกค่าตั้งเอง

วางในไฟล์ .vscode/mcp.json ของโปรเจกต์

{
  "servers": {
    "labmcp-astm-lis": {
      "type": "stdio",
      "command": "uvx",
      "args": [
        "labmcp-astm-lis"
      ],
      "env": {
        "LABMCP_ADDRESS": "ใส่ค่าของคุณ",
        "LABMCP_SIMULATE": "ใส่ค่าของคุณ",
        "LABMCP_READ_ONLY": "ใส่ค่าของคุณ",
        "LABMCP_LIMITS": "ใส่ค่าของคุณ"
      }
    }
  }
}

เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง

ตัวนี้รันในเครื่องคุณ แต่ ChatGPT ต่อได้เฉพาะ server บนอินเทอร์เน็ต ลองเลือกแอปอื่น

ตัวเลือกเก็บในคุกกี้บนเครื่องนี้ ไม่ต้องมีบัญชี

ค่าที่ต้องใส่เอง

  • LABMCP_ADDRESS env
    Instrument address, e.g. serial:///dev/ttyUSB0 or tcp://192.168.1.50:5025
  • LABMCP_SIMULATE env
    Set to 1 to use the built-in simulator (no hardware)
  • LABMCP_READ_ONLY env
    Set to 1 to disable all state-changing tools
  • LABMCP_LIMITS env
    Safety limit overrides, e.g. max_temperature_c=80

ค่าตั้งนี้สร้างจากข้อมูลใน registry ของผู้ทำ ถ้าไม่ตรงกับ README ให้เชื่อ README

ทำอะไรได้บ้าง

รันในเครื่องคุณ รายการเครื่องมือจะขึ้นในแอป AI หลังติดตั้ง

ผลตรวจเบื้องต้นi

เราตรวจจากข้อมูลที่ใครก็เปิดดูได้ ยังไม่ได้อ่านโค้ด ข้อที่ไม่เกี่ยวกับตัวนี้ไม่นับในตัวหาร · ตรวจเมื่อ 8 พ.ย. 2569

  • ✓ ผ่าน

    ตัวตนผู้ทำตรงกับ repo

    ชื่อใน registry ยืนยันด้วยบัญชี GitHub K-Dense-AI ซึ่งเป็นเจ้าของ repo

  • … ยังไม่ตรวจ

    ยังมีคนดูแล

    ยังไม่ได้อ่านข้อมูล repo จาก GitHub

  • … ยังไม่ตรวจ

    มีสัญญาอนุญาต (license)

    ยังไม่ได้อ่านข้อมูล repo จาก GitHub

  • – ไม่เกี่ยว

    endpoint ตอบ

    ตัวนี้รันบนเครื่องคุณ ไม่มี endpoint บนอินเทอร์เน็ต

  • – ไม่เกี่ยว

    ล็อกอินแบบ OAuth

    ตัวนี้รันบนเครื่อง ใช้ค่าที่ตั้งในเครื่องแทน

  • … ยังไม่ตรวจ

    คำอธิบายเครื่องมือไม่มีคำสั่งแอบแฝง

    รันในเครื่องคุณ เราอ่านรายการเครื่องมือได้เฉพาะตัวที่มี endpoint บนอินเทอร์เน็ต

เทียบกับตัวอื่นในหมวด คลินิกและสุขภาพi

  • ดาวมากกว่า 0% ของอีก 1028 ตัวในหมวดนี้
  • ส่งรุ่นใหม่เข้า registry ล่าสุดกว่า 43% ของอีก 1028 ตัวในหมวดนี้
  • ผลตรวจเบื้องต้นดีกว่าหรือเท่ากับ 100% ของอีก 1028 ตัวในหมวดนี้

เทียบกับทุก server ที่ยังใช้งานในหมวดนี้ทั้งทะเบียน ดาวนับเฉพาะเมื่อผู้ลงทะเบียนเป็นเจ้าของ repo

คำถามที่พบบ่อย

ASTM LIS Analyzer Receiver ปลอดภัยไหม?

จากการตรวจเบื้องต้นของเรา ผ่าน 1 จาก 1 ข้อที่ตรวจได้ เรายังไม่ได้อ่านโค้ด ก่อนใส่กุญแจหรือ token ให้ดูว่า server ขอสิทธิ์อะไร และเลือกกุญแจที่ทำได้เท่าที่จำเป็น

ต้องใช้กุญแจหรือรหัสอะไรบ้าง?

registry ไม่ได้ระบุว่าต้องใช้กุญแจ แต่บางตัวจะขอให้ล็อกอินตอนใช้ครั้งแรก

ตัวนี้รันบนเครื่องหรือบนคลาวด์?

รันบนเครื่องของคุณ โปรแกรม AI จะเปิด server ขึ้นมาเองเมื่อใช้ ข้อมูลไม่ต้องผ่านเซิร์ฟเวอร์ของผู้ทำ (ยกเว้นตัวที่ไปเรียกบริการออนไลน์ต่อ)

ยังมีคนดูแลอยู่ไหม?

repo บน GitHub มีการแก้โค้ดล่าสุด – และส่งรุ่นล่าสุด (0.1.3) เข้า registry 43 วันที่ผ่านมา

ใช้กับโปรแกรมไหนได้บ้าง?

โปรแกรมที่รองรับ MCP เช่น Claude Desktop, Claude Code, Cursor และ VS Code ตัวนี้ต้องมี Python (uv) ในเครื่องด้วย

มีตัวไหนใช้แทนได้บ้าง?

ในหมวดเดียวกันมี Mirobody, FHIR MCP Server, Google Health MCP

ตัวที่ใช้แทนได้

server หมวดเดียวกันจากผู้ทำคนอื่น เรียงตามดาว

อ่านการ์ด:↓ ดาวน์โหลดต่อสัปดาห์i★ ดาว GitHubiสามเสา: รีวิว · ผลตรวจ · การใช้งานiอัปเดต = วันที่ส่งรุ่นล่าสุดเข้า registryi

Mirobody

Lab results to LOINC codes and UCUM units, symptoms and diagnoses to ICPC-3. Offline, no API key.

โดย thetahealthกำลังโต↓ 290/สัปดาห์★ 1.4Kอัปเดต เมื่อวาน

รันบนเครื่อง✓ thetahealth.ai

FHIR MCP Server

MCP server providing seamless access to FHIR APIs for AI tools and healthcare applications

โดย wso2กำลังโต↓ 823/สัปดาห์★ 137อัปเดต 10 วันที่ผ่านมา

รันบนเครื่อง

Google Health MCP

Privacy-first unofficial Google Health API v4 MCP server for health, sleep, activity, HR agents

โดย davidmosiahกำลังโต↓ 1K/สัปดาห์★ 79อัปเดต 4 เดือนที่ผ่านมา

รันบนเครื่อง

README จากผู้ทำ

เปิดอ่าน README

ส่วนนี้คัดจาก repo ของผู้ทำตามต้นฉบับ PopNx MCP ไม่ได้ตรวจหรือรับรองเนื้อหา ตัด HTML รูปภาพ และสคริปต์ออกแล้ว ลิงก์จะพาออกนอกเว็บ

ASTM LIS Analyzer Receiver — MCP Server

Let an AI agent collect and query results from clinical and laboratory analyzers (hematology, clinical chemistry, immunoassay, urinalysis, coagulation) that upload results over the standard ASTM E1381 / E1394 host interface (CLSI LIS1-A / LIS2-A2). The server acts as a small, receive-only LIS endpoint: it acknowledges the analyzer's frames, validates checksums, reassembles messages and lets the agent look results up by sample, patient, test or time.

[!WARNING]

Research and lab-operations use only. This is not a medical device and not a validated laboratory information system. It must not be used to report, release or interpret patient results, for diagnosis, or for any clinical decision-making. Results pass through an AI agent that can misread them; always rely on your laboratory's validated LIS/middleware and release process. Patient data is personal health information: patient name, birth date, address and phone are redacted by default; follow your institution's privacy rules before changing that.

Packagelabmcp-astm-lis
InstrumentsAnalyzers whose host-interface manual specifies ASTM E1381/E1394 (CLSI LIS1-A/LIS2-A2) result upload, e.g. models from Sysmex, Roche (cobas), Abbott, Beckman Coulter, Mindray and others. Check your model's host-interface manual.
InterfacesRS-232 (serial://), TCP/IP with the analyzer as server (tcp://analyzer:port), TCP/IP with the analyzer as client (--option listen_port=5000)
ProtocolASTM E1381 low-level protocol (ENQ/ACK/NAK/EOT, framed text with modulo-8 frame numbers and checksums) + ASTM E1394 records H, P, O, R, C, Q, L. Implemented from the publicly available Beckman Coulter UniCel DxI / Access 2 LIS Vendor Information, C03112-AF (chapters 2–4); the ASTM/CLSI standards themselves are purchase-only. Receive-only.
Status🧪 simulated: tested against a wire-level analyzer simulator and loopback TCP, not yet verified on an analyzer. Report a hardware test

Try it without hardware

uvx labmcp-astm-lis --simulate --check

The simulated analyzer uploads two messages right after start: a CBC with 5-part differential (with H/L flags and suspect-flag comments, one record long enough to need two frames, and one frame corrupted on the line that is NAKed and retransmitted) and a chemistry panel (high glucose and potassium with a hemolysis comment). All patient data in it is fictitious.

Connect your analyzer

On the analyzer, open the host / LIS / "online" communication settings:

  1. Protocol: ASTM (may be called ASTM E1381/E1394, LIS1-A/LIS2-A2, CLSI or "ASTM host"). Keep the ASTM low-level protocol (ENQ/STX framing) enabled, also over TCP/IP.
  2. Results: enable automatic result upload.
  3. Queries and orders: this server does not answer host queries or download orders. Turn off "host query" / "order request" / bidirectional mode, otherwise the analyzer waits for (and times out on) an answer before running samples.
  4. Link: pick one of
  • RS-232: note the baud rate (commonly 9600), 8 data bits, no parity, 1 stop bit (fixed by E1381), and use a null-modem cable. bash uvx labmcp-astm-lis --address /dev/ttyUSB0 --check # Linux uvx labmcp-astm-lis --address serial://COM3?baudrate=19200 --check # Windows, non-default baud
  • TCP, analyzer is the server (it listens on a port): the LIS connects to it. bash uvx labmcp-astm-lis --address tcp://192.168.1.80:5000 --check
  • TCP, analyzer is the client (you enter the host IP/port on the analyzer): this server listens. Allow the port through the computer's firewall and restrict senders with allow_from. bash uvx labmcp-astm-lis --option listen_port=5000 --option allow_from=192.168.1.80 --check
  1. Optional: keep a local record of every message with --option store_path=~/lis/results.jsonl (the newest max_messages are reloaded when the server restarts; if the file cannot be written, messages are still kept in memory and get_connection_status reports store_write_errors).

The receiver starts as soon as the MCP server starts, so uploads are acknowledged even before the agent calls a tool. Received results stay in memory across reconnect (only clear_results or a server restart without store_path removes them), because the analyzer never re-sends a result it has been sent an ACK for.

Add to your MCP client

Claude Code

claude mcp add analyzer -- uvx labmcp-astm-lis --option listen_port=5000 --option store_path=~/lis/results.jsonl

Claude Desktop / Cursor / Windsurf (claude_desktop_config.json, .cursor/mcp.json, …)

{

"mcpServers": { "analyzer": { "command": "uvx", "args": ["labmcp-astm-lis", "--address", "/dev/ttyUSB0"] } } }

Add --read-only to hide clear_results. For other clients, generate the snippet with uvx labmcp config astm-lis --address /dev/ttyUSB0 --client vscode (also cursor, codex, claude-code).

Tools

ToolKindDescription
clear_results🎛 controlDelete all received messages and results from this server's memory (e.g. between runs).
get_command_log👁 readReturn the most recent raw commands sent to / replies received from the instrument (newest last). Useful for debugging and for recording what was done.
get_connection_info👁 readReport which instrument is connected (identity, address, simulated or real), whether the server is read-only, and the active safety limits. Call this first.
get_connection_status👁 readReport the analyzer link state, the messages and results received, and link-layer error counters.
get_result_detail👁 readShow every decoded field of one result, with its comments, order and patient context, raw records and message header.
get_results👁 readReturn received results, filtered by sample ID, patient ID, test code, time received or abnormal flag (newest last).
list_received_messages👁 readList the most recent ASTM messages received (newest last).
reconnect🛑 safetyClose and re-open the connection to the instrument (e.g. after it was power cycled or a cable was re-plugged).

get_connection_info, get_command_log and reconnect are built into every LabMCP server.

Safety limits

This server is receive-only and never commands the analyzer (it only answers ACK/NAK), so it has no physical safety limits. Privacy settings:

OptionDefaultMeaning
redact_patient_infotrueMasks P-record fields 6 (patient name), 7 (mother's maiden name), 8 (birth date), 11 (address) and 13 (telephone) as REDACTED before anything is stored, logged, written to store_path or returned by a tool
allow_from(any)In listen mode, only accept connections from these IP addresses (;- or space-separated)
max_messages5000Messages kept in memory; oldest are dropped first

Patient IDs, sex, attending physician and free-text comment records are not redacted (IDs are needed to filter results). If your analyzers put identifying text in comments, treat the output accordingly.

Example prompts

  • "Have any results come in from the hematology analyzer in the last hour? List the samples."
  • "Show me all flagged results for sample S26-000123, with units, reference ranges and the analyzer's comments."
  • "Export today's potassium results as a table of sample ID, value and flag."
  • "Is the analyzer link healthy? How many frames were NAKed today and why?"
  • "Compare the glucose results of samples S26-000124 and S26-000131."
  • "Clear the stored results before we start the next validation run."

Notes

  • Receive-only. No order download, no host-query responses and no result acknowledgements beyond the link-level ACK. Query (Q) messages from the analyzer are stored and reported (kind: "query") but not answered. Order download is planned future work.
  • Link layer (E1381). Every frame is checked: checksum (modulo-256 sum from the frame number to ETX/ETB, as two hex digits), frame number (first frame 1, then modulo 8; a repeat of the last accepted number is treated as a retransmission and ACKed without duplicating data) and framing. Defective frames get NAK and the analyzer retransmits them. Frames outside an ENQ … EOT session are ignored and counted in bytes_ignored, which usually means the analyzer is not using the ASTM low-level protocol (raw E1394 without framing is not supported). A session that goes silent for 30 s, or restarts with ENQ, has its incomplete message discarded, as E1381 requires; a message that ends with EOT but no terminator (L) record is kept and flagged complete: false.
  • Tolerances. Frames with more than 240 text characters and end frames that pack several records are accepted (and counted); a frame whose CR LF never arrives is NAKed after 10 s. Text is decoded as Latin-1 by default (--option encoding=...; an unknown encoding name is refused at start-up).
  • Records (E1394). Delimiters are taken from each header record (H|\^& by default). Escape sequences &F& &S& &R& &E& and the vendor form &|& are decoded; other escapes are kept verbatim. The test code is the first non-empty "local code" component of the Universal Test ID (^^^TSH, ^^^^WBC), falling back to the first component. The sample ID is the order's Specimen ID, or the first non-empty component of the Instrument Specimen ID. Values are returned exactly as sent ("<0.1", ">500", "Cancelled"); numeric_value is only set for plain numbers.
  • Flags and statuses are passed through as sent. Meanings are only attached for the abnormal flags defined by LIS2-A2 / E1394 (N L H LL HH < > A U D B W) and the result statuses documented in the vendor specification used (F X); anything else is analyzer-specific, so check your analyzer's host-interface manual.
  • Timestamps inside records (test started/completed, header time) are the analyzer's local time; received_at is when this server stored the message (UTC).
  • Listen mode serves one analyzer per port: a new connection replaces the previous one (analyzers often reconnect after a reboot without closing the old socket). Run one server entry (or port) per analyzer. There is no TLS; keep the port on the lab network and use allow_from.
  • Only tested against the simulator and loopback TCP. Differences between vendors' ASTM dialects are common; please report what works (or doesn't) with your analyzer.

Hardware verification

ModelFirmwareInterfaceVerified byDate
*none yet: be the first*
ถาม PopNx