Vibe coding a Basecamp MCP server
Bringing AI into my favorite project management software.
I vibe coded an MCP server for Basecamp in maybe 30–45 minutes using Claude Code. I had never used an MCP server before, and I had no idea what I was doing.
Thanks to Claude the process was very straightforward and fun.
I was inspired to try this out because of Mateusz Makosiewicz's article "What Is an MCP Server, and Why Should Marketers Care?" on the Ahrefs blog. Here's his quick definition:
MCP (Model Context Protocol) connects your AI tools directly to your marketing stack—your CMS, analytics, CRM, social platforms, and more—through one standardized connection.
This means you can ask: ‘Show me which blog posts lost traffic last month, what keywords they rank for in Ahrefs, and how many support tickets mentioned those topics in Intercom’—and get one consolidated answer instead of logging into three different tools and manually connecting the dots in a spreadsheet.
The big takeaway is that an MCP server allows you to query your tools with natural language. The MCP server gives your LLM of choice access to the data via an API, and it can fetch the information you request and respond in kind.
I use Basecamp for project management, and the software has a pretty comprehensive API, so I decided that this would be a good proof of concept to see if I could just vibe code an MCP from scratch.
Here's the gist of the prompt I used:
Build an MCP server for Basecamp. Here's the API docs: https://github.com/basecamp/bc3-api
Claude searched and read the docs and then took me through a step-by-step guide on how to:
- set up the project on my machine
- get an API key from Basecamp
- run
npm run build - connect the MCP server to Claude Desktop
- push the project to a Github Repo
Over the past week, I've used Claude to provide updates on my projects in Basecamp, assist me in building out To Dos, post project announcements to the Message Board, and write up project notes in Docs and Files.
The initial MCP server that Claude built was pretty stripped down and provided access to only the most popular/common tools in Basecamp. I decided to pull out all the stops and had Claude go through the entire Basecamp API to add nearly every available endpoint so I could do pretty much everything I want to in Basecamp—straight from Claude.
Things I learned through the process

Vibe coding isn't a brainless activity
Sure, the AI is doing the grunt work, but you're still an active participant. A bulldozer operator isn't physically doing the actual work of moving dirt to make a highway, but it's still essential for him to remain focused on the task and the ultimate goal.
Through this process, I was engaged in the way that someone might be engaged watching a skillful musician or welder. I was observing what Claude was doing and getting a sense of how things work together. Vibe coding gets flack for being a hands-off approach, but it doesn't have to be a mental check out.
How TypeScript is different than JavaScript
I'm currently working through the JavaScript certification at freeCodeCamp, and just a few weeks ago I was learning about how JS is a dynamically-typed language. Seeing everything done in TypeScript led me down a prompt-hole about why TypeScript is used for MCP servers instead of JavaScript and spelunking in Reddit threads ripe with hot takes about TS vs. JS. The static typing makes things more stable. The project gave me the context to ask questions that wouldn't normally come up in my day-to-day work, and it helped me understand how learning JS could evolve into learning TS.
A lot about APIs (and how MCP servers work with them)
An MCP server is just calling the API of the tool it has access to. The AI model is limited by:
- The actions supported in the connected tool's API
- The API endpoints that have been explicitly defined in the MCP server's configuration
I soon realized that there were things that I couldn't do through Claude (like creating a new note in Docs & Files) because the Docs & Files endpoints needed to be added to the MCP server. This led me to an important insight: the more robust a tool's API, the more likely that an MCP server will actually be useful.
While the Basecamp API is pretty comprehensive, it doesn't cover every single action available in the interface. For example, there's no endpoint for "Moving the Needle" or posting a status update there, so I can't ask Claude to update project status in that tool. That's a limitation of the API—not the model.
This may seem like a simple learning, but I found it very valuable to peek under the hood of how MCP servers actually give a model access and how API design affects the overall utility of an MCP server.
How MCP servers can fit into a project management workflow
Project management involves a lot of admin tasks: writing status updates, building out to dos, creating work documentation, and checking in on where things stand.
Now I can use Claude to provide a first draft at routine status updates, populate To Dos in bulk based on a project plan, and search across all of my projects for general updates. I've discovered that it can be helpful to iterate on a project plan with Gemini to figure out the technical approach and then paste that output into Claude to build out actionable To Dos in Basecamp. This certainly beats manually typing To Dos one by one.
I still prefer to work within Basecamp most of the time because I can usually find what I'm looking for faster than it takes the model to call the API. But now I have an assistant to speed up some of these tasks when it makes sense.
How to actually publish something on Github
I've spent a lot of time looking at repos and README files on Github, but git has never made sense with my workflow (yet) and I haven't really had anything to publish. I wanted to take this project all the way and make it available to the public. I prompted Claude to walk me through the steps, and it wrote a README file with complete instructions, added an MIT license, and got everything ready to push to Github.
What's next
MCP servers are just a tool that can help with productivity. I'm excited to keep testing this out and seeing how it fits into my workflow. I'm still discovering some endpoints that have not been added to the configuration, and I'm having Claude add those at they come up so this MCP server integrates more deeply with Basecamp. I'll keep pushing those changes to the repo as they come up so others can benefit from this project.