"use client" import { useEffect, useState } from "react" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import type { McpApi } from "@/shared/api/mcp" export function DatabaseRestore({ api }: { api: McpApi }) { const [connections, setConnections] = useState<{ id: string; name: string }[]>([]) const [connectionId, setConnectionId] = useState("") const [file, setFile] = useState(null) const [archive, setArchive] = useState> | null>(null) const [operationId, setOperationId] = useState("") const [result, setResult] = useState(null) const [busy, setBusy] = useState(false) const [error, setError] = useState("") useEffect(() => { const abort = new AbortController() void api.connections(abort.signal).then(data => setConnections(data.connections.filter(item => item.policy.scope.allowGlobal && item.policy.scope.operationIds.includes("database.restore"))), failure => { if (!abort.signal.aborted) setError(String(failure)) }) return () => abort.abort() }, [api]) const run = async (work: () => Promise) => { setBusy(true); setError("") try { setResult(await work()) } catch (failure) { setError(failure instanceof Error ? failure.message : String(failure)) } finally { setBusy(false) } } return

Восстановление БД через MCP

Архив PostgreSQL загружает администратор. Модель получает ссылку и SHA-256. Выполнение требует отдельного подтверждения в планах. После восстановления прежний MCP-доступ отзывается, а результат хранится во внешней квитанции.

{error &&

{error}

}
{archive &&

SHA-256: {archive.sha256} · Допуск до {new Date(archive.expiresAt).toLocaleString()}

} {result !== null &&
{JSON.stringify(result, null, 2)}
}
}