HN.zip

Launch HN: Vespper (YC F24) – SOTA Docx MCP

Hey HN! We're Dudu and Topaz from Vespper (https://vespper.com). 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: https://youtu.be/odKxsgPjzzwWe 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.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.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).From firsthand experience, these problems hurt performance in downstream tasks.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: https://www.harvey.ai/blog/building-an-agent-for-complex-doc...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.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.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.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.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:- Legal tech companies powering their live-editing flow in Office.js.- AI startup optimizing people’s resumes and applying on their behalf.- Govtech who need to draft policy memos.- A life sciences startup using long-running agents to complete regulatory forms.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.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 :(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

28 points by topaztee - 8 comments

8 Comments

khaki54 [3 hidden]5 mins ago
Agree a good one this is needed but there are 4-5 semi functional Word MCP servers including one from the vendor. This one still isn't feature complete. This is going to sound rude, and I don't mean it that way, but how did you get accepted to YC for this? Was this some kind of pivot off your accepted idea and business plan?
david1542 [3 hidden]5 mins ago
Legit question :) so we've worked on a few ideas since we've been accepted to YC, one of them was the document editor for pharma.

After working on that for a while, we've decided to shift focus and work on the DOCX angle. We felt there's a big opportunity here since .docx is such a widely used format.

As to the feature complete point - I agree. We already cover the most common features today (paragraphs, lists, tables, tracked changes, header/footer) and we're working hard on implementing more. Our main focus right now is to be the most accurate, cheapest and fastest solution out there for common scenarios.

david1542 [3 hidden]5 mins ago
Btw we open sourced a Word add-in project that shows how to build a Word add-in with Vespper MCP: https://github.com/vespperhq/examples/tree/main/word-add-in
radial_symmetry [3 hidden]5 mins ago
I've built tools using the agent in https://github.com/eigenpal/docx-editor. I can use my existing AI and don't need to connect to an external service, plus it is open source. Why would I use your solution instead?
david1542 [3 hidden]5 mins ago
EigenPal is great! I actually love their product.

Where I think it can break (and we show some of that in the benchmark post, though not on EigenPal specifically) is on tricky document edits, like multi-turn track changes, implicit style understanding (respecting surrounding styles without being told to), advanced list manipulation, etc. We also saw these problems get amplified on long-horizon, challenging document workloads.

Eventually we realized no product out there truly handles the wide variety of cases agents run into, so we set out to build one.

So to answer your question, it depends. If your documents are simple and you're happy with the results, stick with what works. But if you have tricky documents and find yourself chasing the N-th edge case, I think delegating that to something like our product makes sense.

c0mbonat0r [3 hidden]5 mins ago
we need to fill templates that customers give us, we’ve already built an agent harness with python-docx. It’s not perfect but it ~works. Does Vespper completely replace that or can our harness be used alongside your MCP?
david1542 [3 hidden]5 mins ago
Good question. Vespper is meant to replace the python-docx work for your agent and simplify things. That said, it can definitely run alongside your agent (either as additional tools to your agent or as a subagent that uses our tools).

For example, you could keep python-docx for the easy stuff and fall back to a Vespper-based approach when your agent hits errors filling the document. However, the end goal is to completely free your agent from python-docx and low-level work, so it can just focus on what goes into the template.

topaztee [3 hidden]5 mins ago
sign up for free to try: https://app.vespper.com/