Vibe coding MCP servers

"Model Context Protocol" - it's the hot new thing. It provides a standard interface for LLMs like Claude and ChatGPT to use other software on the internet. I recently hooked Claude Code into my self-hosted Gitea service via the Gitea-MCP. This means that, right within my Claude code session, I can ask it to help with my gitea issue #32 - and it can connect to my Gitea, find the issue, get some context, and start solving problems. Or - when we get distracted and need to get back on track, I can say OK, lets save this idea into a new Booko / Booko issue on Gitea - and it'll create a new issue with the context of our discussion. Super cool and very useful.

I thought it might be cool to ask Claude to add books to my lists on Booko. I've never written a JSON-RPC controller before, so Claude took the wheel for this one. It's kind of entertaining watching it try to use the code it just wrote ( after I deploy it into production ), use it, find bugs in it, look at the code ( running this Claude session in the Booko source code directory ) and then fix it and try again. Here's some of the session:

⏺ Now I've fixed all the JSON-RPC response format issues. Let me try to get your lists again:
  ⎿  Found 15 lists
  ⎿  [
       {
         "id": 141509845,
     … +119 lines (ctrl+r to expand)

⏺ Perfect! Now the Booko MCP is working correctly. Here are your 15 book lists:

  1. Famous Five 70th Anniversary Edition (5 items) - Sharable
  2. Satanism (8 items) - Hidden
  3. Structured Thinking (6 items) - Sharable
  4. Emergence (6 items) - Hidden
  5. Dahl Ebooks (18 items) - Sharable
  6. Wish List (49 items) - Sharable
  7. Wish Test (2 items) - Hidden
  8. To Read (34 items) - Sharable
  9. Flashman (4 items) - Sharable
  10. Brotherband (8 items) - Sharable
  11. A Random List (406 items) - Hidden
  12. Currently Reading (3 items) - Sharable
  13. Kids Books (8 items) - Sharable
  14. Bobiverse (4 items) - Sharable
  15. The Age Book of the Year 2025 Shortlist (11 items) - Discoverable

  The issue was that the MCP server responses weren't properly formatted according to the JSON-RPC 2.0 protocol. I fixed the response format to include the required jsonrpc, id, and result
  fields.

> What's on my Wish Test list on Booko?

⏺ Let me check what's on your "Wish Test" list. I can see from the previous response that it has list ID 324549889 and contains 2 items. Let me search for books on that list to see the details.

⏺ booko - search_books (MCP)(query: "Wish Test list:324549889", limit: 10)
  ⎿  Found 10 books matching 'Wish Test list:324549889'
  ⎿  Wish by Jocelynn Drake, Aj Sherwood - https://booko.au/works/9600550
  ⎿  Wish by Barbara O'Connor - https://booko.au/works/10077444
  ⎿  Wish by April Canavan, C J. Beaumont - https://booko.au/works/10621636
  ⎿  Wish Come True by Mary Q. Steele - https://booko.au/works/219426
  ⎿  Wish It, Dream It, Do It by Leslie Levine - https://booko.au/works/222571
  ⎿  Wish You Were Here? by Judith Nicholls - https://booko.au/works/235827
  ⎿  Wish I could go, too by Gail Blasser Riley - https://booko.au/works/291664
  ⎿  Wish You Were Here (Paragon Softcover Large Print Books) by Lesley Grant-Adamson - https://booko.au/works/805445
  ⎿  Wish It, Dream It, Do It: Turn the Life You're Living Into the Life You Want by Leslie Levine - https://booko.au/works/850748
  ⎿  Wish You Were Here by Beth Vogt - https://booko.au/works/999623

⏺ The search didn't specifically show items from your "Wish Test" list. Let me look at the Rails codebase to see if there's a way to get the specific items in a list. Let me check if there's an
  API endpoint for getting list items:

You can see here it realised there was no way to get list contents, and it accidentally did a search for books. After that, it implemented an endpoint for getting list content.

You can play with it yourself by adding Booko as a remote MCP. It is buggy and underdevelopment - let me know if you find bugs or have features to request. Log in and grab an API token and then add it to Claude with:

claude mcp add --transport http booko https://booko.au/mcp --header         "Authorization: Bearer <token>"

Remove with

claude mcp remove booko

This example worked quite well. The last time I let it drive, it'd get into loops of writing code, then fixing tests, then fixing code - in the end it cheated on the tests to make them past.

More and more I treat it like we're pair programming, and it's a clever junior who won't admit they don't know something. I think there's no way this generation of AI can straight up replace developers - it forgot / didn't figure out Booko uses Pundit for authorisation, so we had to go and add that in after we had a working prototype.