limai
理脈 limai
Общая нервная система Ли Хуа и Ли Юэ — самостоятельный орган, извлечённый из персонажей по первым принципам.
Вывод из первых принципов
Как у персонажа | Суть | Модуль | Инструменты MCP |
Опрос пульса + backoff при ошибках ( | ритм | heartbeat.mjs | heartbeat_now・vitals_latest・vitals_history |
Скриншоты / окна / буфер обмена ( | зрение | vision.mjs | screen_capture(возвращает изображение)・list_windows・read_clipboard |
todo-tasks.json + взвешенное слияние пульса | намерение | todo.mjs | todo_add・todo_list・todo_update |
Долговременная память (имя × ключевые слова × содержимое) | память | memory.mjs | memory_add・memory_search・memory_list・memory_forget |
o-pi шесть файловых инструментов | файловые операции | filesys.mjs | fs_ls/read/write/edit/find/grep |
o-pi websearch/webfetch | сетевые операции | web.mjs | web_search・web_fetch |
Отброшено: LLM-промпты персонажей (личность не переносится), JS-eval-триггер для памяти (безопасность). Сохранена суть: идея взвешенного случайного планирования → backoff в пульсе; защита по механизму STALE_READ; защита от SSRF; ограниченное чтение.
Запуск
npm install
npm run start # ① stdio → Claude Desktop / Cursor 等本地客戶端
npm run serve:http # ② HTTP MCP → GPT 客戶端 / 區網 / 遠端
npm run tick # ③ 手動跑一次心跳(驗證感知層)CLI спроектирован для AI-агентов
limai shot # → {"file":...,"width":1920,"height":1080,"bytes":...}
limai win # → {"foreground":...,"windows":[{process,title},…]}
limai clip [--json] # 剪貼簿原文走 stdout(利於管線)
limai tick # 心跳一次,生命徵象 JSON
limai web search <q> # → [{title,url,snippet},…]
limai web fetch <url> # 正文走 stdout、中繼 stderr;--json 得全包裝
limai fs ls|read|write|edit|find|grep …
limai mem … / limai todo … # 同前Контракт для агента:
Вывод по умолчанию в JSON, коды ошибок с префиксом попадают в сообщения stderr (
STALE_READ: …), ненулевой код выхода означает сбой.fs editподчиняется тому же строгому контракту, что и MCP: обязателен предварительныйfs read; состояние наблюдения сохраняется вfs-state.json, инвариант «проход чтения → проход правки» выполняется при последовательных вызовах, внешние изменения обязательно перехватываются (обход возможен через--force).Успешный
fs writeтакже создаёт наблюдение и допускает последующийedit(по тому же правилу o-pi «сразу после успешного write»).
Архитектурно MCP — лишь один из интерфейсов поверх базовых модулей: один и тот же набор vision/web/filesys/memory/todo/heartbeat одновременно доступен и для subcommand CLI, и для вызовов MCP-инструментов; оба интерфейса используют одни данные и один контракт безопасности. `
При первом запуске автоматически создаётся ~/.limai/ (config.json・memory.json・todo.json・vitals.\*・screenshots/) и выводится токен.
Подключение клиентов
Локально (stdio)
// claude_desktop_config.json
{ "mcpServers": { "limai": { "command": "node", "args": ["F:\\fount開發項目\\理脈\\src\\cli.mjs", "serve", "--stdio"] } } }Локальная сеть / GPT-клиенты на той же машине (Cherry Studio, LobeChat, OpenWebUI…)
node src/cli.mjs serve --http # 預設 127.0.0.1:8931
# 對區網開放:--host 0.0.0.0 --token <強密碼>{ "type": "http", "url": "http://192.168.x.x:8931/mcp",
"headers": { "Authorization": "Bearer <token>" } }Облачный ChatGPT (Connectors / режим разработчика)
ChatGPT не может достучаться до твоего localhost — нужен публичный HTTPS: одна команда туннеля:
cloudflared tunnel --url http://127.0.0.1:8931
# → https://xxxx.trycloudflare.comВ URL коннектора укажите https://xxxx.trycloudflare.com/mcp?token=<token> (GPT-клиенты чаще всего не позволяют задавать собственный заголовок, поэтому поддерживается передача токена через query).
Долгосрочное решение: Tailscale Funnel (без открытия портов) либо обратный прокси Caddy на своём домене.
Границы безопасности
Файлы: ограничение по
allowedRootsизconfig.json;.gitблокируется навсегда;fs_editтребует предварительныйfs_read(стража версии STALE_READ); старый текст должен быть уникальным.Сеть: отказ для localhost/частных адресов/link-local (защита от SSRF), повторная проверка редиректов на каждом хопе, лимит 2 МБ, таймаут 30 секунд.
Аутентификация: на всём HTTP — Bearer/query-token; по умолчанию привязка только к 127.0.0.1.
Конфиденциальность: пульс запоминает только заголовок окна и hash буфера обмена (при изменении сохраняется превью первых 60 символов); пиксельные скриншоты — только при явном вызове screen_capture.
Семантика пульса (по образцу Ли Хуа)
Один цикл каждые 15 минут (настраивается через heartbeat.intervalMin). Каждый цикл собирает: активное окно, список окон (top 8), время бездействия в секундах, изменения буфера обмена, число открытых TODO-задач. При сбое интервал увеличивается в 2 раза (потолок 8×), при успехе — возвращается к исходному. Журнал ведётся с ротацией в vitals.ndjson.
Синхронизация с upstream (o-pi)
Проверка от 2026-08-23: массовые коммиты того дня — внутренний рефакторинг (упрощение file-tools/web-tools/filesystem/lsp), поведение шести инструментов и двух веб-инструментов не изменилось;
duckduckgo-html-providerостаётся резервным путём без ключа — извлечение limai по-прежнему честное.Новая возможность
readподдерживает постраничные изображения PDF (d762209):fs_readв limai на.pdfвозвращает структурированную ошибкуUNSUPPORTED_MEDIA_PDF(подключение pdfjs нарушило бы принцип ноль внешних зависимостей — внесено в roadmap).skill URI / инструмент bash / approval gate принадлежат только ходу Pi, в извлечение не входят.
Повторная проверка тем же днём (d795d92 new approval UI): затронуты только
src/approval/*и TUI, file-tools/web-tools — без изменений. По этому было завершено выравнивание контракта grep': недопустимое регулярное выражение понижается до точного литерала — при совпадениях выводится предупреждениеliteral_fallback; при их отсутствии возвращаетсяINVALID_REGEX, а не «пустой результат». Протестировано.
Лицензия и источники (License & Attribution)
Проект публикуется под GNU Affero General Public License v3.0 или новее (AGPL-3.0-or-later). Полных условия — LICENSE.
Заявление об источниках кода:
Файловые инструменты (
src/core/filesys.mjs: ls/read/write/edit/find/grep) и веб-инструменты (src/core/web.mjs: web_search/web_fetch) — их поведенческий контракт и дизайн происходит из Orion-zhen/o-pi (документы по дизайну file-tools и web-tools опера Pi Agent, AGPL-3.0). limai — независимая реализацияNode.js с нулевыми зависимостями этой сути, а не копирование кода; она открыта на тех же лицензионных условиях AGPL.Образцы примитивов heartbeat / todo / memory / vision извлечены по образцу возможностей персонажа «理華» из экосистемы steve02081504/fount (MIT). Заимствована только архитектурная идея (опрос бездействия с backoff, взвешенные задачи, память «имя × ключевые слова × содержимое»), без копирования кода.
Реализация протокола MCP основана на официальном @modelcontextprotocol/sdk.
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
Personal assistant MCP server with search, execute, packages, jobs, secrets, and integrations.
Private-by-default, local-first memory/context/task orchestrator for MCP apps and agents.
OCR, transcription, file extraction, and image generation for AI agents via MCP.
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/win10ogod/Rimai'
If you have feedback or need assistance with the MCP directory API, please join our Discord server