diff --git a/plugins/markdown/core/backend/resources/intellij.markdown.backend.xml b/plugins/markdown/core/backend/resources/intellij.markdown.backend.xml
index 084ed35c13f4..960c80349259 100644
--- a/plugins/markdown/core/backend/resources/intellij.markdown.backend.xml
+++ b/plugins/markdown/core/backend/resources/intellij.markdown.backend.xml
@@ -6,5 +6,7 @@
+
\ No newline at end of file
diff --git a/plugins/markdown/core/backend/src/org/intellij/plugins/markdown/backend/providers/ProjectStructureProvider.kt b/plugins/markdown/core/backend/src/org/intellij/plugins/markdown/backend/providers/ProjectStructureProvider.kt
new file mode 100644
index 000000000000..9d330056ca8b
--- /dev/null
+++ b/plugins/markdown/core/backend/src/org/intellij/plugins/markdown/backend/providers/ProjectStructureProvider.kt
@@ -0,0 +1,14 @@
+package org.intellij.plugins.markdown.backend.providers
+
+import com.intellij.platform.rpc.backend.RemoteApiProvider
+import fleet.rpc.remoteApiDescriptor
+import org.intellij.plugins.markdown.backend.services.ProjectStructureRemoteApiImpl
+import org.intellij.plugins.markdown.service.ProjectStructureRemoteApi
+
+private class ProjectStructureProvider : RemoteApiProvider {
+ override fun RemoteApiProvider.Sink.remoteApis() {
+ remoteApi(remoteApiDescriptor()) {
+ ProjectStructureRemoteApiImpl()
+ }
+ }
+}
\ No newline at end of file
diff --git a/plugins/markdown/core/backend/src/org/intellij/plugins/markdown/backend/services/ProjectStructureRemoteApiImpl.kt b/plugins/markdown/core/backend/src/org/intellij/plugins/markdown/backend/services/ProjectStructureRemoteApiImpl.kt
new file mode 100644
index 000000000000..2147918b6d63
--- /dev/null
+++ b/plugins/markdown/core/backend/src/org/intellij/plugins/markdown/backend/services/ProjectStructureRemoteApiImpl.kt
@@ -0,0 +1,38 @@
+package org.intellij.plugins.markdown.backend.services
+
+import com.intellij.ide.vfs.VirtualFileId
+import com.intellij.ide.vfs.rpcId
+import com.intellij.ide.vfs.virtualFile
+import com.intellij.openapi.diagnostic.Logger
+import com.intellij.openapi.project.BaseProjectDirectories
+import com.intellij.openapi.vfs.VfsUtil
+import com.intellij.openapi.vfs.VirtualFile
+import com.intellij.platform.project.ProjectId
+import com.intellij.platform.project.findProject
+import org.intellij.plugins.markdown.service.ProjectStructureRemoteApi
+import java.io.File
+import java.net.URL
+
+class ProjectStructureRemoteApiImpl : ProjectStructureRemoteApi {
+ private fun getBaseDirectory(projectId: ProjectId, virtualFileId: VirtualFileId) : VirtualFile?{
+ val project = projectId.findProject()
+ val virtualFile = virtualFileId.virtualFile() ?: return null
+ val baseDirectory = BaseProjectDirectories.getInstance(project).getBaseDirectoryFor(virtualFile)
+ return baseDirectory
+ }
+
+ override suspend fun getFileByResourceName(resourceName: String, virtualFileId: VirtualFileId?, projectId: ProjectId?): VirtualFileId? {
+ if (projectId == null || virtualFileId == null) return null
+ val projectRoot = getBaseDirectory(projectId, virtualFileId)
+ val resource = if (resourceName.startsWith("file:/")) {
+ VfsUtil.findFileByIoFile(File(URL(resourceName).path), true)
+ } else {
+ projectRoot?.findFileByRelativePath(resourceName)
+ } ?: return null
+ return resource.rpcId()
+ }
+
+ companion object {
+ private val logger: Logger = Logger.getInstance(ProjectStructureRemoteApiImpl::class.java)
+ }
+}
\ No newline at end of file
diff --git a/plugins/markdown/core/resources/META-INF/plugin.xml b/plugins/markdown/core/resources/META-INF/plugin.xml
index 376dcec1855d..395de9aa3672 100644
--- a/plugins/markdown/core/resources/META-INF/plugin.xml
+++ b/plugins/markdown/core/resources/META-INF/plugin.xml
@@ -398,6 +398,7 @@
+
{
+ suspend fun getFileByResourceName(resourceName: String, virtualFileId: VirtualFileId?, projectId: ProjectId?): VirtualFileId?
+
+ companion object {
+ @JvmStatic
+ suspend fun getInstance(): ProjectStructureRemoteApi {
+ return RemoteApiProviderService.resolve(remoteApiDescriptor())
+ }
+ }
+}
\ No newline at end of file