diff --git a/memory_client.py b/memory_client.py index 48de9e1..560d4aa 100644 --- a/memory_client.py +++ b/memory_client.py @@ -1,3 +1,58 @@ -fastmcp==0.1.5 # библиотека для MCP‑серверов и клиентов -pydantic==2.7.4 # валидация данных (не используется напрямую, но указана) -python-dotenv==1.0.1 # загрузка переменных окружения \ No newline at end of file +# memory_client.py +""" +Асинхронный клиент для тестирования работы MCP-сервера памяти. +Использует FastMCP Client и демонстрирует вызовы инструментов: +- save_with_namespace +- get_by_namespace +- list_keys +""" + +from fastmcp import Client +import asyncio + +async def main() -> None: + """ + Основная точка входа: создаём клиент, подключаемся к серверу, + вызываем инструменты и выводим результаты. + """ + # Создаём клиента, указывая путь к исполняемому файлу сервера + client = Client("python memory_server.py") + + # Подключаемся к серверу (асинхронно) + await client.connect() + + try: + # Сохраняем данные в namespace 'default' + result = await client.call_tool( + "save_with_namespace", + {"key": "username", "value": "Алексей", "namespace": "default"} + ) + print(f"Сохранено: {result}") + + # Получаем все записи из namespace 'default' + result = await client.call_tool( + "get_by_namespace", + {"namespace": "default"} + ) + print("Данные namespace 'default':") + for item in result: + # В ответе ключ хранится как 'namespace:key', но в JSON + # сохраняется только значение и timestamp, поэтому выводим + # только полезную часть. + key = item.get("key", "") + value = item.get("value", "") + print(f" {key}: {value}") + + # Получаем список ключей с подстрокой 'name' + keys = await client.call_tool( + "list_keys", + {"pattern": "*name"} + ) + print(f"Ключи с 'name': {keys}") + + finally: + # Закрываем соединение + await client.close() + +if __name__ == "__main__": + asyncio.run(main()) \ No newline at end of file