override fun handle()

in src/main/kotlin/org/jetbrains/mcpserverplugin/general/textTools.kt [213:252]


    override fun handle(project: Project, args: ReplaceSpecificTextArgs): Response {
        val projectDir = project.guessProjectDir()?.toNioPathOrNull()
            ?: return Response(error = "project dir not found")

        var document: Document? = null
        
        val readResult = runReadAction {
            val file: VirtualFile = LocalFileSystem.getInstance()
                .refreshAndFindFileByNioFile(projectDir.resolveRel(args.pathInProject))
                ?: return@runReadAction "file not found"

            if (!GlobalSearchScope.allScope(project).contains(file)) {
                return@runReadAction "file not found"
            }

            document = FileDocumentManager.getInstance().getDocument(file)
            if (document == null) {
                return@runReadAction "could not get document"
            }

            return@runReadAction "ok"
        }

        if (readResult != "ok") {
            return Response(error = readResult)
        }

        val text = document!!.text
        if (!text.contains(args.oldText)) {
            return Response(error = "no occurrences found")
        }

        val newText = text.replace(args.oldText, args.newText, true)
        WriteCommandAction.runWriteCommandAction(project) {
            document!!.setText(newText)
            FileDocumentManager.getInstance().saveDocument(document!!)
        }

        return Response("ok")
    }