MCP‑сервер для управления памятью агента: README.md

This commit is contained in:
2026-05-27 07:38:19 +00:00
parent 8b61d2cf02
commit 574f84986c
@@ -5,38 +5,38 @@
MCP (Memory Control Protocol) это протокол, позволяющий удалённо управлять памятью агентов в распределённых системах. MCP (Memory Control Protocol) это протокол, позволяющий удалённо управлять памятью агентов в распределённых системах.
Данный репозиторий содержит реализацию **MCP‑сервера**, который: Данный репозиторий содержит реализацию **MCP‑сервера**, который:
- принимает команды от клиентов через TCP; - принимает команды от клиентов по TCP/IP;
- хранит и обновляет состояние памяти агента (ключ‑значение); - обрабатывает запросы на чтение/запись памяти агента;
- обеспечивает простую API для чтения, записи и удаления данных. - поддерживает простую аутентификацию и логирование.
Сервер написан на Python 3.8+ и использует стандартную библиотеку `socket` + `threading`. Сервер написан на Python 3.8+ и использует асинхронную библиотеку `asyncio` для одновременной обработки множества соединений.
Он может быть запущен как самостоятельный процесс или интегрирован в более крупные проекты.
## Структура проекта ## Структура проекта
``` ```
mcp_server/ mcp_server/
├── mcp_server.py # Основной сервер ├── mcp_server.py # Основной серверный скрипт
├── client_example.py # Пример клиента (показывает, как взаимодействовать) ├── client_example.py # Пример клиента, демонстрирующий работу с сервером
├── requirements.txt # Пакеты (если понадобится) ├── requirements.txt # Список зависимостей
└── README.md # Это файл └── README.md # Это файл
``` ```
## Установка зависимостей ## Установка зависимостей
> **Важно**: проект использует только стандартную библиотеку Python.
> Если вы хотите использовать виртуальное окружение:
```bash ```bash
# Создайте виртуальное окружение (рекомендуется)
python -m venv .venv python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txt # На данный момент файл пустой, но оставлен для совместимости
# Установите зависимости
pip install -r requirements.txt
``` ```
`requirements.txt` содержит только стандартные библиотеки, но в случае необходимости можно добавить сторонние пакеты.
## Запуск сервера ## Запуск сервера
```bash ```bash
# В корне проекта
python mcp_server.py --host 0.0.0.0 --port 9000 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` | | `--host` | IP‑адрес, на котором сервер будет слушать подключения | `127.0.0.1` |
| `--port` | TCP‑порт для подключения клиентов | `9000` | | `--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 python client_example.py --host 127.0.0.1 --port 9000
``` ```
Пример клиентского кода (`client_example.py`) демонстрирует: Клиент демонстрирует:
1. Подключение к серверу. 1. Подключение к серверу;
2. Отправку команды `SET key value`. 2. Отправку команды `SET key value`;
3. Чтение значения через команду `GET key`. 3. Чтение значения через команду `GET key`;
4. Удаление ключа с помощью `DEL key`. 4. Вывод результата в консоль.
## Пример использования
```python ```python
# client_example.py (упрощённый фрагмент) # client_example.py
import socket import asyncio
import argparse
def send_command(sock, cmd): async def main(host, port):
sock.sendall((cmd + '\n').encode()) reader, writer = await asyncio.open_connection(host, port)
return sock.recv(4096).decode().strip()
with socket.create_connection(('127.0.0.1', 9000)) as s: # Установим значение
print(send_command(s, 'SET foo bar')) # -> OK writer.write(b"SET counter 42\n")
print(send_command(s, 'GET foo')) # -> bar await writer.drain()
print(send_command(s, 'DEL foo')) # -> DELETED 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 ```bash
python -m unittest discover tests pytest tests/
``` ```
> **Замечание**: в текущей версии тесты отсутствуют, но структура готова к их добавлению.
## Лицензия ## Лицензия
MIT License смотрите файл `LICENSE`. MIT License см. файл `LICENSE`.
--- ---