kaigo-gap
kaigo_mcp
MCP-сервер, который публикует данные о спросе и предложении в японском уходе за пожилыми как инструмент, доступный ИИ-агентам.
При подключении из Claude Code или Claude Desktop можно получить ответ на вопрос «достаточно ли в этом городе домов престарелых специального типа» на основе открытых данных.
Статус: Phase 1 (сам сервер) работает. Сам агент и eval не начаты.
Что это делает
MCP (Model Context Protocol) — это стандарт для наделения LLM инструментами. Этот репозиторий создаёт сторону инструментов и не содержит саму LLM. Сам по себе сервер не вызывает никаких API и не порождает расходов.
[考える側] [このリポジトリ]
Claude Code / 自作エージェント ←stdio→ kaigo-gap サーバー
「どの道具を使うか」を判断 呼ばれたらデータを返すИнструменты
Инструмент | Назначение |
| Общенациональные базовые значения. Основа для оценки отдельных цифр |
| Получение данных о спросе и предложении по названию муниципалитета или страховщика |
| Сортировка по степени нехватки (или достатка) домов престарелых специального типа |
Основной показатель — число мест в домах престарелых специального типа на 100 человек с установленной степенью ухода 3 и выше (по стране 24,6; медиана 26,7). Определение и источники находятся на стороне kaigo_gap_analysis.
Агрегация здесь не выполняется
Данные выгружаются в варианте 4 (kaigo_gap_analysis) скриптом export_web.py, и здесь используется та же копия insurers.json, которую раздаёт публичная панель. Деление здесь заново не переписывается.
Если определение показателя хранится в двух местах, то при расхождении ответа агента и цифр на панели невозможно определить, какой из них правильный. dataset.py из варианта 4 написан по принципу «определение — в одном месте», и этот принцип соблюдается и здесь. Обновление — через python scripts/sync_data.py.
Что учитывалось при проектировании инструментов
По одним цифрам судить нельзя. Если передать «12,4», LLM не поймёт, много это или мало, поэтому в ответ включаются общенациональный рейтинг и общенациональное значение в описании инструмента.
Одноимённые муниципалитеты не сводятся к одному. «Футю» есть и в Токио, и в префектуре Хиросима. Возвращаются оба кандидата, а уточнение оставляется вызывающей стороне.
Ноль мест в домах престарелых специального типа не должен читаться как «худший в стране». Таких страховщиков 90, и все они оказываются на первом месте с одинаковым результатом. Обязательно прилагается число совпадающих, а также примечание: «в малых муниципалитетах это не редкость, и жители часто пользуются учреждениями соседних муниципалитетов». Без этого из результата rank_insurers можно сделать ошибочный вывод, что «Синго — худший регион страны».
Если не встроить предметные знания в ответы инструментов, то при каждой смене вызывающей модели будет повторяться одно и то же неверное прочтение. Именно поэтому они помещаются на сторону инструментов, а не в промпт.
Использование
pip install -r requirements.txt
python scripts/sync_data.py # 案4からデータを取り込む
python scripts/smoke_test.py # 通信の疎通確認Чтобы использовать из Claude Code, достаточно запустить в этом каталоге — тогда будет прочитан .mcp.json. Настройки для регистрации в других клиентах:
{
"mcpServers": {
"kaigo-gap": {
"command": "python",
"args": ["-m", "kaigo_mcp"],
"cwd": "C:\projects\kaigo_mcp"
}
}
}Агент (Phase 2 · до подтверждения работы)
python -m kaigo_mcp.agent --list
python -m kaigo_mcp.agent "尼崎市は特養が足りてる?" --verboseИнструменты вызываются через MCP-сервер (функции напрямую не импортируются). Если обойтись импортом, это не будет прохождением через MCP, и утверждение «мы создали MCP-сервер» не будет проверено.
4 сравниваемые колонки
Колонка | Модель | Место | Стоимость за вопрос |
A | qwen2.5:7b | Основная машина (CPU) | 0 иен |
B | Qwen3.5 9B | RTX 5050 8GB | 0 иен |
C | Qwen3-235B | DeepInfra | около 0,11 иены |
D | Claude Haiku 4.5 | Anthropic | около 1,7 иены |
B и C выровнены по одной линейке Qwen. Тогда разница B→C читается как «эффект только размера модели», C→D — как «разница семейств моделей», а A→B — как «эффект железа и поколения».
Пишется только один цикл. Если для одной стороны использовать SDK-раннер инструментов, а для другой — рукописный, то разницу между колонками нельзя будет отделить от разницы в реализации цикла. Бэкенд отвечает только за преобразование истории.
Фактические замеры (колонки A и B)
По 6 запусков, замер скриптом python scripts/probe_tool_calling.py.
Колонка A qwen2.5:7b (CPU) | Колонка B qwen3.5:9b (RTX 5050 8GB) | |
Доля успешных вызовов инструментов (температура по умолчанию) | 4/6 = 67% | 6/6 = 100% |
Доля успешных вызовов инструментов (температура 0) | 6/6 = 100% | 6/6 = 100% |
Следование инструкции (сначала ли запрошено базовое значение) | 0/6 = 0% | 6/6 = 100% |
Время на один запуск (после прогрева) | 7,6 с | требуется повторный замер |
Необходимость температуры 0 была особенностью именно 7B
У qwen2.5:7b при температуре по умолчанию повреждается открывающий тег <tool_call> (в начале появляется несколько символов вроде olith, pering), парсер ollama не распознаёт его, и вызов просачивается в текст ответа. Признак — остаётся только закрывающий тег </tool_call>. При температуре 0 это исчезает.
У qwen3.5:9b даже при температуре по умолчанию 6/6. Это повреждение — не общая проблема локального запуска, а особенность поколения и размера именно этой модели.
Гораздо больше разница в «следовании инструкции»
В системном промпте указано: «перед ответом проверить общенациональное базовое значение через get_national_baseline». 9B следует этому в 6/6 случаев, 7B не последовал ни разу — 0/6. При этом 9B вызывает два инструмента параллельно за один шаг.
7B смог дать правильный ответ, потому что подхватил общенациональное значение (24,6), встроенное в описание инструмента, но предписанную процедуру не выполнил. Разница не в стабильности, а в следовании инструкции, и она будет тем заметнее, чем больше инструментов.
Ограничения этого сравнения
В A→B одновременно меняются и железо, и поколение модели, поэтому нельзя отделить, чем вызвано улучшение — GPU или 9B. Для разделения нужно запустить qwen2.5:7b и на GPU-машине (бесплатно, несколько минут).
Секунды также искажаются первой загрузкой модели, которая поднимает среднее. В фактических замерах колонки A было 102,6 с в первый раз и 7,6 с в последующие (среднее 23,4 с). Скрипт исправлен так, чтобы выводить медиану и первый запуск отдельно, но значения колонки B получены старым скриптом, поэтому нужен повторный замер.
Дальнейшие планы
Повторный замер колонки B (переснять секунды улучшенным скриптом)
Запустить
qwen2.5:7bна GPU-машине и разделить эффекты железа и поколения моделиКолонки C и D не выполнялись (поскольку это платно, только один раз, когда колонки будут готовы)
Phase 3: сам eval (доля правильных ответов и доля завершённых прогонов при нескольких вопросах × нескольких запусках)
Связанное
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 Connectors
Raw Japanese regulatory data for AI agents: pension, gazette, gBizINFO. x402-metered (USDC).
Verified Polish open data for AI agents: debt, budget, 460 MPs, votings, judiciary search, RAG.
Machine-readable utilities and datasets for AI agents.
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/ossudesu-lab/kaigo_mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server