foodvisor-mcp
foodvisor-mcp
Удаленный сервер Model Context Protocol, который предоставляет API питания Foodvisor для LLM-агентов (Claude, Cursor и др.). Ищите продукты, регистрируйте приемы пищи, получайте данные о прогрессе и макронутриентах — и все это через вашего помощника.
Отказ от ответственности. Этот проект является неофициальным. Он использует закрытый мобильный API Foodvisor путем обратной разработки его запросов и не поддерживается Foodvisor. Используйте на свой страх и риск; конечные точки могут измениться без уведомления.
Возможности
🥗 Поиск по каталогу с указанием калорий, макронутриентов, бренда, изображения и Nutriscore.
📒 Регистрация приемов пищи (завтрак/обед/ужин/перекус/пользовательский_*) с указанием количества и множителей порций.
📊 Ежедневная сводка — агрегация калорий и макронутриентов на стороне сервера в сравнении с вашими целями.
📈 Прогресс — история ежедневных калорий, веса и оценок (≈90 дней).
🔥 Серия (Streak) — текущее количество дней подряд с регистрацией и доступные «заморозки».
💧 Журнал гидратации.
👤 Профиль и цели по питанию — цели по калориям/макронутриентам на каждый день недели.
🔐 OAuth 2.1 + PKCE с динамической регистрацией клиентов — работает как коннектор для Claude в один клик.
🔄 Stateless (без сохранения состояния) для нескольких пользователей: токены являются самодостаточными (база данных не требуется). Токены обновления (refresh tokens) Foodvisor шифруются (AES-256-GCM) внутри JWT, выданного OAuth.
♻️ Автоматическое обновление токенов доступа с кэшированием в памяти и защитой от перегрузок.
Related MCP server: Nutrition and Training Tracker MCP
Доступные инструменты MCP
Инструмент | Описание |
| Поиск в каталоге Foodvisor по текстовому запросу. |
| Полная информация о питательной ценности (макронутриенты, витамины, единицы измерения) для одного или нескольких |
| Добавление продуктов в прием пищи на указанную дату. |
| Зарегистрированные приемы пищи за диапазон дат. |
| Общее количество калорий/макронутриентов за день в сравнении с вашими целями. |
| Ежедневные калории, вес и оценка Foodvisor за ~90 дней. |
| Доля приемов пищи с оценками A/B/C/D за скользящие окна 7/30/90 дней. |
| Текущая серия регистрации и «заморозки». |
| Ежедневное потребление воды за диапазон дат. |
| Профиль и цели по питанию. |
Быстрый старт с Docker
git clone https://github.com/cldt-fr/foodvisor-mcp.git
cd foodvisor-mcp
docker compose up -dТеперь сервер прослушивает http://localhost:3000/mcp. Проверка работоспособности доступна по адресу /health.
Для запуска за обратным прокси-сервером (Caddy, Traefik, nginx) на публичном домене просто завершите TLS перед портом 3000.
Аутентификация
foodvisor-mcp поддерживает два способа аутентификации, оба из которых опираются на одни и те же базовые учетные данные — ваш refresh token Foodvisor:
OAuth 2.1 (рекомендуется) — сервер является полноценным сервером авторизации OAuth с динамической регистрацией клиентов и PKCE. Совместимые MCP-клиенты (Claude, Cursor и др.) обрабатывают процесс автоматически: они обнаруживают конечные точки авторизации, регистрируются и открывают страницу входа, где вы один раз вставляете свой refresh token Foodvisor. Затем сервер выдает собственный JWT с вашим refresh token, зашифрованным с помощью AES-256-GCM.
Direct Bearer (для опытных пользователей) — передавайте ваш JWT обновления Foodvisor напрямую как
Authorization: Bearer …. Полезно для скриптов или быстрых тестов. Сервер определяет формат токена и работает как прокси, как и раньше.
В любом случае, состояние пользователя на сервере не сохраняется: JWT, выданный OAuth, является самодостаточным, а устаревший режим работает исключительно как проброс.
Получение вашего refresh token Foodvisor
Foodvisor аутентифицируется только через Apple Sign-In на iOS — публичного OAuth или конечной точки с паролем не существует. Перехватите ответ POST /user/auth/ на реальном iPhone с помощью Charles Proxy (или Proxyman, mitmproxy и т.д.), настроенного как HTTPS man-in-the-middle:
Установите корневой сертификат Charles на ваш iPhone и включите полное доверие.
Принудительно закройте и снова откройте приложение Foodvisor, затем войдите в систему.
Найдите запрос
POST https://api.foodvisor.io/api/6.0/ios/FR/fr_FR/user/auth/. JSON-ответ содержитtokens.refresh— это ваши долгоживущие учетные данные (≈ 6 месяцев).
Refresh tokens предоставляют полный доступ к вашей истории питания. Относитесь к ним как к паролям.
Настройка MCP-клиента
Claude (веб / Desktop / Code) — OAuth
Добавьте сервер как коннектор с его публичным URL /mcp (например, https://foodvisor-mcp.example.com/mcp). Claude выполнит следующее:
Обнаружит метаданные OAuth по адресам
/.well-known/oauth-protected-resourceи/.well-known/oauth-authorization-server.Зарегистрируется через
POST /register.Откроет страницу
/authorizeв вашем браузере. Вставьте ваш refresh token Foodvisor в форму и отправьте ее.Обменяет полученный код на долгоживущий токен доступа (по умолчанию 30 дней).
После этого вы сможете использовать инструменты напрямую из Claude. Когда срок действия токена доступа истечет, Claude повторит процесс.
Direct Bearer (любой MCP-клиент, поддерживающий Streamable HTTP)
{
"mcpServers": {
"foodvisor": {
"url": "https://foodvisor-mcp.example.com/mcp",
"headers": {
"Authorization": "Bearer <YOUR_FOODVISOR_REFRESH_TOKEN>"
}
}
}
}Локальная разработка
Требуется Node ≥ 22.
npm install
npm run dev # tsx watch on $PORT (default 3000)
npm run typecheck
npm run build && npm startСтруктура проекта
src/
├── index.ts # Node http server + per-request MCP transport + OAuth routes
├── env.ts # zod-validated env vars
├── auth/
│ ├── extract.ts # Bearer parsing — accepts OAuth JWT and legacy Foodvisor refresh
│ └── token-cache.ts # Foodvisor access-token cache + refresh
├── oauth/
│ ├── jwt.ts # HS256 sign/verify + AES-256-GCM encrypt/decrypt
│ ├── store.ts # in-memory clients + auth codes (TTL)
│ ├── login.ts # HTML login page (paste refresh token)
│ ├── handlers.ts # /register, /authorize, /token handlers
│ └── metadata.ts # /.well-known/* metadata builders
├── foodvisor/
│ ├── client.ts # fetch wrapper with 401 retry
│ ├── endpoints.ts # typed endpoint helpers
│ └── types.ts # response shapes
└── mcp/
├── server.ts # createMcpServer(ctx)
└── tools/ # one file per tool group
├── food.ts
├── meal.ts
├── progress.ts
├── trackers.ts
└── profile.tsHTTP-сервер намеренно сделан минималистичным (без Express/Hono) — каждый POST /mcp запускает новый McpServer, привязанный к userId/refreshToken вызывающего абонента и stateless-транспорту StreamableHTTPServerTransport.
Переменные окружения
Переменная | По умолчанию | Назначение | |||
|
| Порт прослушивания HTTP | |||
|
|
|
|
|
|
| вычисляется | Публичный origin (например, | |||
| случайно | HMAC-секрет, используемый для подписи токенов OAuth. Мин. 32 символа. Установите явно в продакшене — иначе токены будут аннулироваться при каждом перезапуске. | |||
|
| Время жизни токенов доступа OAuth в секундах (по умолчанию 30 дней). | |||
|
| Переопределять только для тестирования | |||
|
| Префикс пути локали, используемый вышестоящим API |
Сгенерируйте стабильный секрет с помощью:
openssl rand -base64 48Заметки по безопасности
Сервер является доверенным прокси для Foodvisor: любой, у кого есть действительный refresh token Foodvisor, может использовать его для чтения и записи данных о питании пользователя. В продакшене используйте HTTPS перед конечной точкой
/mcpи рассмотрите возможность использования списков разрешенных IP-адресов, если сервер открыт публично.Токены хранятся только в оперативной памяти процесса. Они никогда не сохраняются на диск.
Кэш токенов индексируется по
user_idиз JWT, поэтому одновременные запросы от одного и того же пользователя используют один и тот же токен доступа; одновременные попытки обновления объединяются через карту выполняемых запросов.
Дорожная карта
Распознавание приемов пищи по фото (главная фишка Foodvisor), как только будет проведена обратная разработка конечной точки загрузки.
Журнал активности, взвешивания, пользовательские рецепты и избранное.
Опциональное хранилище токенов для устойчивости при перезапусках.
Участие в разработке
Проблемы и PR приветствуются на https://github.com/cldt-fr/foodvisor-mcp. Пожалуйста, не открывайте тикеты с просьбой помочь в обратной разработке конечных точек Foodvisor; перехватите их самостоятельно с помощью Charles/Proxyman и предложите типизированную обертку.
Лицензия
MIT — см. LICENSE.
Related MCP Connectors
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
Unlock the power of food transparency with our Open Food Facts MCP server. Easily look up any food
MCP server for AI dialogue using various LLM models via AceDataCloud
Hosted MCP server connecting claude.ai, ChatGPT and other AI apps to your own computer
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceMCP server for MealMastery AI meal planning that enables users to manage meal plans, recipes, and grocery lists through natural language conversation with AI agents like Claude.41 npmMIT
- FlicenseNot gradedqualityCmaintenanceMCP server for tracking nutrition meals and workouts, integrating with claude.ai to manage food logs, macros, exercise catalogs, and generate daily/weekly summaries.-
- AlicenseNot gradedqualityDmaintenanceAn MCP server that lets you log meals through Claude (and soon ChatGPT) in plain language, using India's official food composition data (IFCT 2017) plus USDA, enabling accurate calorie and macro tracking for Indian dishes with household units and photo logging.54 npm2AGPL 3.0
- AlicenseNot gradedqualityDmaintenanceAn MCP server for nutritionists to manage patients, prescriptions, anthropometry, and meal plans, integrating with Claude, Cursor, and other AI agents.MIT