Christopher Hotchkiss

Christopher Hotchkiss

Crafting Solutions, Shaping Products: From Concept to Code

Yes I'll cater to the bots with MCP

July 13, 2026

So in working on the hotchkiss-io site, I've run into a common workflow pattern.

  • Draft something (like this post!) in Zed.
  • Have Claude mine the post for my voice profile updates so its next steps sound more like me.
  • Have Claude clean up my inability to spell without a spell checker, add links, the works.
  • Commit the blog post to my draft repo since I can't help myself but use git for everything that isn't a massive binary file.
  • Hand copy the blog/project to https://hotchkiss.io so YOU can see it.
  • Make a change on https://hotchkiss.io and forget to copy it back, eventually giving myself a multi-master replication problem. Oops!

So modern problems require modern solutions... well not really, this is exactly the type of thing a simple shell script should handle, but where's the fun in that?!

Instead I'm going the route of implementing a full MCP server inside hotchkiss-io.

Pretty simple right?

MCP is just lightly standardized JSON-RPC but that directly hits at a classic challenge for any web server. I now have two clients, the browser AND MCP. Which because this is just my personal site, I've managed to avoid the multi-client problem. Any real application site would have run directly towards React/Angular from the start and just served JSON from the backend from the very beginning.

I didn't do that here, primarily because it's just me running this for me and my family AND for a bigger reason.

React/Angular ARE a second codebase but more importantly are their own source of divergent state. I think in general that can be overkill compared to the HTMX approach while still using HATEOAS. Also it's my site so I'll do what I wantβ„’. πŸ˜›

Side note the line above is also about to be a great UTF-8 test for my site too.

Anyway I digress but getting back to MCP, there is a simple reality that any public website is going to be scraped by bots nonstop. I may as well make my most common user comfortable and get some experience with a new way of interacting with a server AND serving content.

Implementation Details

Overall, implementing MCP was pretty simple. There's a good Rust crate (rmcp), it plays nice with axum and fundamentally it's just a new set of API endpoints like anything else.

Check it out here: https://github.com/chotchki/hotchkiss-io/blob/72ff7aa65fde2aa6952b7b40aad675dc60d8b8c0/src/web/features/mcp.rs

The real trick for it has been to treat it just like another client type coming to the website. It gets all the same security checks AND it ends up emitting pretty similar data.

For what I need I think it's been a good learning experience.

Cover Image from NASA/Expedition 59, Public domain, via Wikimedia Commons