diff --git a/ memory_server.py b/ memory_server.py new file mode 100644 index 0000000..872e852 --- /dev/null +++ b/ memory_server.py @@ -0,0 +1,56 @@ +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() \ No newline at end of file