From b3f5953d82bd7f782119759317db6697c98f264e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9C=D0=B0=D1=80=D0=B8=D1=8F=20=D0=91=D0=B5=D1=80=D0=B4?= =?UTF-8?q?=D0=BD=D0=B8=D0=BA=D0=BE=D0=B2=D0=B0?= Date: Wed, 27 May 2026 09:58:25 +0000 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20solutions/69f8e929da860fb4533faa2a=5FMCP-=D1=81=D0=B5?= =?UTF-8?q?=D1=80=D0=B2=D0=B5=D1=80=5F=D0=B4=D0=BB=D1=8F=5F=D1=83=D0=BF?= =?UTF-8?q?=D1=80=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F=5F=D0=BF=D0=B0?= =?UTF-8?q?=D0=BC=D1=8F=D1=82=D1=8C=D1=8E=5F=D0=B0=D0=B3=D0=B5=D0=BD=D1=82?= =?UTF-8?q?=D0=B0/memory=5Fserver.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../memory_server.py | 46 ++++++++----------- 1 file changed, 20 insertions(+), 26 deletions(-) diff --git a/solutions/69f8e929da860fb4533faa2a_MCP-сервер_для_управления_памятью_агента/memory_server.py b/solutions/69f8e929da860fb4533faa2a_MCP-сервер_для_управления_памятью_агента/memory_server.py index aa08356..872e852 100644 --- a/solutions/69f8e929da860fb4533faa2a_MCP-сервер_для_управления_памятью_агента/memory_server.py +++ b/solutions/69f8e929da860fb4533faa2a_MCP-сервер_для_управления_памятью_агента/memory_server.py @@ -1,23 +1,28 @@ import asyncio -from fastmcp import MCPServer, Tool -from typing import Dict, Any +from fastmcp import FastMCP +from typing import Any # Внутреннее хранилище памяти -memory_store: Dict[str, Any] = {} -namespace_store: Dict[str, Dict[str, Any]] = {} +memory_store: dict[str, Any] = {} +namespace_store: dict[str, dict[str, Any]] = {} + +mcp = FastMCP("memory_server") -def save(key: str, value: Any) -> str: +@mcp.tool() +def save(key: str, value: str) -> str: """Сохраняет значение по ключу.""" memory_store[key] = value return f"Значение сохранено под ключом '{key}'." -def get(key: str) -> Any: - """Возвращает значение по ключу. Если ключ не найден, возвращается None.""" +@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: @@ -26,37 +31,26 @@ def delete(key: str) -> str: return f"Ключ '{key}' не найден." -def list_keys() -> Dict[str, Any]: +@mcp.tool() +def list_keys() -> dict[str, list[str]]: """Возвращает список всех сохранённых ключей.""" return {"keys": list(memory_store.keys())} -def save_with_namespace(namespace: str, key: str, value: Any) -> str: +@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}'." -def get_by_namespace(namespace: str, key: str) -> Any: + +@mcp.tool() +def get_by_namespace(namespace: str, key: str) -> str | None: """Получает значение из указанного пространства имён.""" ns = namespace_store.get(namespace, {}) return ns.get(key) -# Создаём сервер MCP -server = MCPServer( - name="memory_server", - description="Сервер для управления памятью агента.", -) - -# Регистрируем инструменты -server.register_tool(Tool(name="save", func=save)) -server.register_tool(Tool(name="get", func=get)) -server.register_tool(Tool(name="delete", func=delete)) -server.register_tool(Tool(name="list_keys", func=list_keys)) -server.register_tool(Tool(name="save_with_namespace", func=save_with_namespace)) -server.register_tool(Tool(name="get_by_namespace", func=get_by_namespace)) - if __name__ == "__main__": - # Запускаем сервер - asyncio.run(server.serve()) \ No newline at end of file + mcp.run() \ No newline at end of file