73 lines
2.8 KiB
Markdown
73 lines
2.8 KiB
Markdown
= 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.
|
|
|