diff --git a/markdown-to-html/src/McpSamples.MarkdownToHtml.HybridApp/McpSamples.MarkdownToHtml.HybridApp.csproj b/markdown-to-html/src/McpSamples.MarkdownToHtml.HybridApp/McpSamples.MarkdownToHtml.HybridApp.csproj
index 70d94966..3b05b1b9 100644
--- a/markdown-to-html/src/McpSamples.MarkdownToHtml.HybridApp/McpSamples.MarkdownToHtml.HybridApp.csproj
+++ b/markdown-to-html/src/McpSamples.MarkdownToHtml.HybridApp/McpSamples.MarkdownToHtml.HybridApp.csproj
@@ -15,6 +15,7 @@
+
diff --git a/markdown-to-html/src/McpSamples.MarkdownToHtml.HybridApp/Tools/HtmlToMarkdownTool.cs b/markdown-to-html/src/McpSamples.MarkdownToHtml.HybridApp/Tools/HtmlToMarkdownTool.cs
new file mode 100644
index 00000000..39443940
--- /dev/null
+++ b/markdown-to-html/src/McpSamples.MarkdownToHtml.HybridApp/Tools/HtmlToMarkdownTool.cs
@@ -0,0 +1,47 @@
+using System.ComponentModel;
+using ReverseMarkdown;
+
+using ModelContextProtocol.Server;
+
+namespace McpSamples.MarkdownToHtml.HybridApp.Tools;
+
+///
+/// This provides interfaces for the HTML to markdown tool.
+///
+public interface IHtmlToMarkdownTool
+{
+ ///
+ /// Converts HTML text to markdown.
+ ///
+ ///
+ ///
+ Task ConvertAsync(string html);
+}
+
+///
+/// This represents the tool entity for converting HTML to markdown.
+///
+///
+[McpServerToolType]
+public class HtmlToMarkdownTool(ILogger logger) : IHtmlToMarkdownTool
+{
+ [McpServerTool(Name = "convert_html_to_markdown", Title = "Convert HTML to Markdown")]
+ [Description("Converts HTML text to Markdown.")]
+ public async Task ConvertAsync([Description("The HTML text")] string html)
+ {
+ var converter = new Converter();
+ var markdown = default(string);
+
+ try
+ {
+ markdown = converter.Convert(html);
+ }
+ catch (Exception ex)
+ {
+ logger.LogError(ex, "Error converting HTML to Markdown");
+ markdown = $"Error: {ex.Message}";
+ }
+
+ return await Task.FromResult(markdown);
+ }
+}