import asyncio from fastmcp import FastMCP from typing import Any # Внутреннее хранилище памяти memory_store: dict[str, Any] = {} namespace_store: dict[str, dict[str, Any]] = {} mcp = FastMCP("memory_server") @mcp.tool() def save(key: str, value: str) -> str: """Сохраняет значение по ключу.""" memory_store[key] = value return f"Значение сохранено под ключом '{key}'." @mcp.tool() def get(key: str) -> str | None: """Возвращает значение по ключу. Если ключ не найден, возвращает None.""" return memory_store.get(key) @mcp.tool() def delete(key: str) -> str: """Удаляет значение по ключу.""" if key in memory_store: del memory_store[key] return f"Ключ '{key}' удалён." return f"Ключ '{key}' не найден." @mcp.tool() def list_keys() -> dict[str, list[str]]: """Возвращает список всех сохранённых ключей.""" return {"keys": list(memory_store.keys())} @mcp.tool() def save_with_namespace(namespace: str, key: str, value: str) -> str: """Сохраняет значение в указанном пространстве имён.""" ns = namespace_store.setdefault(namespace, {}) ns[key] = value return f"Значение сохранено под ключом '{key}' в пространстве имён '{namespace}'." @mcp.tool() def get_by_namespace(namespace: str, key: str) -> str | None: """Получает значение из указанного пространства имён.""" ns = namespace_store.get(namespace, {}) return ns.get(key) if __name__ == "__main__": mcp.run()