56 lines
1.8 KiB
Python
56 lines
1.8 KiB
Python
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() |