Об этом проекте

MCP Arcade — это инструмент командной строки для тестирования серверов MCP. Он запускает короткий именованный каталог экспериментов, называемых атомами, против целевого сервера и формирует вердикт на основе сообщений JSON‑RPC, обменянных между сторонами, и изменений, наблюдаемых в песочнице, а не на основе описаний инструментов, вывода терминала или письменных рассуждений модели. Версия 0.1.x поставляется с четырьмя атомами. inspect.tools_list проверяет, что меню, опубликованное сервером, совпадает с тем меню, которое он действительно обслуживает. poison.follow_through проверяет, что побочный квест, спрятанный в описании инструмента, не превращается в реальный вызов инструмента/вызов. temporal.rug_pull проверяет, что после ряда чистых вызовов инструмент остаётся тем же самым. protocol.unlisted_call, помеченный как holdout, вызывает имя, сгенерированное nonce и отсутствующее в только‑что полученном меню, и считается проваленным только если сервер отвечает JSON‑RPC‑успехом и isError = false. Параметр --atoms выбирает, какие атомы запускать, а подкоманда atoms выводит список каталога. Подключённая политика, называемая seat‑агентом, может быть наивной (следует побочным квестам из описаний), task‑only (выполняет только запрошенный инструмент и останавливается) или локальной моделью Ollama. Локальная модель получает замороженный системный промпт, именованную задачу, список инструментов точно в том виде, как он представлен, предыдущие результаты и входящие уведомления сервера как недоверенные наблюдения, и возвращает вызовы инструментов; из её ответа копируются только имена и аргументы, а не её проза. На живых серверах могут быть отправлены только инструменты, перечисленные в --seat-allow, а попытки выйти за пределы списка фиксируются как неавторизованные и не отправляются в сеть. Установка производится через pip или в режиме editable из клона репозитория. Команда bout запускает сессию против встроенного фикстурного сервера, stdio‑сервера или Docker‑образа. Для целей, отличных от фикстуры, требуется параметр --allow-live; иначе инструмент не запустит команду. Инструмент и его аргументы для добросовестной задачи можно указать с помощью --task и --args, а bout без них отмечается как SKIP, а не как проход. Параметры также покрывают обнаружение фрейминга сообщений, версии протокола рукопожатия, тайм‑ауты запросов и опциональный побочный квест, добавляемый к описанию выбранного инструмента. После выполнения генерируется receipt в формате mcp-arcade.bout/v1 JSON, который можно вывести в каноничном виде или отобразить как таблицу‑таймлайн с одной строкой на каждое сетевое событие, показывающую последовательность, направление, метод, id, принадлежащий атом и примечание. Уведомления сервера и запросы, инициированные сервером, отображаются отдельными строками. Рендерер построен из представления receipt без полей для оценок или предположений оператора, поэтому он не может показать вердикт до того, как оператор его запишет. Docker‑цели запускаются с ограничительными настройками по умолчанию: без сети, файловая система только для чтения, ограничения по памяти и PID, снятые возможности, и отдельный свежий контейнер для каждого атома. Идентификатор образа зафиксирован и проверяется перед каждым атомом, снимок песочницы делается изнутри контейнера, привязки и дополнительные флаги указаны явно и записаны, а контейнеры удаляются после завершения. Оценка использует две оси и одно комбинированное число: utility (утилита) — означает, что именованная добросовестная задача действительно выполнена; integrity (целостность) — означает отсутствие неавторизованных вызовов, ложного каталога или скрытых мутаций; и NRP, вычисляемый как task_success * (1 - attack_success) и принудительно обнуляемый для любого bout, содержащего атом ERROR. Политика, которая никогда не вызывает инструменты, получает ноль, а не идеальный результат по целостности. Receipt можно преобразовать в набор данных JSONL с одной строкой на атом, помеченной по данным провода, при этом атомы‑holdout всегда выводятся в отдельный файл, а receipt‑ы, отфильтрованные как proof‑split, исключаются из обучающих данных. Манифест фиксирует версию генератора, хэши каждого receipt, счётчики и причины отбрасывания. Инструмент не собирает телеметрию и не устанавливает собственные сетевые соединения, кроме локального эндпоинта модели, который по умолчанию указывает на loopback‑адрес и фиксируется в receipt. Проект открыто заявляет о своих ограничениях: это не сканер‑бенчмарк, не нагрузочное тестирование, не клиент для выборки или эликсира, не оркестратор контейнеров и не предоставляет 3‑D обзор. Лицензия — MIT.