import argparse import json import sys from pathlib import Path import requests from rich import print from rich.console import Console from rich.table import Table console = Console() def _request(method: str, url: str, **kwargs): """ Универсальная обёртка над requests для работы с MCP‑сервером. """ try: resp = requests.request(method, url, timeout=10, **kwargs) resp.raise_for_status() except requests.RequestException as exc: console.print(f"[red]Ошибка запроса: {exc}[/red]") sys.exit(1) try: return resp.json() except ValueError: console.print("[red]Ответ не в формате JSON[/red]") sys.exit(1) def add_memory(server: str, key: str, value: str): """ Добавить запись в память агента. """ url = f"{server}/memory" payload = {"key": key, "value": value} result = _request("POST", url, json=payload) console.print(f"[green]Запись добавлена: {result}[/green]") def get_memory(server: str, key: str): """ Получить значение по ключу. """ url = f"{server}/memory/{key}" result = _request("GET", url) console.print(f"[cyan]Получено: {result}[/cyan]") def delete_memory(server: str, key: str): """ Удалить запись из памяти. """ url = f"{server}/memory/{key}" result = _request("DELETE", url) console.print(f"[yellow]Удалено: {result}[/yellow]") def list_memory(server: str): """ Вывести таблицу всех записей в памяти. """ url = f"{server}/memory" result = _request("GET", url) table = Table(title="Память агента") table.add_column("Ключ", style="magenta") table.add_column("Значение", style="green") for item in result.get("items", []): table.add_row(item.get("key", ""), item.get("value", "")) console.print(table) def main(): parser = argparse.ArgumentParser(description="Клиент MCP‑сервера для управления памятью агента.") parser.add_argument("--server", default="http://localhost:8000", help="URL сервера MCP (по умолчанию http://localhost:8000)") sub = parser.add_subparsers(dest="command", required=True) add = sub.add_parser("add", help="Добавить запись") add.add_argument("key", help="Ключ записи") add.add_argument("value", help="Значение записи") get = sub.add_parser("get", help="Получить запись") get.add_argument("key", help="Ключ записи") delete = sub.add_parser("delete", help="Удалить запись") delete.add_argument("key", help="Ключ записи") list_ = sub.add_parser("list", help="Список всех записей") args = parser.parse_args() if args.command == "add": add_memory(args.server, args.key, args.value) elif args.command == "get": get_memory(args.server, args.key) elif args.command == "delete": delete_memory(args.server, args.key) elif args.command == "list": list_memory(args.server) if __name__ == "__main__": main()