invoices-mcp
by valderan
README.md
# invoices-mcp
MCP-сервер сервиса выставления счетов и актов: счета, акты, контрагенты, договоры, оплаты,
номенклатура, отчёты, публичные ссылки — для любого MCP-клиента (Claude Desktop, Claude Code,
Cursor, VS Code, собственный агент).
**Версия:** `0.1.3` · **Node.js:** 20+ · **Транспорт:** stdio (по умолчанию) или Streamable HTTP.
Пакет ставится прямо из этого репозитория, без сборки на вашей машине и без публикации в npm.
## Что умеет
- **34 инструмента.** Чтение: организации, контрагенты и их карта взаимоотношений, документы и
оплаты по ним, договоры, номенклатура, отчёты (сводка, дебиторка, акт сверки, реестр), публичные
ссылки. Запись: создание контрагента, позиции, черновика счёта или акта, выдача, аннулирование,
удаление черновика, оплаты, договоры, ссылки. Любая изменяющая операция требует `confirm: true` —
без него запрос в API вообще не уходит.
- **6 ресурсов-шаблонов** (`invoice://`, `invoice://…/pdf`, `act://`, `contractor://`,
`organization://`, `contract://`) — карточки для чтения моделью по ссылке.
- **4 промпта** — готовые сценарии: счёт по описанию, сводка по контрагенту, разбор дебиторки,
акт по счёту.
Права определяет **только токен**: readonly-токен не сможет ничего изменить, и MCP не даёт способа
это обойти.
## Установка
### Через `npx` из git (рекомендуется)
```bash
npx -y github:valderan/invoices-mcp#v0.1.3
```
Первый запуск занимает больше времени: npm скачивает пакет и четыре его зависимости
(`@modelcontextprotocol/*`, `zod`). Дальше они берутся из кеша (`~/.npm/_npx`).
> Указывайте **тег** (`#v0.1.3`), а не `#main`: npm кеширует по коммиту, и без тега легко
> остаться на старой копии.
### Локально
```bash
git clone https://github.com/valderan/invoices-mcp.git
cd invoices-mcp
npm install --omit=dev
INVOICES_API_URL=https://crm.example.ru INVOICES_API_TOKEN=ivs_… node dist/index.js
```
Проверить версию и справку можно без настройки:
```bash
npx -y github:valderan/invoices-mcp#v0.1.3 --version # invoices-mcp 0.1.3
npx -y github:valderan/invoices-mcp#v0.1.3 --help
```
## Настройка
Только переменные окружения — файлов конфигурации нет.
| Переменная | Обязательно | По умолчанию | Что это |
| --------------------------- | ----------- | ------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `INVOICES_API_URL` | да | — | Базовый адрес API без `/api/v1`, например `https://crm.example.ru`. `http://` допустим только для `localhost`/`127.0.0.1` и для хостов из `INVOICES_ALLOW_HTTP_HOSTS` |
| `INVOICES_ALLOW_HTTP_HOSTS` | нет | — | Хосты через запятую, где разрешён `http://` помимо localhost: нужно, когда сервер запускается в контейнере (`host.docker.internal`) |
| `INVOICES_API_TOKEN` | да | — | Сервисный токен `ivs_<kid>_<secret>` из админки, раздел «Токены» |
| `INVOICES_MCP_TRANSPORT` | нет | `stdio` | `stdio` или `http` |
| `INVOICES_MCP_PORT` | нет | `7331` | Порт HTTP-транспорта (слушает только `127.0.0.1`) |
| `INVOICES_TIMEOUT_MS` | нет | `10000` | Таймаут запроса к API |
| `INVOICES_LOG_LEVEL` | нет | `info` | `debug`, `info`, `warn`, `error` |
## Подключение в агентах
Везде одна схема: команда `npx`, аргументы с тегом, токен в `env`.
### Claude Desktop
`~/Library/Application Support/Claude/claude_desktop_config.json` (Windows: `%APPDATA%\Claude\`):
```json
{
"mcpServers": {
"invoices": {
"command": "npx",
"args": ["-y", "github:valderan/invoices-mcp#v0.1.3"],
"env": {
"INVOICES_API_URL": "https://crm.example.ru",
"INVOICES_API_TOKEN": "ivs_AbCdEf12_…"
}
}
}
}
```
### Cursor
`~/.cursor/mcp.json` (или `.cursor/mcp.json` в проекте) — тот же блок `mcpServers`.
### Claude Code
```bash
claude mcp add invoices \
--env INVOICES_API_URL=https://crm.example.ru \
--env INVOICES_API_TOKEN=ivs_AbCdEf12_… \
-- npx -y github:valderan/invoices-mcp#v0.1.3
```
### VS Code
`.vscode/mcp.json` — ключ `servers`:
```json
{
"servers": {
"invoices": {
"command": "npx",
"args": ["-y", "github:valderan/invoices-mcp#v0.1.3"],
"env": {
"INVOICES_API_URL": "https://crm.example.ru",
"INVOICES_API_TOKEN": "ivs_AbCdEf12_…"
}
}
}
}
```
### HTTP-режим
Если клиент умеет Streamable HTTP, сервер можно держать запущенным отдельно:
```bash
INVOICES_MCP_TRANSPORT=http INVOICES_MCP_PORT=7331 \
INVOICES_API_URL=https://crm.example.ru INVOICES_API_TOKEN=ivs_… \
npx -y github:valderan/invoices-mcp#v0.1.3
```
Клиент подключается к `http://127.0.0.1:7331/mcp`. Сервер слушает **только loopback** и проверяет
`Host`/`Origin` (защита от DNS rebinding): подключиться с другой машины нельзя, для этого нужен
обратный прокси. Плюс режима — токен не лежит в конфиге каждого пользователя.
## Токены и приватность
- Токен даёт ровно те права, что выданы при его создании: `readonly` — только чтение, `full` —
чтение и запись. MCP не расширяет доступ и не обходит `403`.
- Сервер **отправляет данные в модель**, включая локальные: суммы, названия контрагентов, ИНН,
номера документов. Если это неприемлемо для ваших клиентов — используйте readonly-токен и
ограничьте доступ на стороне API.
- Токен хранится в конфиге клиента. Утечка конфига = утечка токена: заводите отдельный токен на
каждую машину и отзывайте его в админке, раздел «Токены».
- В логах сервера только публичная часть токена (`kid`), суммы и содержимое документов не пишутся.
## Ошибки
| Симптом | Что делать |
| -------------------------------------------------- | -------------------------------------------------------------------------- |
| `Токен недействителен, истёк или отозван` | Создайте новый токен в админке → «Токены» |
| `У токена нет нужного права (не хватает скоупа …)` | Нужен токен с записью (`full`) для этой операции |
| `403 IP_NOT_ALLOWED` | У токена ограничение по IP — добавьте адрес машины или уберите ограничение |
| `Не найдено или недоступно этому токену` | Проверьте идентификатор поиском: возможно, объект из другой организации |
| `Превышен таймаут запроса к API` | Увеличьте `INVOICES_TIMEOUT_MS` или проверьте сеть |
| `конфигурация не загружена` | Не заданы `INVOICES_API_URL` / `INVOICES_API_TOKEN` |
Ответ инструмента ограничен 64 КБ: длинные списки сокращаются, в тексте появляется подсказка —
уточните фильтры или передайте `cursor` из предыдущего ответа.
## Версии
Версионирование — [SemVer](https://semver.org/lang/ru/), каждая версия помечена тегом `vX.Y.Z`,
история — в [CHANGELOG.md](CHANGELOG.md). Устанавливайте с тегом: `github:valderan/invoices-mcp#v0.1.3`.
Совместимость: новые инструменты и необязательные поля — minor; исправления поведения — patch;
удаление или переименование инструмента, обязательного аргумента или поля ответа — major.
## Лицензия
Проприетарная: использовать разрешено, копировать, распространять, изменять и встраивать в свои
продукты — нет. Полный текст — в [LICENSE](LICENSE).
This server cannot be deployed
Maintenance
ActivityMaintained
ResponsivenessNo recent community issues