Token导航 LogoToken导航TokenDH.com
Qwen Code Web Unofficial logo
AI代理stdio官方级别未说明来源级核验

Qwen Code Web Unofficial

MCP Server

基于Qwen CLI的AI助手Web界面,支持实时响应、多会话管理、工具调用和长期记忆功能。

工具数

14

提示词数

0

GitHub Stars

0

资源数

0
会话管理TypeScriptAI代理

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

作者 / 组织

Nezhirn

提供方

Nezhirn

最后核验

2026/5/17 20:19

快速接入

先看主来源和安装命令,再打开仓库或文档;下面只保留这个条目的关键接入事实。

命令预览

pip install -r requirements.txt

详细介绍

Qwen Agent — Веб-интерфейс для Qwen CLI с MCP

Автономный AI-ассистент с веб-интерфейсом для работы с системой, интернетом и памятью. Построен на базе Qwen CLI с поддержкой Model Context Protocol (MCP) для расширения инструментов.

🚀 Возможности

Основной функционал

  • Стриминг ответов в реальном времени — отображение thinking-блоков и генерации контента
  • Множественные сессии чатов — управление несколькими диалогами с сохранением истории
  • Tool calling loop — автоматическое выполнение инструментов с циклом обратной связи
  • Подтверждение опасных команд — интерактивное подтверждение для bash/ssh/file операций
  • Остановка генерации — возможность остановить выполнение в любой момент
  • Долгосрочная память — сохранение важной информации между сессиями

MCP Инструменты

  • 🔹 run_bash_command — выполнение bash-команд на сервере (таймаут: 120с)
  • 🔹 run_ssh_command — SSH-подключение к удалённым серверам
  • 🔹 write_file — запись содержимого в файлы
  • 🔹 edit_file — редактирование файлов (замена строк)
  • 🔹 save_memory — сохранение фактов в долгосрочную память
  • 🔹 read_memory — чтение сохранённых фактов
  • 🔹 delete_memory — удаление записей из памяти

Нативные инструменты Qwen CLI

  • 📂 read_file — чтение файлов
  • 📂 list_directory — список файлов в директории
  • 🔍 glob — поиск файлов по шаблону
  • 🔍 grep_search — поиск по содержимому файлов
  • 🌐 web_fetch — загрузка веб-страниц
  • 🌐 web_search — поиск в интернете
  • todo_write/todo_read — управление задачами

🏗️ Архитектура

┌─────────────────────────────────────────────────────────┐
│                    Frontend (React)                      │
│  ┌─────────────┐  ┌──────────┐  ┌──────────────────┐   │
│  │  App.tsx    │  │ WebSocket│  │  Компоненты UI   │   │
│  │  State Mgmt │  │  Client  │  │ (Sidebar, Chat,  │   │
│  └──────┬──────┘  └────┬─────┘  │  MessageBubble)  │   │
│         │              │        └──────────────────┘   │
└─────────┼──────────────┼───────────────────────────────┘
          │              │
          ▼              ▼
┌─────────────────────────────────────────────────────────┐
│              Backend (FastAPI + Python)                  │
│  ┌──────────────┐  ┌───────────────┐  ┌─────────────┐  │
│  │  server.py   │  │ WebSocket API │  │  REST API   │  │
│  │  Qwen CLI    │◄─┤  Streaming    │  │  Sessions   │  │
│  │  Integration │  │  Tool Calls   │  │  Messages   │  │
│  └──────┬───────┘  └───────────────┘  └─────────────┘  │
│         │                                               │
└─────────┼───────────────────────────────────────────────┘
          │
          ▼
┌─────────────────────────────────────────────────────────┐
│              MCP Server (mcp_tools_server.py)            │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌────────┐  │
│  │   Bash   │  │   SSH    │  │  Write   │  │  Edit  │  │
│  │ Commands │  │ Commands │  │   File   │  │  File  │  │
│  └──────────┘  └──────────┘  └──────────┘  └────────┘  │
└─────────────────────────────────────────────────────────┘
          │
          ▼
┌─────────────────────────────────────────────────────────┐
│                   SQLite Database                        │
│  ┌────────────┐  ┌──────────┐  ┌──────────┐            │
│  │  sessions  │  │ messages │  │  memory  │            │
│  └────────────┘  └──────────┘  └──────────┘            │
└─────────────────────────────────────────────────────────┘

📦 Технологический стек

Backend

  • FastAPI — асинхронный веб-фреймворк
  • WebSocket — стриминг данных в реальном времени
  • SQLite — хранение сессий, сообщений и памяти
  • MCP SDK — Model Context Protocol для инструментов
  • SlowAPI — rate limiting

Frontend

  • React 18+ — библиотека UI
  • TypeScript — типизация
  • Vite — сборщик
  • Framer Motion — анимации
  • Tailwind CSS — стилизация

🛠️ Установка

Требования

  • Python 3.10+
  • Node.js 18+
  • Qwen CLI (установлен и доступен в PATH)

1. Клонирование репозитория

git clone 
cd qwen-code-web-unofficial

2. Установка зависимостей backend

pip install -r requirements.txt

3. Установка зависимостей frontend

cd static
npm install
cd ..

4. Настройка окружения

Создайте файл .env в корне проекта:

# Путь к Qwen CLI (опционально, если не в PATH)
QWEN_PATH=/path/to/qwen

# Python для MCP сервера (опционально, по умолчанию sys.executable)
MCP_PYTHON=/usr/bin/python3

🚀 Запуск

Режим разработки

1. Запуск backend

python server.py

2. Запуск frontend (в отдельном терминале)

cd static
npm run dev

Приложение доступно по адресу: http://localhost:5173

Продакшен режим

Сборка frontend

cd static
npm install
npm run build

Запуск сервера

python server.py

Сервер запускает FastAPI с встроенным static files serving. Приложение доступно по адресу http://localhost:10310

📁 Структура проекта

qwen-code-web-unofficial_prod/
├── server.py                 # Основной сервер (FastAPI + WebSocket + Qwen CLI)
├── mcp_tools_server.py       # MCP сервер для инструментов (bash, ssh, files)
├── system_prompt.py          # Системный промпт для Qwen Agent
├── requirements.txt          # Python зависимости
├── .env                      # Переменные окружения (не отслеживается git)
│
├── static/                   # Frontend приложение
│   ├── index.html            # HTML шаблон
│   ├── package.json          # Node зависимости
│   ├── vite.config.ts        # Конфигурация Vite
│   ├── tsconfig.json         # Конфигурация TypeScript
│   └── src/
│       ├── main.tsx          # Точка входа React
│       ├── App.tsx           # Главный компонент приложения
│       ├── api.ts            # API функции (REST + WebSocket)
│       ├── types.ts          # TypeScript типы
│       ├── index.css         # Глобальные стили
│       ├── components/       # React компоненты
│       │   ├── Sidebar.tsx           # Боковая панель с сессиями
│       │   ├── ChatHeader.tsx        # Шапка чата
│       │   ├── ChatInput.tsx         # Поле ввода сообщений
│       │   ├── MessageBubble.tsx     # Компонент сообщения
│       │   ├── StatusBar.tsx         # Статусная строка
│       │   ├── ConfirmBar.tsx        # Панель подтверждения команд
│       │   ├── SettingsModal.tsx     # Модальное окно настроек
│       │   ├── EmptyState.tsx        # Пустое состояние
│       │   ├── ThinkingBlock.tsx     # Блок thinking процесса
│       │   └── ToolBlock.tsx         # Блок выполнения инструмента
│       └── utils/
│           ├── cn.ts         # Утилита для CSS классов
│           └── markdown.ts   # Парсинг markdown
│
└── sessions.db               # База данных SQLite (создаётся автоматически)

🔧 Конфигурация

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

ПеременнаяОписаниеПо умолчанию
QWEN_PATHПуть к qwen CLIИщет в PATH через which
MCP_PYTHONPython интерпретатор для MCP сервераsys.executable

Rate Limiting

Настроен через SlowAPI. Конфигурация по умолчанию ограничивает количество запросов с одного IP.

Безопасность

  • Размер запросов: лимит 50 MB
  • SSH: требуется настроенный SSH ключ (~/.ssh/id_ed25519)
  • File operations: запись разрешена только в безопасные директории:

- Текущая директория проекта - ~/projects - ~/workspace - /tmp

  • Process isolation: использование process groups для корректного завершения процессов

📊 База данных

Таблица sessions

КолонкаТипОписание
idTEXTUUID сессии (PRIMARY KEY)
user_idTEXTID пользователя (опционально)
titleTEXTНазвание чата
created_atTEXTДата создания (ISO 8601)
updated_atTEXTДата обновления (ISO 8601)
system_promptTEXTКастомный системный промпт (опционально)

Таблица messages

КолонкаТипОписание
idINTEGERAUTOINCREMENT PRIMARY KEY
session_idTEXTFK → sessions.id
roleTEXTuser/assistant/assistant_tool_call/tool
contentTEXTСодержание сообщения
thinkingTEXTThinking блок (опционально)
tool_callsTEXTJSON с вызовами инструментов
tool_nameTEXTНазвание инструмента
created_atTEXTДата создания (ISO 8601)

Таблица memory

КолонкаТипОписание
idINTEGERAUTOINCREMENT PRIMARY KEY
session_idTEXTFK → sessions.id
keyTEXTКлюч факта
valueTEXTЗначение факта
created_atTEXTДата создания (ISO 8601)

🔄 WebSocket протокол

Подключение

ws://host/ws/{session_id}

Клиент → Сервер

Тип сообщенияОписаниеПоля
messageОтправка сообщенияcontent: string
stopОстановка генерации
confirm_responseОтвет на подтверждение`action: "allow" \"deny" \"allow_all"`
set_allow_allВключить/выключить авто-подтверждениеvalue: boolean

Сервер → Клиент

Тип сообщенияОписаниеПоля
response_startНачало ответа
stream_startНачало стриминга
thinkingThinking контентcontent: string
contentОсновной контентcontent: string
tool_callВызов инструментаname: string, args: object
tool_resultРезультат инструментаname: string, content: string
confirm_requestЗапрос подтвержденияname: string, args: object
tool_deniedИнструмент запрещёнname: string
response_endОтвет завершён
stoppedГенерация остановлена
errorОшибка
session_renamedСессия переименованаid: string, title: string
allow_all_enabledАвто-подтверждение включено
allow_all_changedИзменение авто-подтвержденияvalue: boolean
pingPing для поддержания соединения

🎨 Фронтенд компоненты

App.tsx

Главный компонент приложения. Управляет:

  • Состоянием сессий и сообщений
  • WebSocket подключением
  • Обработкой стриминга
  • Подтверждением команд

Sidebar.tsx

Боковая панель со списком сессий. Позволяет:

  • Переключаться между сессиями
  • Создавать новые сессии
  • Удалять сессии

MessageBubble.tsx

Компонент отображения сообщения. Поддерживает:

  • Пользовательские сообщения
  • Ассистент сообщения с thinking
  • Tool call/results блоки
  • Markdown рендеринг

ConfirmBar.tsx

Панель подтверждения опасных команд. Показывает:

  • Название инструмента
  • Аргументы команды
  • Кнопки allow/deny/allow_all

StatusBar.tsx

Статусная строка показывает:

  • Текущую фазу (waiting/thinking/generating/tool)
  • Статус WebSocket подключения
  • Переключатель allow_all

🔐 Безопасность

Опасные инструменты требуют подтверждения

  • run_bash_command
  • run_ssh_command
  • write_file
  • edit_file

Таймауты

  • Создание MCP сессии: 30 секунд
  • MCP tool вызов: 180 секунд
  • Bash команда: 120 секунд
  • SSH команда: 120 секунд
  • Ожидание подтверждения: 300 секунд

Rate Limiting

  • Настроен через SlowAPI
  • Ограничение запросов с одного IP

Валидация путей

  • Предотвращение path traversal attacks
  • Разрешена запись только в безопасные директории

🧪 Разработка

Добавление нового MCP инструмента

  1. Добавьте функцию в mcp_tools_server.py:
@mcp.tool()
def my_new_tool(param1: str) -> str:
    """Описание инструмента для модели."""
    # Реализация
    return result
  1. Если требует подтверждения, добавьте в server.py:
TOOLS_REQUIRING_CONFIRMATION = {
    ...,
    "my_new_tool"
}

Кастомизация системного промпта

Отредактируйте system_prompt.py или используйте кастомный промпт для каждой сессии через SettingsModal.

🐛 Troubleshooting

Qwen CLI не найден

# Установите qwen или укажите путь в .env
export QWEN_PATH=/path/to/qwen

MCP сервер не запускается

# Проверьте зависимости
pip install -r requirements.txt

# Проверьте логи
cat server.log

WebSocket не подключается

  • Убедитесь что сервер запущен
  • Проверьте CORS настройки в server.py
  • Откройте DevTools консоль для ошибок

База данных заблокирована

# Удалите файл блокировки (если нет активных запросов)
rm sessions.db-wal
rm sessions.db-shm

📝 Планы развития

  • [ ] Мультипользовательский режим с авторизацией
  • [ ] Экспорт/импорт сессий (JSON, Markdown)
  • [ ] Голосовой ввод
  • [ ] Поддержка нескольких моделей
  • [ ] Горячие клавиши
  • [ ] Темная/светлая тема
  • [ ] Мобильная адаптация
  • [ ] PWA поддержка

📄 Лицензия

Некоммерческий проект для обучения и экспериментов с AI.

🤝 Контрибьюция

  1. Fork репозиторий
  2. Создайте ветку (git checkout -b feature/amazing-feature)
  3. Commit изменения (git commit -m 'Add amazing feature')
  4. Push в ветку (git push origin feature/amazing-feature)
  5. Откройте Pull Request

📞 Поддержка

При возникновении проблем открывайте Issue в репозитории с:

  • Описанием проблемы
  • Шагами воспроизведения
  • Логами из server.log
  • Версией Python и Node.js

目录标签

目录标签

会话管理TypeScriptAI代理AI助手本地部署Web界面实时响应工具调用长期记忆

接入字段

传输方式(transport,传输协议)

stdio

鉴权方式(authType,认证方式)

none

工具数量(toolCount,工具数)

14

资源数量(resourceCount,资源数)

0

提示词数量(promptCount,提示词数)

0

权限和风险

stdionone部署方式未说明

接入前请确认传输方式、认证方式和部署位置,并根据实际工具能力限制访问范围。

安装前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

来源信息

继续浏览同类 MCP