Skip to main content
Glama

stcc-mcp — 電話トリアージ階級:ルールで決定的に計算、0.6B は判定基準だけを照合

問診記録を入れると、L1–L5 階級 + 処置文言 + 根拠の逐条引用 + 不足している判定基準が出る。 階級分けは決定的ルールエンジンが計算する(225 件の STCC プロトコル / 849 分岐 / 4,168 件の判定基準、パッケージに同梱)、 Qwen3-0.6B は一つのことだけを答える:与えられた記録と一つの判定基準に対して、yes / no / unknown

モデルは分岐を選ばない、階級を決めない、処置文言を生成しない、tool call もしない

⚠️ 救急トリアージシステムではない、診断もしない、医師の代わりにはなれない。L1–L5 は処置の階段 (救急車を呼ぶ / 直ちに受診 / 今日中に受診 / 2 日以内の外来 / 自宅観察)。緊急時は 120 番へ。

3 ステップで動かす

pip install stcc-mcp                                       # 或 uvx stcc-mcp …
ollama pull hf.co/chenhaodev/stcc-checker-0.6b-GGUF:Q8_0   # 640MB 核对器
stcc-mcp doctor                                            # 自检:索引 / Ollama / 模型
stcc-mcp triage --protocol Chest_Pain.md "$(cat 记录.txt)"

常駐ゼロ、Docker ゼロ、非接続。純標準ライブラリ、サードパーティ依存なし。

初回実行で大概率 tier: L1 + certain: false が出る —— これは正しい

普通の問診記録を入れると、最緊急階級と unresolved のリストが出やすい。誤りではない: エンジンはある分岐の全条件が no のときだけそれを排除でき、実際の問診では一つの分岐の判定基準を全部聞き切ることはない。 例えば軽症の発熱記録で看護師が意識/項部硬直/発疹を聞いたが、脱水徴候は聞いていない (排尿減少、眼窩陥没、皮膚ツルゴール低下、口渇)。するとその分岐は排除できず、出力はその分岐の階級上限に留まる。

unresolved とは「これを追加で聞けば階級を絞り込める」リストのこと。 回答を記録に補って再実行すると、 unresolved は単調に短くなる;しかし階級はある分岐が完全に排除されたときだけ下がる—— 実測では同じ発熱記録に脱水徴候を補うと unresolved は 8→2 になったが、階級は L1 のままだった。 なぜなら残った主幹(高齢者または免疫低下者…脱水所見: のような途中までの文)について照合器が unknown を返したからだ。 このとき動かすべきは下の閾値ツマミであって、問い続けることではない。詳細は境界 ①②。

エージェントに接続する(Claude Code / 任意の MCP client):

pip install "stcc-mcp[mcp]" && stcc-mcp serve               # stdio MCP

Ollama は MCP をサポートしないが、この形態では問題にならない:小モデルは tool call を一切しない、 オーケストレーション層が Ollama(HTTP)とルールエンジン(プロセス内)をそれぞれ呼ぶだけで、両者は互いに知らない。 0.6B の自律 tool-calling は既知の弱点だが、このアーキテクチャは設計上それを回避している。

Related MCP server: Quellgeist

出力

フィールド

意味

tier

L1L5安全側の上限:真の答えより軽くなることは決してない

disposition

その分岐の処置文言(ルール表から取得、モデル生成ではない)

certain

true = 証拠が十分で階級確定;false = これは worst_case 上限

citations

判定根拠となった基準 + 行番号、監査可能

unresolved

不足している判定基準 —— これを追加で聞けば階級を絞り込める

階級から行動へのマッピングはあなたのオーケストレーション層が決める;本パッケージは階級と処置文言だけを提供する。

no の判定閾値は一つのツマミ

--no-threshold(デフォルト 0.63):P(no) ≥ τ ⇒ no、それ以外は yes/unknown の大きい方を採用。 同じモデルをリリース分布(n=3225)で評価したときの全体の取舍曲線:

τ

acc

false_no🔴

no_recall

0.63(デフォルト)

0.9426

0.0000

0.9027

0.50

0.9457

0.0000

0.9189

0.40

0.9495

0.0024

0.9378

0.30

0.9498

0.0084

0.9432

0.10

0.9516

0.0120

0.9635

同じ発熱問診記録で、τ だけ変える:

$ stcc-mcp triage --protocol Fever_Adult.md --no-threshold 0.63 "$(cat 记录.txt)"
  tier L1 · 拨打救护车        · unresolved 2
$ stcc-mcp triage --protocol Fever_Adult.md --no-threshold 0.40 "$(cat 记录.txt)"
  tier L3 · 2小时内接受医疗护理 · unresolved 5

τ を下げると、照合器は「聞いたが否定された」基準を no と判定しやすくなる ⇒ 分岐が排除される ⇒ 階級が下がる。 これはモデルを賢くするのではなく、同じ取舍曲線上で動作点を移動させているだけ——代償として見逃しリスクが上がる。

false_no(成立すべきなのに no と判定)が本当の危険——偽の no は真の分岐を安全な収束から排除してしまう。 no を減らしすぎると過剰診断になるだけだが、それはコストの問題に過ぎない。 デフォルト値は dev セット上で false_no ≤ 0.0036 を満たすように選定(dev は正例 495 件のみ、分解能 0.0020、 系統的に保守側に偏っている)。だから「最適値」は一つに固定せず、曲線ごと提示する。あなたのコスト行列に合わせて点を選べばよい。 再現:python -m scripts.threshold_sweep --model <m> --split <s> --collect --report

🔴 既知の境界(使う前に必ず読む)

① 入力は「プロトコルに従って問診済みの記録」でなければならない。素の主訴ではない。 短い主訴では unknown 率 94%;実際のリッチな対話(IMCS-21、748 字 / 40 往復)でも 88%。 原因は STCC の前置分岐が急症レッドフラグ(窒息、チアノーゼ、無反応)をふるいにかけるためで、 自然発生のコーパスは定義上これらの状況を含まず、医師も尋ねない——これは選択効果であり、コーパスを変えても消えない。

② 実際の問診で一つの分岐の全基準を聞き切ることはない。だから階級はその分岐の上限に留まる。 これは worst_case が正しく働いている証拠だが、上限の緩さは問診の網羅性で完全に決まる

worst_case の安全性は「偽の no を出さない」ことを前提にしている。 出力は現在の証拠で排除できない最緊急の階級(ある分岐は全条件が no のときだけ排除される)、 したがって過小トリアージは恒常的にゼロ、証拠が一つ増えるごとに no が一つ増えれば単調に階級が下がる(この 2 つの不変条件は tests/ が守っている)。 情報が足りないときは「全員救急車」に退化する——これは設計上の意図(過小トリアージ 10·d² vs 過大トリアージ d の非対称な損失)。

④ 階級分け自体は silver 基準:分岐ごとの正解は強モデルが作成し人間が校正したが、最終的な金基準は実地の看護師判断が欠けている

unknown がなぜ第一級の状態なのか

STCC の分岐意味論は「この分岐のいずれかの条件がはいなら命中;全部がいいえなら次へ」。 "言及なし" ≠ "否定された":前者は追加質問を引き起こすべきであり、後者だけが分岐を進める。 unknownno に潰すことは偽の陰性を捏造する**に等しく、エンジンを誤った分岐へ導く。

判定基準テキスト

索引内の判定基準は1 件ずつ独立に書き直した版(5,214 / 5,214)。純粋な閾値と単一の医学用語 (「咳嗽」「体温>100.4°F」)は事実どおり保持。書き直しは 3 つの関門を通る: 数値/否定/長さ/類似の形式チェック、oracle 再生で原版とビット単位で一致、下流 checker の指標が低下しないこと。

開発

uv sync
uv run pytest -q                        # 27 条回归
uv run python -m scripts.mcp_selfcheck  # oracle 回放 4,168 条判据,<1 秒

scripts/mcp_selfcheck.py はエンジンの忠実度セルフチェック:各判定基準を 1 件ずつ yes にし、他は全て no にして、 エンジンが到達する分岐と処置を照合する。これはモデル評価ではない——不一致があればコンパイルか評価ロジックに穴がある。

モデル

chenhaodev/stcc-checker-0.6b-GGUF (Q8_0 / Q4_K_M)。判定基準単位の false_no 0.0024、遅延中央値 ~250ms、エンドツーエンド 1.25s/件。

Apache-2.0.

A
license - permissive license
Not graded
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • F
    license
    Not graded
    quality
    F
    maintenance
    An agentic AI system that enables healthcare professionals to log patient symptoms, retrieve similar clinical cases, and search medical documents using RAG. It integrates a Chroma vector database with the Model Context Protocol to provide real-time clinical decision support.
  • A
    license
    A
    quality
    A
    maintenance
    First-line incident triage you can trust: ranked root-cause hypotheses where every claim cites a real evidence handle — and the agent abstains rather than guess.
    1
    1
    MIT
  • A
    license
    C
    quality
    B
    maintenance
    Evidence-grounded biomedical retrieval and summarization through the Model Context Protocol, enabling queries for biomedical evidence with citation-backed results.
    2
    MIT

View all related MCP servers

Related MCP Connectors

  • Physician-reviewed medical opinions and prescriptions for AI agents.

  • Author rules from policy docs, then decide: a Rete engine gives the verdict, an LLM explains why.

  • Doctor-reviewed blood-test markers, conditions & symptoms as agent tools. EN/RU/HE. Hosted.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/devhc123/stcc-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server