= History

This plugin was originally vibe-coded by Claude Code.  It
was then posted to David Gundry's github account, here:

    https://github.com/mirno-ehf/ue5-mcp

He released it under the MIT license.

How do I know it was vibe coded?  Because he says so:

> For Humans:
>    
> You're welcome here, but probably not in the way you'd
> expect. This project is built and maintained entirely by
> AI coding agents — Claude Code, Cursor, Copilot Workspace,
> and the like. We don't accept human-written code or
> human-opened issues.

Huh, interesting.  I (Josh Yelon) downloaded the code, and
evaluated it. I was curious what vibe coding could do.
Here's what I found:

* The code, overall, had issues, but in the end, it wasn't
that bad.  It did work, mostly - and that matters.  I wanted
my own working MCP server, and starting from a place where
you have working code is a lot easier than starting from
a blank slate.

* Claude really doesn't build any mechanisms to enforce
consistency.  For example: there were all the handlers, and
then in a different file, declarations of all the handlers,
then in another file registrations of all the handlers with
the webserver, then in another place a list of all the
handlers that require undo support, then in an entirely
other directory, a list of all the handlers and their
parameters. If any of these lists got out of sync, it would
break.

* Claude doesn't seem to care at all about extra layers upon
layers, or about dependencies.  Rather than building an MCP
server in an unreal plugin, it built a *web* server in an
unreal plugin, then built an MCP-to-web translation program
in *javascript*.   Requests to the server were getting
translated from json into URL parameters and then back into
json.  Ouch.  The javascript required installation of about
a thousand javascript libraries, some of which were not easy
to install.  Why not just build an MCP server in the Unreal
plugin directly, skipping all the dependencies and
translation layers?

* Claude will repeat code over and over.  I found endless
places where there were 10 copies of the same function, with
trivial variations, that could have all been merged into one
function with a parameter or two.  When it does repeat code,
the repetitions are not generally consistent with each other:
one variant might have a bug, whereas another is fine.

* There were lots of little edge-case bugs throughout the
code.  Claude is actually not bad about noticing edge cases,
but it misses some.

Despite all this, it was much easier to start from something
than to start from nothing.

So, I undertook a massive refactoring effort. I did use
Claude Code extensively - in fact, I'd say Claude did 70% of
the work.  But I monitored every step, and constantly pushed
Claude hard to use better software engineering practices.

The result, I think, is a pretty clean MCP server.

