<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: topaztee</title><link>https://news.ycombinator.com/user?id=topaztee</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Thu, 22 Oct 2026 10:48:53 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=topaztee" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by topaztee in "Launch HN: Vespper (YC F24) – SOTA Docx MCP"]]></title><description><![CDATA[
<p>vespper now supports comments</p>
]]></description><pubDate>Tue, 06 Oct 2026 11:01:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=49976760</link><dc:creator>topaztee</dc:creator><comments>https://news.ycombinator.com/item?id=49976760</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49976760</guid></item><item><title><![CDATA[New comment by topaztee in "Launch HN: Vespper (YC F24) – SOTA Docx MCP"]]></title><description><![CDATA[
<p>We're built for enterprise customers, not personal use.</p>
]]></description><pubDate>Tue, 29 Sep 2026 16:33:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=49896084</link><dc:creator>topaztee</dc:creator><comments>https://news.ycombinator.com/item?id=49896084</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49896084</guid></item><item><title><![CDATA[New comment by topaztee in "Launch HN: Vespper (YC F24) – SOTA Docx MCP"]]></title><description><![CDATA[
<p>sign up for free to try: <a href="https://app.vespper.com/">https://app.vespper.com/</a></p>
]]></description><pubDate>Mon, 28 Sep 2026 17:39:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=49881578</link><dc:creator>topaztee</dc:creator><comments>https://news.ycombinator.com/item?id=49881578</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49881578</guid></item><item><title><![CDATA[Launch HN: Vespper (YC F24) – SOTA Docx MCP]]></title><description><![CDATA[
<p>Hey HN! We're Dudu and Topaz from Vespper (<a href="https://vespper.com">https://vespper.com</a>). Vespper is an MCP that lets AI agents efficiently edit Word documents, powered by our fine-tuned model. It's currently 3× faster, 2× cheaper and more accurate than the closest alternative. Check out an overview of how the product works here: <a href="https://youtu.be/odKxsgPjzzw" rel="nofollow">https://youtu.be/odKxsgPjzzw</a><p>We came to work on this problem after spending a year building an AI document editor for pharma companies. Before that, Topaz(myself) was a senior SWE at Snyk, working on distributed systems, and Dudu was a deep learning engineer at Viz.ai, building computer vision models for stroke detection.
Our editor helped pharma companies generate regulatory documents (e.g. CSRs) to speed up their submissions. Initially, the output was Markdown, displayed in a WYSIWYG editor. However, users preferred working with their own Word templates. That's when the problems began.<p>AI agents aren't great at editing Word documents. A Word document is a zip file of verbose XML files following the OOXML spec. Even "small" changes require backflips, for example: adding a numbered list requires creating an entry in numbering.xml with a fresh ID and linking it back in document.xml, bolding a sentence requires splitting it into 3+ run elements. The list goes on.<p>This makes editing the zip directly (unzip + grep + sed) a bad idea for agents because they burn a lot of time + tokens on these mechanics.
In practice, today's tooling falls into roughly three categories. You can let the agent write code against low-level libraries like python-docx or the Open XML SDK, you can give it an MCP with opinionated editing tools (SuperDoc, Office CLI, Adeu, etc), or you can round-trip the file through Markdown/HTML with something like pandoc/mammoth.js.
None of them really work. The first two categories still burn the agent's context on Word mechanics instead of the task at hand (MCPs also introduce a new DSL to learn), and the third is very lossy (pandoc/mammoth.js/etc don't preserve enough fidelity).<p>From firsthand experience, these problems hurt performance in downstream tasks.<p>When we tried having our agent fill large documents, things broke quickly. The context window was already packed with customer data (files, user context, global rules, etc.), and the agent burned tokens + time on exploring the document and debugging failed edits. Filling a single CSR (clinical study report) took ~50 minutes, and the result was bad (missed fields/sections, broken styling, etc.). Harvey.ai's team reached similar conclusions: <a href="https://www.harvey.ai/blog/building-an-agent-for-complex-document-drafting-and-editing" rel="nofollow">https://www.harvey.ai/blog/building-an-agent-for-complex-doc...</a><p>That's when we shifted our focus. We designed an MCP that lets agents edit Word docs as if they were editing HTML. The agent receives HTML, makes find-and-replace edits, and we reconcile those edits back into the original .docx file.
We picked HTML over Markdown because it's structurally much closer to OOXML and because CSS associates styles with elements roughly the way OOXML does. We had to write our own DOCX→HTML converter, since pandoc and mammoth.js didn't preserve enough fidelity.
To be clear, our DOCX → HTML conversion is lossy too. That's fine though, because we never convert the HTML back to DOCX. The HTML is just a projection for the agent, so it only needs enough fidelity for the agent to understand the structure and styling of what it's editing. The original file stays the source of truth, and we mutate it in place.<p>This also means the agent doesn't need to learn a new DSL. Editing a Word document feels just like editing an HTML file on the file system, something agents are already great at. A lot of DOCX MCPs hand agents dozens or even hundreds of tools to figure out on the fly. Our MCP exposes just three tools (read, search, edit). The Word document is completely abstracted.<p>After an agent sends us an edit request (an "old_html" and "new_html" pair), we reconcile it to the original .docx file. The reconciliation is powered by our fine-tuned model, a 3-8B base with a LoRA adapter. It takes the HTML diff as input along with the original localized OOXML block and emits the new OOXML. The "localization" is done deterministically: we take the anchors the agent specifies and we try to find their XML twins, so the reconciler model has a single responsibility.
On this narrow task a small model reaches the level of a frontier, well prompt-tuned model, while being small and fast enough to sit in the hot path.<p>This project turned into months of work, but we're happy to release our v1. Our internal benchmark shows it's more accurate than the DOCX skill and raw python-docx while being ~2x cheaper and ~3x faster, mostly because it takes 3 tool calls (p50) per task whereas the DOCX skill takes 10 and Office CLI takes 13.<p>Things aren't perfect yet. For example, we don't support manipulating images or comments at the moment. That said, we're already seeing people use our MCP in various ways:<p>- Legal tech companies powering their live-editing flow in Office.js.<p>- AI startup optimizing people’s resumes and applying on their behalf.<p>- Govtech who need to draft policy memos.<p>- A life sciences startup using long-running agents to complete regulatory forms.<p>A note on privacy: our MCP runs in the cloud, so users send us their .docx files. We don't train on user data, and teams can opt for ZDR or self-hosting.<p>There's a free tier with 500 edits a month, and we’d love you all to try. We want to bump that later, but we're a small team and running a fine-tuned model isn't cheap :(<p>We'd love to hear your ideas and comments about docx editing in general! We'll be in the comments for the next few hours to respond</p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=49881505">https://news.ycombinator.com/item?id=49881505</a></p>
<p>Points: 38</p>
<p># Comments: 17</p>
]]></description><pubDate>Mon, 28 Sep 2026 17:34:36 +0000</pubDate><link>https://www.vespper.com/blog/launching-vespper-docx-mcp</link><dc:creator>topaztee</dc:creator><comments>https://news.ycombinator.com/item?id=49881505</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49881505</guid></item><item><title><![CDATA[New comment by topaztee in "Show HN: Vespper (YC F24) – Docx MCP"]]></title><description><![CDATA[
<p>Free to try. 
Create your account now at <a href="https://app.vespper.com/">https://app.vespper.com/</a></p>
]]></description><pubDate>Mon, 28 Sep 2026 16:02:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=49880175</link><dc:creator>topaztee</dc:creator><comments>https://news.ycombinator.com/item?id=49880175</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49880175</guid></item><item><title><![CDATA[New comment by topaztee in "Nike exits the S&P 100 after 18 years and a $200B market-cap wipeout"]]></title><description><![CDATA[
<p>i bought a pair of new balances wide shoes and wont be going back to nike</p>
]]></description><pubDate>Mon, 14 Sep 2026 10:33:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=49694646</link><dc:creator>topaztee</dc:creator><comments>https://news.ycombinator.com/item?id=49694646</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49694646</guid></item><item><title><![CDATA[New comment by topaztee in "The ChatGPT/Codex app bundles a full copy of LibreOffice"]]></title><description><![CDATA[
<p>spinning up an entire copy of libreoffice sounds super heavy?, if someone here is actually using chatgpt to edit docx documents then they can feel free to use us. 
vespper.com</p>
]]></description><pubDate>Tue, 01 Sep 2026 22:16:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=49528980</link><dc:creator>topaztee</dc:creator><comments>https://news.ycombinator.com/item?id=49528980</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49528980</guid></item><item><title><![CDATA[New comment by topaztee in "Show HN: Open-weight OCR got so cheap I had to share it"]]></title><description><![CDATA[
<p>where are you hosting it?</p>
]]></description><pubDate>Sat, 25 Jul 2026 12:16:21 +0000</pubDate><link>https://news.ycombinator.com/item?id=49046945</link><dc:creator>topaztee</dc:creator><comments>https://news.ycombinator.com/item?id=49046945</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49046945</guid></item><item><title><![CDATA[New comment by topaztee in "Show HN: Language Model Builder (an app to learn about and build models)"]]></title><description><![CDATA[
<p>this is dope.<p>Some feedback:<p>- while I am going through the chapters i keep trying to highlight certain sentences so i could bookmark them for later, itd also be great to do cmd+f to search keywords<p>- in chapter 1, the "under the hood" link crashes the app</p>
]]></description><pubDate>Tue, 21 Jul 2026 21:16:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=48998456</link><dc:creator>topaztee</dc:creator><comments>https://news.ycombinator.com/item?id=48998456</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48998456</guid></item><item><title><![CDATA[New comment by topaztee in "Show HN: DOM-docx – HTML to native, editable Word docs (MIT)"]]></title><description><![CDATA[
<p>this is cool.
I'm curious how many tokens ($) it cost you to build?<p>i'm also building in this space (an MCP for agents to manipulate docx)</p>
]]></description><pubDate>Mon, 13 Jul 2026 14:07:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=48892952</link><dc:creator>topaztee</dc:creator><comments>https://news.ycombinator.com/item?id=48892952</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48892952</guid></item><item><title><![CDATA[New comment by topaztee in "Ask HN: What Are You Working On? (July 2026)"]]></title><description><![CDATA[
<p>currently working on an MCP for agents to manipulate docx files. 
<a href="https://vespper.com">https://vespper.com</a><p>the other day I also vibe-coded a recreation of digglabs , its shows HN, reddit ect using different visualisations<p><a href="https://topaztee.com/digglabs" rel="nofollow">https://topaztee.com/digglabs</a></p>
]]></description><pubDate>Mon, 13 Jul 2026 11:10:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=48890887</link><dc:creator>topaztee</dc:creator><comments>https://news.ycombinator.com/item?id=48890887</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48890887</guid></item><item><title><![CDATA[New comment by topaztee in "Ask HN: HN frontpage feels boring now?"]]></title><description><![CDATA[
<p>dang?</p>
]]></description><pubDate>Sat, 11 Jul 2026 20:42:11 +0000</pubDate><link>https://news.ycombinator.com/item?id=48875654</link><dc:creator>topaztee</dc:creator><comments>https://news.ycombinator.com/item?id=48875654</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48875654</guid></item><item><title><![CDATA[New comment by topaztee in "Show HN: Docx-CLI: agents read/edit Word docs using 1/2 the time and tokens"]]></title><description><![CDATA[
<p>nice to see others try to solve a problem we also experienced.<p>I'm also working on letting agents read/edit word docs but exposing it as a simple MCP<p>www.vespper.com</p>
]]></description><pubDate>Tue, 07 Jul 2026 19:46:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=48822761</link><dc:creator>topaztee</dc:creator><comments>https://news.ycombinator.com/item?id=48822761</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48822761</guid></item><item><title><![CDATA[Show HN: I Recreated Digg Labs]]></title><description><![CDATA[
<p>for people who remember the mid-2000s Web 2.0 era.</p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=48821114">https://news.ycombinator.com/item?id=48821114</a></p>
<p>Points: 3</p>
<p># Comments: 0</p>
]]></description><pubDate>Tue, 07 Jul 2026 17:46:13 +0000</pubDate><link>https://www.topaztee.com/digglabs/</link><dc:creator>topaztee</dc:creator><comments>https://news.ycombinator.com/item?id=48821114</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48821114</guid></item><item><title><![CDATA[New comment by topaztee in "OfficeCLI: Office suite for AI agents to read and edit Microsoft Office files"]]></title><description><![CDATA[
<p>cool,<p>im working on something similar. A fine-tuned model for agents to interact with docx over MCP. they wont have to deal with OOXML.<p>we have a waiting list for beta-users: www.vespper.com</p>
]]></description><pubDate>Mon, 06 Jul 2026 20:45:04 +0000</pubDate><link>https://news.ycombinator.com/item?id=48810281</link><dc:creator>topaztee</dc:creator><comments>https://news.ycombinator.com/item?id=48810281</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48810281</guid></item><item><title><![CDATA[New comment by topaztee in "OfficeCLI: Office suite for AI agents to read and edit Microsoft Office files"]]></title><description><![CDATA[
<p>cool,<p>im working on something similar. A fine-tuned model for agents to interact with docx over MCP. they wont have to deal with OOXML
vespper.com</p>
]]></description><pubDate>Mon, 06 Jul 2026 20:44:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=48810279</link><dc:creator>topaztee</dc:creator><comments>https://news.ycombinator.com/item?id=48810279</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48810279</guid></item><item><title><![CDATA[New comment by topaztee in "Ask HN: How should I convert Microsoft Word documents to Markdown?"]]></title><description><![CDATA[
<p>sure but OOXML is on  avg 12x~ larger than markdown so you'll burn a ton of tokens. I second using pandoc but depends on why you need it to be in markdown in the first place?<p>(source - I'm working on a docx MCP that abstracts OOXML complexity away from LLMs entirely)</p>
]]></description><pubDate>Mon, 29 Jun 2026 19:48:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=48724213</link><dc:creator>topaztee</dc:creator><comments>https://news.ycombinator.com/item?id=48724213</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48724213</guid></item><item><title><![CDATA[New comment by topaztee in "Ask HN: What are you working on? (June 2026)"]]></title><description><![CDATA[
<p>an MCP for agents to manipulate docx files (microsoft words files). It abstracts away all the OOXML for the agent<p>vespper.com</p>
]]></description><pubDate>Thu, 25 Jun 2026 10:48:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=48671611</link><dc:creator>topaztee</dc:creator><comments>https://news.ycombinator.com/item?id=48671611</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48671611</guid></item><item><title><![CDATA[New comment by topaztee in "Ask HN: What are tools you have made for yourself since the advent of AI?"]]></title><description><![CDATA[
<p>created a chrome extension to sync linkedin messages to my crm (pipedrive) rather than being charged 30$ a month<p>- <a href="https://www.yourfriendly.ai/" rel="nofollow">https://www.yourfriendly.ai/</a>. a desktop pet that lets me have an ai chatbox readily available</p>
]]></description><pubDate>Tue, 09 Jun 2026 10:23:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=48459117</link><dc:creator>topaztee</dc:creator><comments>https://news.ycombinator.com/item?id=48459117</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48459117</guid></item><item><title><![CDATA[New comment by topaztee in "Show HN: TV Explorer. Adding advanced UI to free online TV"]]></title><description><![CDATA[
<p>lots of channels arent available in my region, it would be cool to add a vpn on top of this so they wont be blocked</p>
]]></description><pubDate>Sun, 31 May 2026 21:12:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=48349800</link><dc:creator>topaztee</dc:creator><comments>https://news.ycombinator.com/item?id=48349800</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48349800</guid></item></channel></rss>