MCP‑сервер для управления памятью агента
Описание проекта
MCP (Memory Control Protocol) – это протокол, позволяющий удалённо управлять памятью агентов в распределённых системах.
Данный репозиторий содержит реализацию MCP‑сервера, который:
- принимает команды от клиентов по TCP/IP;
- обрабатывает запросы на чтение/запись памяти агента;
- поддерживает простую аутентификацию и логирование.
Сервер написан на Python 3.8+ и использует асинхронную библиотеку asyncio для одновременной обработки множества соединений.
Структура проекта
mcp_server/
├── mcp_server.py # Основной серверный скрипт
├── client_example.py # Пример клиента, демонстрирующий работу с сервером
├── requirements.txt # Список зависимостей
└── README.md # Это файл
Установка зависимостей
# Создайте виртуальное окружение (рекомендуется)
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
# Установите зависимости
pip install -r requirements.txt
requirements.txt содержит только стандартные библиотеки, но в случае необходимости можно добавить сторонние пакеты.
Запуск сервера
python mcp_server.py --host 0.0.0.0 --port 9000
Параметры:
| Параметр | Описание | По умолчанию |
|---|---|---|
--host |
IP‑адрес, на котором сервер будет слушать подключения | 127.0.0.1 |
--port |
TCP‑порт для входящих соединений | 9000 |
Сервер выводит в консоль информацию о подключениях и выполненных командах.
Запуск примера клиента
python client_example.py --host 127.0.0.1 --port 9000
Клиент демонстрирует:
- Подключение к серверу;
- Отправку команды
SET key value; - Чтение значения через команду
GET key; - Вывод результата в консоль.
Пример использования
# client_example.py
import asyncio
import argparse
async def main(host, port):
reader, writer = await asyncio.open_connection(host, port)
# Установим значение
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))
Тесты
Для запуска тестов (если они добавлены) используйте:
pytest tests/
Лицензия
MIT License – см. файл LICENSE.
Если возникнут вопросы или предложения по улучшению – открывайте issue!