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 — это ступени действий (вызвать скорую / немедленно в неотложку / обратиться сегодня / амбулаторно в ближайшие два дня / наблюдение дома). При неотложном состоянии звоните 112.

Три шага для запуска

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) и движок правил (в процессе), они друг о друге не знают. Автономный tool-calling у 0.6B — известная зона бедствия, эта архитектура обходит её по построению.

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), поэтому недосортировка всегда равна 0, и с каждым дополнительным no в доказательствах результат монотонно сужается (обе инварианты охраняются tests/). При нехватке информации он вырождается в «всем вызывать скорую» — это проектный выбор (недосортировка 10·d² против пересортировки d), а не баг.

④ Сама сортировка — silver: эталонные метки на уровне ветвей финализированы сильной моделью + ручная проверка, окончательный вывод всё ещё не имеет золотого стандарта от реальной медсестры.

Почему unknown — первоклассное состояние

Семантика ветви STCC: «любое условие в этой ветви = да ⇒ попадание; все = нет ⇒ переход к следующей ветви». «Не упомянуто» ≠ «сказано нет»: первое обязано запускать уточняющий вопрос, второе позволяет перейти к следующей ветви. Сжать unknown в no — значит сфабриковать отрицание из воздуха, и движок уйдёт в неверную ветвь.

Тексты критериев

Критерии в индексе — поштучно переписанные версии (5 214/5 214). Чистые пороги и отдельные медицинские термины («кашель», «температура >100.4°F») сохранены по факту. Переписывание прошло три шлюза: формальная проверка чисел/отрицаний/длины/похожести, воспроизведение oracle, побитово совпадающее с оригиналом, и отсутствие падения метрик нижестоящего проверяющего.

Разработка

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

scripts/mcp_selfcheck.pyсамопроверка верности движка: каждый критерий по очереди ставится в yes, остальные в no, проверяется, в какую ветвь и с какими действиями приходит движок. Это не оценка модели — расхождение означает дыру в компиляции или вычислении.

Модель

chenhaodev/stcc-checker-0.6b-GGUF (Q8_0 / Q4_K_M). На уровне критериев false_no 0.0024, медианная задержка ~250 мс, сквозное время 1.25 с/запись.

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