We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/TheMacroeconomicDao/bybit-ai-trader'
If you have feedback or need assistance with the MCP directory API, please join our Discord server
# ПРОМПТ ДЛЯ ИСПРАВЛЕНИЯ KeyError: '"category"' В TRADER-AGENT
## КОНТЕКСТ ПРОБЛЕМЫ
**Проект:** TRADER-AGENT - AI Trading Agent для криптовалютной торговли на Bybit
**Проблема:** При размещении ордеров на фьючерсах (linear/inverse) возникает ошибка `KeyError: '"category"'`
**Симптомы:**
- Ошибка возникает при вызове `place_order` через MCP инструмент `bybit-trading`
- Ошибка перехватывается в `full_server.py` до того, как выполнение доходит до функции `place_order` в `trading_operations.py`
- Логи пустые или не содержат детальной информации о месте ошибки
## ЗАДАЧА
**Твоя задача:** Найти КОРЕНЬ проблемы и исправить её РЕАЛЬНО РАБОЧИМ решением в соответствии с архитектурой проекта и best practices.
## ПРОТОКОЛ ДЕЙСТВИЙ
### ЭТАП 1: ИНИЦИАЛИЗАЦИЯ И ЗАГРУЗКА КОНТЕКСТА
1. **Загрузи память проекта:**
```
mcp_memory_open_nodes: ["PROJECT_TRADER_AGENT", "COMPONENT_KNOWLEDGE_BASE", "PROMPT_CORE_INSTRUCTIONS"]
```
2. **Прочитай ключевые файлы проекта:**
- `mcp_server/full_server.py` - главный MCP сервер, обработчик инструментов
- `mcp_server/trading_operations.py` - модуль торговых операций, функция `place_order`
- `mcp_server/bybit_client.py` - клиент Bybit API
- `README.md` или документация проекта (если есть)
3. **Изучи архитектуру:**
- Как работает MCP сервер
- Как обрабатываются вызовы инструментов
- Как передаются параметры между слоями
- Как работает прямой HTTP запрос к Bybit API v5
### ЭТАП 2: АНАЛИЗ ПРОБЛЕМЫ
1. **Проверь обработку параметров в `full_server.py`:**
- Найди функцию `call_tool` и обработчик `place_order`
- Проверь, как извлекаются параметры из `arguments`
- Найди, где может возникать KeyError при доступе к параметрам
- Проверь логирование - почему логи пустые?
2. **Проверь функцию `place_order` в `trading_operations.py`:**
- Найди все места, где используется `category`
- Проверь, где может возникать KeyError с ключом `'"category"'` (с кавычками!)
- Проверь обработку ответов от API - может быть проблема в парсинге ответа?
- Проверь установку leverage - может быть ошибка там?
3. **Проверь прямой HTTP запрос:**
- Функция `_place_order_direct_http` - правильно ли генерируется подпись?
- Правильно ли формируется JSON body?
- Правильно ли обрабатывается ответ?
4. **Проверь документацию Bybit API v5:**
- Используй `context7` MCP для получения актуальной документации
- Проверь формат запросов для `/v5/order/create`
- Проверь формат ответов
- Проверь требования к подписи для POST запросов с JSON body
### ЭТАП 3: ДИАГНОСТИКА
1. **Добавь детальное логирование:**
- В начале функции `place_order` - логируй все входящие параметры
- В обработчике `place_order` в `full_server.py` - логируй `arguments` и его тип
- В каждом критическом месте - логируй состояние переменных
- Используй `logger.error` с `exc_info=True` для полного traceback
2. **Проверь структуру данных:**
- Какой тип у `arguments` в `full_server.py`?
- Какой тип у `category` в `trading_operations.py`?
- Может быть проблема в сериализации/десериализации JSON?
3. **Проверь обработку исключений:**
- Где перехватывается KeyError?
- Правильно ли обрабатывается?
- Не теряется ли информация об ошибке?
### ЭТАП 4: ПОИСК КОРНЯ ПРОБЛЕМЫ
**Критические вопросы для анализа:**
1. **Где именно возникает KeyError?**
- В `full_server.py` при извлечении параметров?
- В `trading_operations.py` при обработке ответа?
- В Pybit библиотеке при обработке ответа API?
- В обработке ответа от прямого HTTP запроса?
2. **Почему ключ содержит кавычки `'"category"'`?**
- Это строка с кавычками внутри?
- Это ошибка в сериализации JSON?
- Это ошибка в обработке ответа от API?
3. **Почему логи пустые?**
- Логирование не работает?
- Ошибка возникает до логирования?
- Логи пишутся в другое место?
4. **Почему ошибка перехватывается в `full_server.py`?**
- Ошибка возникает в `full_server.py`?
- Или пробрасывается из `trading_operations.py`?
### ЭТАП 5: РЕШЕНИЕ
**Принципы исправления:**
1. **Найди КОРЕНЬ проблемы, а не симптомы:**
- Не добавляй костыли и временные решения
- Исправь архитектурную проблему
- Убедись, что решение соответствует best practices
2. **Используй правильную обработку ошибок:**
- Используй `try-except` с конкретными исключениями
- Логируй полный traceback
- Не скрывай ошибки, а обрабатывай их правильно
3. **Проверь соответствие Bybit API v5:**
- Формат запросов должен соответствовать документации
- Формат подписи должен быть правильным
- Обработка ответов должна быть безопасной
4. **Улучши логирование:**
- Добавь логирование в критических местах
- Используй разные уровни логирования (DEBUG, INFO, ERROR)
- Убедись, что логи пишутся в файл
### ЭТАП 6: ТЕСТИРОВАНИЕ
1. **Проверь исправление:**
- Попробуй разместить ордер через MCP инструмент
- Проверь логи - должна быть детальная информация
- Убедись, что ошибка исправлена
2. **Проверь edge cases:**
- Ордер без leverage
- Ордер с leverage
- Ордер для spot (если поддерживается)
- Ордер для linear
- Ордер для inverse
## КРИТИЧЕСКИЕ ФАЙЛЫ ДЛЯ АНАЛИЗА
1. **`mcp_server/full_server.py`** - строки 764-813 (обработчик place_order)
2. **`mcp_server/trading_operations.py`** - строки 529-874 (функция place_order)
3. **`mcp_server/trading_operations.py`** - строки 330-403 (функция _place_order_direct_http)
4. **`mcp_server/trading_operations.py`** - строки 301-328 (функция _generate_signature)
## ВОЗМОЖНЫЕ ПРИЧИНЫ ПРОБЛЕМЫ
1. **Ошибка в обработке ответа от Pybit:**
- Pybit может возвращать ответ с ключами в неожиданном формате
- Может быть проблема в парсинге JSON ответа
2. **Ошибка в обработке ответа от прямого HTTP:**
- Может быть проблема в парсинге JSON ответа
- Может быть проблема в структуре ответа
3. **Ошибка в сериализации/десериализации:**
- Может быть проблема при передаче параметров через MCP
- Может быть проблема в формате JSON
4. **Ошибка в обработке исключений:**
- KeyError может возникать в одном месте, а перехватываться в другом
- Может теряться информация о реальном месте ошибки
## ТРЕБОВАНИЯ К РЕШЕНИЮ
1. **Должно быть РЕАЛЬНО РАБОЧИМ:**
- Не временные костыли
- Не обходные пути
- Реальное исправление корня проблемы
2. **Должно соответствовать архитектуре:**
- Не ломать существующую архитектуру
- Использовать существующие паттерны
- Следовать принципам проекта
3. **Должно соответствовать best practices:**
- Правильная обработка ошибок
- Правильное логирование
- Правильная работа с API
4. **Должно быть документировано:**
- Комментарии в коде
- Объяснение решения
- Объяснение причины проблемы
## ФОРМАТ ОТВЕТА
После анализа и исправления предоставь:
1. **Описание найденной проблемы:**
- Где именно возникает ошибка
- Почему она возникает
- Какие факторы способствуют проблеме
2. **Объяснение решения:**
- Что было исправлено
- Почему это решение правильное
- Как это соответствует best practices
3. **Список изменений:**
- Какие файлы были изменены
- Какие строки были изменены
- Что было добавлено/удалено
4. **Инструкции по тестированию:**
- Как проверить, что проблема исправлена
- Какие тесты нужно провести
- Что должно быть в логах
## ДОПОЛНИТЕЛЬНЫЕ ИНСТРУКЦИИ
### ИСПОЛЬЗОВАНИЕ ИНСТРУМЕНТОВ
1. **Используй `codebase_search` для поиска:**
- Где используется `category` в коде
- Где может возникать KeyError
- Как обрабатываются ответы от API
2. **Используй `grep` для точного поиска:**
- Поиск всех мест с `'"category"'` или `"category"`
- Поиск всех `KeyError` в коде
- Поиск всех `except KeyError`
3. **Используй `read_file` для детального анализа:**
- Читай полные функции, не только фрагменты
- Обращай внимание на контекст
- Проверяй все ветки кода
4. **Используй `context7` MCP для документации:**
- Получи актуальную документацию Bybit API v5
- Проверь формат запросов и ответов
- Проверь требования к подписи
### МЕТОДОЛОГИЯ ОТЛАДКИ
1. **Воспроизведи проблему:**
- Вызови `place_order` через MCP инструмент
- Зафиксируй точную ошибку
- Проверь логи
2. **Добавь логирование:**
- В начале каждой функции
- Перед каждым критическим действием
- После каждого критического действия
- В обработчиках исключений
3. **Проверь данные:**
- Типы переменных
- Значения переменных
- Структуру данных
- Формат JSON
4. **Проверь поток выполнения:**
- Какие функции вызываются
- В каком порядке
- Где происходит ошибка
- Что происходит до и после ошибки
### ЧЕКЛИСТ ПРОВЕРКИ
Перед тем как считать проблему решённой, убедись:
- [ ] Ошибка больше не возникает при размещении ордера
- [ ] Логи содержат детальную информацию о выполнении
- [ ] Все параметры правильно извлекаются и передаются
- [ ] Прямой HTTP запрос работает корректно
- [ ] Подпись генерируется правильно
- [ ] Ответ от API обрабатывается безопасно
- [ ] Код соответствует архитектуре проекта
- [ ] Код следует best practices
- [ ] Код документирован
- [ ] Решение не содержит костылей
## НАЧНИ РАБОТУ
Теперь начни анализ проблемы. Следуй протоколу действий пошагово. Не пропускай этапы. Будь тщательным и основательным. Найди КОРЕНЬ проблемы и исправь её ПРАВИЛЬНО.
---
**ВАЖНО:** Если проблема не очевидна сразу, не останавливайся. Продолжай анализ. Добавь логирование. Проверь все возможные места. Докапайся до реальной причины. Это критическая проблема, которая блокирует работу системы.
**ПРИНЦИП:** Любая проблема имеет причину. Если ты не можешь найти причину, значит ты недостаточно глубоко копнул. Продолжай копать. Используй все доступные инструменты. Анализируй код построчно. Проверяй каждое предположение. Не останавливайся, пока не найдёшь корень проблемы.