Skip to main content
Glama

PicX MCP Server

Сервер на базе FastMCP 4, предоставляющий генерацию изображений и видео PicX Studio любому MCP-клиенту через Streamable HTTP без сессий.

Размещённый endpoint: https://mcp.picxstudio.com/mcp ⚠️ Ещё не развёрнут. Сейчас сервис работает локально; продакшен-хостинг запланирован (см. PLAN-MCP Phase 6).

Почему FastMCP 4

Тема FastMCP 4 — «stateless-транспорт без stateless-кода приложения». Целевая ревизия протокола — 2026-07-28 — полностью устраняет привязку к сессии. Любая реплика за обычным балансировщиком нагрузки может обслужить любой запрос. Никаких sticky-сессий, пересылки cookie или общего состояния в памяти между запросами.

Для нас это не опционально: MCP-клиенты (Cursor, Claude Code) внутри используют fetch() и не пересылают заголовки Set-Cookie, поэтому балансировка со sticky-сессиями не заработает независимо от конфигурации LB. Режим stateless_http=True в FastMCP 4 — единственный жизнеспособный путь к горизонтальному масштабированию.

FastMCP 4 также согласует обе эпохи протокола (устаревший SSE и современный Streamable HTTP) из одного развёртывания, так что старые клиенты не остаются за бортом.

Related MCP server: ChatATP Studio MCP Server

Статус инструментов

#

Инструмент

Статус

Примечания

1

picx_generate_image

✅ Работает

Инлайн, 5–20 с

2

picx_edit_image

✅ Работает

Требуется предварительная загрузка (API отклоняет data URIs)

3

picx_generate_video

✅ Работает

Фоновая задача (task=True); только режимы text/image/reference

4

picx_get_generation

✅ Работает

Опрашивает генерацию по ID

5

picx_upload_asset

✅ Работает

Возвращает CDN-URL, который можно использовать в инструментах редактирования

6

picx_list_assets

✅ Работает

7

picx_delete_asset

✅ Работает

8

picx_list_models

✅ Работает

Кэшируется (5 мин)

9

picx_search_templates

✅ Работает

Каталог 50K+; кэшируется

10

picx_get_template

✅ Работает

11

picx_get_account

✅ Работает

12

picx_get_usage

✅ Работает

13

picx_list_generations

🔴 Заблокирован

GET /v1/generations возвращает 404 — endpoint ещё не выпущен

Известные ограничения

  • Режимы видео: Доступны только режимы text, image и reference. Режимы frames, extend, lipsync и edit требуют полей, которые схема параметров не может безопасно сериализовать без отдельной валидации — их открытие вызывало бы непонятные ошибки 422 от API.

  • picx_list_generations: Реализован и готов к активации, но заблокирован до выхода GET /v1/generations на бэкенде.

  • Лимиты тарифов: Видимость rate limit и дневного лимита для каждого тарифа может быть недоступна, пока их не начнёт отдавать endpoint аккаунта.

  • OAuth: Пока не подключён (Phase 5). Авторизация по API-ключу работает уже сейчас.

Быстрый старт

# Clone and install
git clone https://github.com/Type-Think-AI/picx-mcp.git
cd picx-mcp
uv sync

# Configure
cp .env.example .env
# Edit .env — set PICX_API_KEY to your key from https://ai.picxstudio.com/api

# Run
python -m picx_mcp

Сервер запускается на http://localhost:8000. MCP endpoint находится на /mcp, health — на /health.

Настройка клиентов

Claude Desktop

{
  "mcpServers": {
    "picx": {
      "url": "http://localhost:8000/mcp",
      "headers": {
        "Authorization": "Bearer pxsk_your_api_key_here"
      }
    }
  }
}

Claude Code

{
  "mcpServers": {
    "picx": {
      "url": "http://localhost:8000/mcp",
      "headers": {
        "Authorization": "Bearer ${PICX_API_KEY}"
      }
    }
  }
}

Cursor

{
  "mcpServers": {
    "picx": {
      "url": "http://localhost:8000/mcp",
      "headers": {
        "Authorization": "Bearer ${PICX_API_KEY}"
      }
    }
  }
}

VS Code (Copilot)

{
  "mcp": {
    "servers": {
      "picx": {
        "type": "http",
        "url": "http://localhost:8000/mcp",
        "headers": {
          "Authorization": "Bearer ${PICX_API_KEY}"
        }
      }
    }
  }
}

Замените localhost:8000 на mcp.picxstudio.com, как только размещённый сервис заработает.

Аутентификация

Два механизма аутентификации, одна точка применения политик:

API-ключ (pxsk_…)

OAuth (Phase 5, пока недоступен)

Кто

Разработчики, CI, скриптовые агенты, self-hosted-пользователи

Обычные пользователи hosted-клиентов

Где получить

ai.picxstudio.com/api

Экран согласия в один клик

Как работает

Ключ пересылается с каждым запросом — сервер не хранит учётных данных

OAuth преобразуется в ключ сессии

Отзыв

Удалить ключ

Отозвать разрешение — настоящие ключи не затрагиваются

Оба пути сходятся в одной точке применения политик /v1: скоупы, rate limits, дневной лимит кредитов, логирование запросов. Второго, более слабого пути не существует.

MCP-сервер никогда не хранит учётные данные. Он пересылает API-ключ вызывающей стороны (или полученный ключ сессии) в /v1. Ключ, который он никогда не хранит, невозможно утечь.

Архитектура

MCP Client ──▶ PicX MCP Server ──▶ api.picxstudio.com/v1 ──▶ Provider + Storage
                 (this repo)         (owns everything below)

Этот сервер — трансляционный слой. Он преобразует вызовы инструментов MCP в API-вызовы /v1 и переводит результаты обратно в ссылки на ресурсы. Он намеренно НЕ:

  • Обращается к провайдерам моделей напрямую. Интеграция с провайдерами — зона ответственности /v1.

  • Касается денег. /v1 отвечает за списание кредитов, ценообразование, скидки, идемпотентность и возврат при сбое провайдера.

  • Хранит медиа. Результаты — это постоянные CDN-URL; ничего не кэшируется и не проксируется.

  • Поддерживает состояние сессии. stateless_http=True означает, что каждый запрос самодостаточен.

Почему не обращаться к провайдерам напрямую? /v1 уже выполняет: аутентификацию → rate limit → дневной лимит → проверку скоупов → цену из конфигурации → применение скидки → проверку идемпотентности → списание кредитов → вызов провайдера → возврат при сбое → запись в журнал запросов. Повторная реализация любого из этих шагов здесь со временем разойдётся, а расхождение в денежной логике — это баг биллинга: тихий, навсегда подрывающий доверие.

Тестирование с несколькими репликами

Вся суть выбора FastMCP 4 в том, что привязка к сессии не требуется. Чтобы доказать это локально:

docker compose up --scale app=2

Это запускает две реплики сервера за round-robin прокси, а также экземпляр Valkey. Тест, подтверждающий архитектуру:

  1. Запустите интерактивный вызов инструмента на реплике A (вызывает InputRequiredResult)

  2. Возобновите взаимодействие — запрос попадает на реплику B

  3. Запрос успешен, потому что REQUEST_STATE_KEY общий

Если REQUEST_STATE_KEY не задан (или различается между репликами), интерактивные раунды будут завершаться ошибкой валидации состояния. Это намеренно — неверная конфигурация становится явной, а не тихо неверной.

Переменные окружения

Переменная

Обязательность

Описание

PICX_API_BASE

Нет (по умолчанию: https://api.picxstudio.com/v1)

Корневой URL PicX API. Обязан заканчиваться на /v1.

REQUEST_STATE_KEY

Да (несколько реплик)

≥32 байт, побайтово идентичен на всех репликах. Защищает состояние интерактивных раундов.

REDIS_URL

Да

URL Valkey/Redis. Служит основой для задач, кэша ответов и OAuth-хранилища.

SESSION_CREDIT_CEILING

Нет (по умолчанию: 2000)

Максимум кредитов, которые может потратить одна MCP-сессия, независимо от дневного лимита аккаунта.

CONFIRM_CREDIT_THRESHOLD

Нет (по умолчанию: 200)

Выше этого порога инструмент возвращает input_required для подтверждения перед тратой.

JWT_SIGNING_KEY

Phase 5

Явный JWT-ключ. Без него токены перестают действовать при ротации секрета OAuth-клиента.

STORAGE_ENCRYPTION_KEY

Phase 5

Ключ Fernet. Без него вышестоящие OAuth-токены хранятся в открытом виде.

GOOGLE_CLIENT_ID

Phase 5

Идентификатор Google OAuth-клиента.

GOOGLE_CLIENT_SECRET

Phase 5

Секрет Google OAuth-клиента.

PICX_MCP_BASE_URL

Phase 5 (по умолчанию: https://mcp.picxstudio.com)

Публичный URL для OAuth-колбэков.

Честные лимиты

  • Каждая генерация стоит кредитов. Этот сервер не обходит тарификацию — в этом суть.

  • Потолок на сессию (по умолчанию 2000 кредитов) ограничивает слив кредитов через prompt-инъекции. Это отдельно от дневного лимита аккаунта (13 000/день).

  • Подтверждающий запрос выше порога (по умолчанию 200 кредитов) перед тратой.

  • Нет офлайн/локальной генерации. Вся генерация обращается к PicX API по сети.

  • Видео асинхронно. Даже если task=True скрывает опрос, генерация занимает минуты — агенту придётся ждать.

  • Rate limits принадлежат API, а не этому серверу: 60 запросов/мин, 10K запросов/день по умолчанию. MCP-сервер не добавляет дополнительных лимитов.

  • Сервер находится в бете. FastMCP 4 — это 4.0.0b3. Возможны шероховатости.

Лицензия

MIT

Related MCP Connectors

Related MCP Servers