diff --git a/solutions/69f8e929da860fb4533faa2a_MCP_сервер_для_управления_памятью_агента/README.md b/solutions/69f8e929da860fb4533faa2a_MCP_сервер_для_управления_памятью_агента/README.md index 05ee421..f8109c6 100644 --- a/solutions/69f8e929da860fb4533faa2a_MCP_сервер_для_управления_памятью_агента/README.md +++ b/solutions/69f8e929da860fb4533faa2a_MCP_сервер_для_управления_памятью_агента/README.md @@ -5,38 +5,38 @@ MCP (Memory Control Protocol) – это протокол, позволяющий удалённо управлять памятью агентов в распределённых системах. Данный репозиторий содержит реализацию **MCP‑сервера**, который: -- принимает команды от клиентов через TCP; -- хранит и обновляет состояние памяти агента (ключ‑значение); -- обеспечивает простую API для чтения, записи и удаления данных. +- принимает команды от клиентов по TCP/IP; +- обрабатывает запросы на чтение/запись памяти агента; +- поддерживает простую аутентификацию и логирование. -Сервер написан на Python 3.8+ и использует стандартную библиотеку `socket` + `threading`. -Он может быть запущен как самостоятельный процесс или интегрирован в более крупные проекты. +Сервер написан на Python 3.8+ и использует асинхронную библиотеку `asyncio` для одновременной обработки множества соединений. ## Структура проекта ``` mcp_server/ -├── mcp_server.py # Основной сервер -├── client_example.py # Пример клиента (показывает, как взаимодействовать) -├── requirements.txt # Пакеты (если понадобится) +├── mcp_server.py # Основной серверный скрипт +├── client_example.py # Пример клиента, демонстрирующий работу с сервером +├── requirements.txt # Список зависимостей └── README.md # Это файл ``` ## Установка зависимостей -> **Важно**: проект использует только стандартную библиотеку Python. -> Если вы хотите использовать виртуальное окружение: - ```bash +# Создайте виртуальное окружение (рекомендуется) python -m venv .venv source .venv/bin/activate # Windows: .venv\Scripts\activate -pip install -r requirements.txt # На данный момент файл пустой, но оставлен для совместимости + +# Установите зависимости +pip install -r requirements.txt ``` +`requirements.txt` содержит только стандартные библиотеки, но в случае необходимости можно добавить сторонние пакеты. + ## Запуск сервера ```bash -# В корне проекта python mcp_server.py --host 0.0.0.0 --port 9000 ``` @@ -44,8 +44,8 @@ python mcp_server.py --host 0.0.0.0 --port 9000 | Параметр | Описание | По умолчанию | |----------|----------|--------------| -| `--host` | IP‑адрес, на котором сервер будет слушать запросы | `127.0.0.1` | -| `--port` | TCP‑порт для подключения клиентов | `9000` | +| `--host` | IP‑адрес, на котором сервер будет слушать подключения | `127.0.0.1` | +| `--port` | TCP‑порт для входящих соединений | `9000` | Сервер выводит в консоль информацию о подключениях и выполненных командах. @@ -55,64 +55,55 @@ python mcp_server.py --host 0.0.0.0 --port 9000 python client_example.py --host 127.0.0.1 --port 9000 ``` -Пример клиентского кода (`client_example.py`) демонстрирует: +Клиент демонстрирует: -1. Подключение к серверу. -2. Отправку команды `SET key value`. -3. Чтение значения через команду `GET key`. -4. Удаление ключа с помощью `DEL key`. +1. Подключение к серверу; +2. Отправку команды `SET key value`; +3. Чтение значения через команду `GET key`; +4. Вывод результата в консоль. + +## Пример использования ```python -# client_example.py (упрощённый фрагмент) -import socket +# client_example.py +import asyncio +import argparse -def send_command(sock, cmd): - sock.sendall((cmd + '\n').encode()) - return sock.recv(4096).decode().strip() +async def main(host, port): + reader, writer = await asyncio.open_connection(host, port) -with socket.create_connection(('127.0.0.1', 9000)) as s: - print(send_command(s, 'SET foo bar')) # -> OK - print(send_command(s, 'GET foo')) # -> bar - print(send_command(s, 'DEL foo')) # -> DELETED + # Установим значение + writer.write(b"SET counter 42\n") + await writer.drain() + print(await reader.readline()) # OK + + # Получим значение + writer.write(b"GET counter\n") + await writer.drain() + print(await reader.readline()) # 42 + + writer.close() + await writer.wait_closed() + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description="MCP client example") + parser.add_argument("--host", default="127.0.0.1") + parser.add_argument("--port", type=int, default=9000) + args = parser.parse_args() + asyncio.run(main(args.host, args.port)) ``` -## Пример использования в реальном проекте +## Тесты -```python -# Внутри вашего приложения -import socket - -class MCPClient: - def __init__(self, host='127.0.0.1', port=9000): - self.sock = socket.create_connection((host, port)) - - def set(self, key, value): - return self._send(f'SET {key} {value}') - - def get(self, key): - return self._send(f'GET {key}') - - def delete(self, key): - return self._send(f'DEL {key}') - - def _send(self, cmd): - self.sock.sendall((cmd + '\n').encode()) - return self.sock.recv(4096).decode().strip() -``` - -## Тестирование - -Для запуска простого набора тестов (если они добавлены) используйте: +Для запуска тестов (если они добавлены) используйте: ```bash -python -m unittest discover tests +pytest tests/ ``` -> **Замечание**: в текущей версии тесты отсутствуют, но структура готова к их добавлению. - ## Лицензия -MIT License – смотрите файл `LICENSE`. +MIT License – см. файл `LICENSE`. ---