npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

claude-chat-mcp

v0.3.0

Published

E2E-encrypted chat for Claude users: MCP client, relay server and business bots

Readme

Claude Chat

👋 Не программист? Читай ИНСТРУКЦИЮ простыми словами — без жаргона, с аналогиями и таблицей «что сказать Claude». Этот README — технический, для разработчиков.

E2E-зашифрованный мессенджер для пользователей Claude. Пользователь Claude Code подключает MCP-сервер одной командой — и его Claude становится клиентом чата: пишет, читает и суммаризирует переписку. Бизнесы подключают в чат ботов на Claude API, которые отвечают клиентам на основе знаний о бизнесе.

Архитектура

Claude Code (Алиса) ──stdio──> client/mcp.js ──HTTPS──┐
                              (ключи и шифрование      │
                               только на её машине)    ▼
                                              server/index.js  ← хранит ТОЛЬКО
                                              (relay-сервер)     шифротекст и публичные ключи
                                                       ▲
Claude Code (Боб) ────stdio──> client/mcp.js ──────────┤
                                                       │
Бот бизнеса (bot/run-bot.js + Claude API) ─────────────┘
  • Шифрование: libsodium crypto_box (X25519 + XSalsa20-Poly1305). Сообщение шифруется на машине отправителя публичным ключом получателя и расшифровывается только на машине получателя. Сервер физически не может прочитать переписку (это проверяется тестом).
  • Аутентификация: каждый запрос подписан Ed25519-ключом клиента; сервер проверяет подпись и отбрасывает запросы старше 5 минут. Занять чужой username нельзя.
  • Ключи: генерируются локально при регистрации, лежат в ~/.claude-chat/identity.json (права 0600) и никогда не отправляются на сервер.

Быстрый старт (пользователь)

Одна команда — и всё:

claude mcp add claude-chat -- npx -y claude-chat-mcp
# пока пакет не опубликован в npm: claude mcp add claude-chat -- node /путь/до/chat/client/mcp.js

Регистрация не нужна: при первом же действии («напиши boba…») клиент сам сгенерирует ключи и зарегистрирует тебя под именем из системы (его можно поменять, попросив Claude «зарегистрируй меня как …» до первого действия). Адрес продакшен-сервера зашит по умолчанию; свой сервер — через --env CLAUDE_CHAT_SERVER=….

Дальше просто разговаривай с Claude: «напиши боту coffeebot, что я хочу капучино», «проверь входящие», «создай проект и пригласи исполнителя».

Приглашения

Владелец проекта: «сделай инвайт для исполнителя» → Claude отдаёт готовое сообщение-приглашение с кодом и тремя шагами подключения — его целиком пересылают человеку в любой мессенджер. Тот говорит своему Claude «вступи в проект по коду …» и оказывается в проекте (регистрация автоматическая). Инвайт одноразовый и живёт 7 дней (настраивается), роль зашита в приглашение. Знание кода = право войти, поэтому коды не публикуем. Ссылка /join/<токен> со страницей-инструкцией тоже работает как запасной вариант.

Инструменты MCP

| Инструмент | Что делает | |---|---| | chat_register | Создаёт ключи локально, регистрирует username | | chat_whoami | Текущая личность | | chat_list_users | Все пользователи и боты сервера | | chat_send | Отправить зашифрованное сообщение | | chat_check_inbox | Получить и расшифровать входящие | | chat_history | Локальная история переписки | | chat_create_project | Создать проект (ты — owner) | | chat_my_projects | Мои проекты и роли в них | | chat_project_info | Участники и задачи проекта | | chat_add_member | Добавить участника по имени (owner) | | chat_invite | Создать ссылку-приглашение с ролью (owner) | | chat_join | Вступить в проект по ссылке/токену | | chat_create_task | Создать задачу, опционально назначить | | chat_update_task | Двигать статус задачи / переназначать |

Проекты, роли и задачи

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

  • owner — создатель: приглашает людей, назначает задачи, принимает или отклоняет работу;
  • member — полноправный участник: видит всё, создаёт задачи;
  • contractor (исполнитель) — видит только назначенные ему задачи, двигает их по воркфлоу, не может создавать задачи и приглашать людей.

Жизненный цикл задачи: open → in_progress → submitted → accepted / rejected (после reject исполнитель возвращает задачу в работу). Исполнитель не может принять собственную работу — принимает только owner.

Сценарий «биржи»: управляющий кофейни создаёт проект, приглашает исполнителя как contractor, ставит задачу «сделать рилс», исполнитель делает контент своими скилами, сдаёт (submitted), владелец принимает. Обсуждение работы идёт в E2E-зашифрованных личных сообщениях.

⚠️ Метаданные задач (названия, статусы) в MVP хранятся на сервере открыто — это координация, а не переписка. Переписка остаётся E2E-зашифрованной. В roadmap — ключи комнат и шифрование задач для участников.

Деплой на сервер

Вариант А: быстрый тест — туннель с твоего Mac

npm run server                                  # терминал 1
brew install cloudflared
cloudflared tunnel --url http://localhost:8787  # терминал 2 → выдаст https://…trycloudflare.com

Второй человек подключается к этому URL (см. ниже). Минусы: URL живёт, пока запущен туннель, и Mac не должен уходить в сон.

Вариант Б: нормальный — VPS (Ubuntu)

# на сервере (Node 20+):
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo bash - && sudo apt install -y nodejs
rsync -av --exclude node_modules ./ user@SERVER:/opt/claude-chat/   # с твоего Mac
cd /opt/claude-chat && npm install --omit=dev
sudo npm i -g pm2 && pm2 start server/index.js --name claude-chat && pm2 save && pm2 startup

# HTTPS через Caddy (автоматический сертификат, нужен домен, указывающий на сервер):
sudo apt install -y caddy
echo 'chat.example.com { reverse_proxy localhost:8787 }' | sudo tee /etc/caddy/Caddyfile
sudo systemctl reload caddy

Подключение клиентов

На машине каждого пользователя (нужен Node и папка client/ + node_modules проекта):

claude mcp add claude-chat \
  --env CLAUDE_CHAT_SERVER=https://chat.example.com \
  -- node /путь/до/chat/client/mcp.js

Две учётки на одном компьютере (для теста в одиночку)

Личность привязана к папке CLAUDE_CHAT_HOME, поэтому можно поднять два MCP с разными папками и переключаться между ними в одном Claude Code:

claude mcp add chat-igor  --env CLAUDE_CHAT_HOME=$HOME/.claude-chat-igor  -- node /путь/до/chat/client/mcp.js
claude mcp add chat-buyer --env CLAUDE_CHAT_HOME=$HOME/.claude-chat-buyer -- node /путь/до/chat/client/mcp.js

Дальше: «через chat-igor зарегистрируй меня как igor», «через chat-buyer зарегистрируйся как buyer и напиши igor…» — и переписка/проекты работают между двумя личностями.

Бизнес-бот

ANTHROPIC_API_KEY=sk-ant-... node bot/run-bot.js \
  --username coffeebot \
  --knowledge bot/knowledge.example.md

Бот регистрируется как участник чата, раз в 3 секунды забирает входящие, расшифровывает, отвечает через Claude API (по умолчанию claude-opus-4-8, можно --model claude-haiku-4-5 для дешёвых ответов) и шлёт ответ обратно в зашифрованном виде. Знания о бизнесе — обычный markdown-файл.

Тесты

npm test

Сквозной тест: регистрация, обмен сообщениями в обе стороны, проверка что в базе сервера нет открытого текста, отказ при попытке занять чужой username и при неподписанных запросах.

Ограничения прототипа (честно)

  • Нет forward secrecy: один статичный ключ на пользователя. Для продакшена — Signal Protocol (double ratchet) или хотя бы ротация ключей.
  • Trust on first use: сервер раздаёт публичные ключи, и злонамеренный сервер мог бы подменить ключ при первом знакомстве (MITM). Лечится сверкой отпечатков ключей вне канала или журналом прозрачности ключей.
  • Метаданные видны серверу: кто, кому и когда пишет. Содержимое — нет.
  • Хранилище — JSON-файл; для продакшена нужен Postgres/SQLite и доставка по WebSocket вместо поллинга.
  • «Пользователи Claude» пока не верифицируются — публичного API «проверить подписку Claude» не существует; канал дистрибуции — MCP.

Дорожная карта

  1. Групповые чаты (комнаты) — ключ комнаты, зашифрованный для каждого участника.
  2. WebSocket-доставка вместо поллинга.
  3. Маркетплейс ботов: бизнес платит за подключение бота и объём сообщений.
  4. Сверка отпечатков ключей + ротация.
  5. Remote MCP (SSE/HTTP) — подключение из claude.ai без локальной установки.