stcc-mcp
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 MCPOllama не поддерживает MCP, и для этой архитектуры это не проблема: маленькая модель никогда не делает tool call, оркестратор отдельно вызывает Ollama (HTTP) и движок правил (в процессе), они друг о друге не знают. Автономный tool-calling у 0.6B — известная зона бедствия, эта архитектура обходит её по построению.
Related MCP server: Quellgeist
Выход
Поле | Значение |
|
|
| формулировка действий для этой ветви (из таблицы правил, не сгенерирована моделью) |
|
|
| критерии, на которых основано решение + номера строк, аудируемо |
| каких критериев ещё не хватает — дозадав их, можно сузить уровень |
Отображение уровня на действия определяет ваш оркестратор; этот пакет даёт только уровень и формулировку действий.
Порог для no — это ручка
--no-threshold (по умолчанию 0.63): P(no) ≥ τ ⇒ no, иначе берётся больший из yes/unknown.
Полная кривая компромиссов той же модели на дистрибуции релиза (n=3225):
τ | acc |
|
|
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.
This server cannot be installed
Maintenance
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
- FlicenseNot gradedqualityFmaintenanceAn 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.
- AlicenseAqualityAmaintenanceFirst-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.11MIT
- AlicenseCqualityBmaintenanceEvidence-grounded biomedical retrieval and summarization through the Model Context Protocol, enabling queries for biomedical evidence with citation-backed results.2MIT
- AlicenseAqualityBmaintenanceAuthor rules from policy docs, then decide: a Rete engine gives the verdict, an LLM explains why.8MIT
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.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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