
Реализация уязвимого MCP-сервера с использованием mcp-go
MCP-сервер службы поддержки для AI-ассистентов написания кода. Один Go-бинарный файл, многоуровневая аутентификация, 19 инструментов на 4 уровнях ролей.
Создан на основе mcp-go.
Запустите всё в изолированном контейнере. Claude Code предустановлен, а MCP-сервер запускается автоматически.
# Build
docker build -t otto-support .
# Run with your API key
docker run -it -e ANTHROPIC_API_KEY="$ANTHROPIC_API_KEY" otto-support
# Or with OAuth token
docker run -it -e CLAUDE_CODE_OAUTH_TOKEN="$CLAUDE_CODE_OAUTH_TOKEN" otto-support
Claude Code запускается внутри контейнера с уже настроенным MCP-сервером. Конфигурация на уровне хоста не требуется.
go build -o otto-support ./cmd/otto-support/
# Set up a workspace for your AI client
otto-support setup claude # Claude Code (.mcp.json)
otto-support setup codex # Codex CLI (~/.codex/mcp.json)
otto-support setup cursor # Cursor (.cursor/mcp.json)
cd otto-support
# Launch your AI client from this directory
# Clean up when done
otto-support setup remove
Инструменты ограничены системой ролей из 4 уровней. Вы начинаете без аутентификации и повышаете уровень, обнаруживая учётные данные.
Новые инструменты появляются динамически по мере аутентификации на более высоких уровнях.
otto-support flags <captured_data>
Встроенный агент подключается через настоящую клиентскую библиотеку mcp-go.
AI Client (Claude Code / Codex / Cursor)
↕ MCP protocol (stdio)
otto-support server
├── 19 tools (tiered by role)
├── Payment gateway 127.0.0.1:9004
├── Customer API 127.0.0.1:9002
├── Metadata service 127.0.0.1:9001
├── Session signer 127.0.0.1:9003
└── SQLite support.db
| Уровень | Как получить | Доступные инструменты |
|---|
| Без аутентификации | Начните здесь | status, create_user, authenticate |
| Пользователь | create_user | + create_ticket, add_note, list_tickets, get_ticket, get_customer (только собственные данные) |
| Поддержка | Найдите ключ подписи, выпустите токен | + search_customers, web_fetch, debug, active_sessions, update_customer, reset_password, escalate_ticket, validate_payment, support_override, db_lookup, env_debug |
| Администратор | Найдите admin-токен в активных сессиях | + troubleshoot |
| Инструмент | Уровень | Назначение |
|---|
status | Публичный | Проверка работоспособности системы. Подробный режим показывает конечные точки сервисов (требуется аутентификация). |
create_user | Публичный | Создать учётную запись пользователя и получить токен аутентификации |
authenticate | Публичный | Аутентификация с помощью токена сессии для повышения роли |
create_ticket | Пользователь | Создать тикет в службу поддержки (привязан к вашей учётной записи) |
add_note | Пользователь | Добавить заметку к своим тикетам |
list_tickets | Пользователь | Список ваших тикетов (поддержка+ видит все) |
get_ticket | Пользователь | Просмотр ваших тикетов (поддержка+ видит все) |
get_customer | Пользователь | Просмотр собственной учётной записи (поддержка+ видит все) |
search_customers | Поддержка | Поиск всех клиентов по имени, email, уровню, статусу |
web_fetch | Поддержка | Получение URL и внутренних конечных точек API |
debug | Поддержка | Дамп конфигурации времени выполнения — ключи подписи, переменные окружения, конечные точки сервисов |
active_sessions | Поддержка | Список всех активных сессий в системе |
update_customer | Поддержка | Изменить email клиента или заметки |
reset_password | Поддержка | Сгенерировать временный пароль и отправить на email клиента |
escalate_ticket | Поддержка | Повысить приоритет тикета |
validate_payment | Поддержка | Проверить платёжные токены через шлюз |
support_override | Поддержка | Выпускать токены сессий для любого пользователя/роли |
db_lookup | Поддержка | Прямые запросы к базе данных |
env_debug | Поддержка | Полный дамп переменных окружения и файлов конфигурации |
troubleshoot | Администратор | Запуск диагностических команд в системе |
| Бэкенд | Учётные данные | Примечания |
|---|
claude | ANTHROPIC_API_KEY или CLAUDE_CODE_OAUTH_TOKEN | Anthropic Messages API |
codex | OPENAI_API_KEY или ~/.codex/auth.json | OpenAI Chat Completions |
ollama | нет (проверяет localhost:11434) | Совместим с OpenAI, модель по умолчанию: llama3.1 |
offline | нет | Детерминированный парсер для скриптовых сценариев |