Posted on ::

I recently built my first Model Context Protocol (MCP) server, and honestly? I had no idea what I was doing. The whole thing was pure vibe-coding. Throw ideas at Claude, see what works, and somehow end up with working software. The result was linkding-mcp, and I'm surprised it actually works.

What Even Is MCP?

Model Context Protocol is Anthropic's way of letting AI assistants connect to external tools and data sources. Think of it as giving Claude access to your stuff. Instead of just chatting, it can actually work with your real data. When I heard about it, my first thought was "I want my bookmarks accessible to Claude."

I use Linkding for bookmark management as part of my self-hosted setup, and the idea of asking Claude "find that article about Go testing I bookmarked last month" seemed too good to pass up.

The Vibe-Coding Approach

I've been experimenting with what I call "vibe-coding." Basically, let AI do most of the heavy lifting while I provide direction and fix the issues. For this project, I took it to the extreme.

My process was basically:

  1. Tell Claude "I want an MCP server for Linkding"
  2. Paste the Linkding API docs from their website
  3. Let Claude generate the entire Go client
  4. Ask Claude to build the MCP server on top of that
  5. Ask Claude to generate the GitHub workflow for CI/CD
  6. Debug and iterate until it worked

No careful planning, no detailed design docs, just pure experimentation guided by AI.

The Magic Moment

What surprised me was watching Claude generate a complete Go client library just from reading Linkding's API documentation. I copy-pasted the docs from their website, and within minutes I had working code that could:

  • Authenticate with Linkding
  • Create and retrieve bookmarks
  • Search through my bookmark collection
  • Handle pagination and error cases

Then, even more impressively, Claude built an entire MCP server on top of that client. The server implements the MCP protocol, handles tool registration, and provides clean interfaces for bookmark operations.

What the Final Product Does

The linkding-mcp server gives Claude direct access to my Linkding bookmarks. I can now:

  • Search bookmarks: "Find bookmarks about Kubernetes monitoring"
  • Create bookmarks: "Bookmark this URL with these tags"
  • Get bookmark details: "Show me the details of that bookmark about MCP"

It's surprisingly useful. Instead of opening Linkding in a browser and manually searching, I just ask Claude. For someone who bookmarks everything but rarely organizes it properly, having AI help navigate my collection is really helpful.

The AI-Assisted Development Experience

This project made me realize how much AI has changed software development. I'm experienced with Go, but I've never built an MCP server before. In the old days, I would have spent hours reading specs, looking at examples, and carefully implementing each piece.

Instead, I described what I wanted and let Claude figure out the implementation details. When something didn't work, I'd paste the error and get a fix. When I wanted to add features, I'd describe them and get working code.

The ratio was probably 90% AI-generated code, 10% me providing direction and debugging. The whole thing took about 3 hours from inception to a fully working Docker image automatically built and pushed on GitHub releases. And the result serves its purpose well as an experiment.

Technical Surprises

A few things that surprised me during this experiment:

MCP is surprisingly straightforward - The protocol is well-designed and Claude understood it from the specs.

API client generation is magic - Feed API docs to AI and get working client code.

Error handling just worked - I expected to spend time debugging edge cases, but the generated code handled errors well from the start.

Performance was fine - No optimization needed, it just works fast enough for personal use.

What This Means for Development

This project has me thinking about the future of software development. When AI can generate working code from documentation and natural language descriptions, what does that mean for how we build things?

I'm not ready to vibe-code everything, but for exploratory projects and personal tools? It's pretty powerful. The barrier between "I wish this existed" and "I have working software" has basically disappeared.

The Code

The entire linkding-mcp server is on GitHub. Fair warning, it's mostly AI-generated code with minimal polishing. But it works, and that's what matters for a personal tool.

If you're using Linkding and want to try it out, the setup is straightforward. Just don't expect production-grade code, this was pure experimentation.

What's Next

This experience convinced me that MCP servers are worth exploring further. My next project was PortoSync (connecting Indonesian investment data to Claude), and I'm already thinking about what other data sources would be useful to connect.

The ability to give AI assistants access to your actual data, rather than just generic knowledge, opens up a lot of possibilities. And if AI can help build the connections themselves, the barrier to experimentation drops to basically zero.

Vibe-coding might not be the future of all software development, but for personal tools and rapid prototyping? It's pretty amazing.