Files

103 lines
3.3 KiB
Python

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()