[{"data":1,"prerenderedAt":143},["ShallowReactive",2],{"/blog/mri-viewer-for-me-and-my-agent":3},{"id":4,"title":5,"body":6,"category":120,"date":121,"description":12,"excerpt":122,"extension":126,"image":127,"meta":130,"modified":131,"navigation":132,"path":133,"readingTime":134,"seo":139,"sitemap":140,"stem":141,"__hash__":142},"blog/blog/5.mri-viewer-for-me-and-my-agent.md","An MRI viewer for me and my agent",{"type":7,"value":8,"toc":114},"minimark",[9,13,18,21,24,35,38,42,51,54,57,77,80,83,87,102,105,108,111],[10,11,12],"p",{},"Recent health issues sent me for an MRI of my guts. The original issue isn't that serious, so no worries. Then came a side story: my wife pointed out something around my hip that wasn't mentioned in the radiologist's report. I wanted to have a look myself. Two evenings later, I had my own MRI viewer and an AI agent browsing it with me.",[14,15,17],"h2",{"id":16},"first-a-viewer-i-could-use","First, a viewer I could use",[10,19,20],{},"I downloaded the DICOM files from my Luxmed account. Their viewer was frustrating enough that I couldn't make much sense of the images. I tried opening it in the Codex browser and asking the agent to investigate, but it struggled to navigate the app too.",[10,22,23],{},"So I did the fairly predictable programmer thing: I built another viewer.",[10,25,26,27,34],{},"The first version took one evening of vibe coding. Most of the credit belongs to ",[28,29,33],"a",{"href":30,"rel":31},"https://www.cornerstonejs.org/",[32],"nofollow","Cornerstone3D",", the open-source medical imaging library behind the app's rendering and DICOM image loading. Its maintainers have done awesome work. Having that foundation let my agent build a useful app quickly. Implementing the imaging machinery ourselves would have been a very different project.",[10,36,37],{},"By the second evening, I could comfortably browse my scans, including reconstructed views across all three anatomical planes. I could find the area my wife had pointed out and look at it from different directions.",[14,39,41],{"id":40},"then-a-viewer-the-agent-could-use","Then, a viewer the agent could use",[10,43,44,45,50],{},"Once navigation worked for me, I wanted it to work for the agent. That led me to ",[28,46,49],{"href":47,"rel":48},"https://webmachinelearning.github.io/webmcp/",[32],"WebMCP",": a browser API proposal that lets a web app expose structured tools to an AI agent. I added it on the second evening, giving the agent actions for switching series, moving through slices, changing views, and adding annotations.",[10,52,53],{},"I could ask, \"Something is wrong with my hip, find the place,\" and watch it move through the scan in the browser tab beside the chat. In my experiments, Astra High followed through much more thoroughly than Astra Medium, which felt a bit lazy about continuing the investigation.",[10,55,56],{},"I also added an ellipse tool and image exports. The agent could mark an area, prepare a view through WebMCP, and inspect a screenshot before deciding where to look next. The current version prepares a live screenshot view. Downloadable exports are a separate feature.",[58,59,60,67],"prose-figure",{},[10,61,62],{},[63,64],"img",{"alt":65,"src":66},"The agent has zoomed into an MRI slice and added a red ellipse around the area being discussed.","/images/blog/5/mri-agent-annotation.webp",[68,69,71],"template",{"v-slot:description":70},"",[10,72,73],{},[74,75,76],"em",{},"Asking the agent to show a slice, zoom in, and mark the area. The ellipse is a screen annotation, not a diagnosis or an anatomical measurement.",[10,78,79],{},"This worked much better than my first attempt: handing the agent roughly 300 MB of raw DICOM files in a flat directory. The viewer had already grouped the images into series and made their positions navigable. The agent could inspect a few relevant frames, compare nearby slices, and keep track of where it was without filling its context with file handling.",[10,81,82],{},"An app that helped me understand the data also helped the agent work with it. That's the part of this experiment I'd like to carry into other projects: give humans and agents a shared workspace, with useful actions over the same data.",[14,84,86],{"id":85},"try-it-with-one-privacy-distinction","Try it, with one privacy distinction",[10,88,89,90,95,96,101],{},"The ",[28,91,94],{"href":92,"rel":93},"https://mri-viewer.haxoza.com/",[32],"viewer is available on Cloudflare",", and the ",[28,97,100],{"href":98,"rel":99},"https://github.com/haxoza/mri-viewer",[32],"source is on GitHub",". It loads and processes selected DICOM files inside your browser, with no application backend or upload endpoint. Ordinary viewing keeps your scans on your computer.",[10,103,104],{},"Using an AI agent is a separate choice. Screenshots it sees enter its conversation and are subject to that service's data handling. Local DICOM processing doesn't make cloud AI analysis local.",[10,106,107],{},"You can inspect the code, run it yourself, or ask your agent to review the privacy implementation.",[10,109,110],{},"This isn't a medical tool or a substitute for a radiologist's assessment. It's a vibe-coded experiment to show what's possible and perhaps help other patients view their own MRI scans and prepare questions for their doctors. Finding and circling something on an image is still a long way from knowing what it means.",[10,112,113],{},"Providers like Luxmed should improve their patient tools and embrace AI to help people access and explore their own results.",{"title":70,"searchDepth":115,"depth":115,"links":116},2,[117,118,119],{"id":16,"depth":115,"text":17},{"id":40,"depth":115,"text":41},{"id":85,"depth":115,"text":86},"Engineering","2026-10-31T00:00:00.000Z",{"type":7,"value":123},[124],[10,125,12],{},"md",{"src":128,"alt":129},"/images/blog/5/mri-three-plane-view.webp","MRI viewer showing three anatomical planes alongside an AI conversation",{},null,true,"/blog/mri-viewer-for-me-and-my-agent",{"text":135,"minutes":136,"time":137,"words":138},"4 min read",3.25,195000,650,{"title":5,"description":12},{"loc":133},"blog/5.mri-viewer-for-me-and-my-agent","0P47w9vWDCnT442uBjjBc4qtLJVNl5KEGj1FC3ds3_U",1793487707224]