This post was created with the help of AI (fixing grammer and spelling). Actual writing was done by me (human).
EDIT: I updated the cost ratio between Deepseek and Claude Sonet 3.5 after I found the correct input and output tokens
Now that I have your attention, I apologise for the clickbait title. I'm trying to make it worth your while to read. As the title says, I tested cline 3.0.0 in a real-world scenario. I have already used cline in version 2.X with promising results. Two weeks ago the new version came out with some nifty new features like MCP servers, .clinerules and an autonomous mode. I wanted to put this to the test.
- MCP server: little helper tools that perform certain tasks (e.g. calculations, connections to an API, ...)
- .clinerules: A file at the top level of your project that contains specific instructions for cline to follow
- Autonomous mode: In this mode, cline does not need confirmation from the user. You can define which actions Cline may perform independently and which must be confirmed by the user.
I've built a task management platform (a fancier word for todo app) and I want to take you on a tour of one particular part of it, because it has a little twist that I can't reveal until the end. This task management platform (let's call it "Tasks" for now) offers everything you would expect from a task management platform. I'll probably write about it in the future too. What it lacked was a landing page.
Landing page before
As you may have guessed, I used cline to create a landing page for me. It all worked well and looked good. It also added a testimonials section without me specifically instructing it to. However, the profile pictures for the testimonials were just placeholders. And that's when it hit me. This is a really cool use case for an MCP server.
Landing page by cline
MCP server
An MCP server (Model Context Protocol) is like a personal helper for your AI assistant that acts as an MCP client. It is a small program that runs or can be called in the background and is ready to perform certain tasks when called.
For example, imagine you need to retrieve data from the web, commit files to the repository or simply get the current time for the AI to work with – that’s where an MCP server comes in. It listens, waits for instructions and completes the tasks without you having to write additional code each time. The AI understands what each MCP server does and calls it automatically when it needs to.
In this project, I needed an MCP server to generate facial images for testimonials by pulling them from ThisPersonDoesNotExist.com. The website ThisPersonDoesNotExist.com went viral some time ago for creating a photorealistic images of a person every time you visit it.
Face Generator
So I turned to cline and said
Add yourself a tool for generating an image of a human face. It is really simple. Just visit https://thispersondoesnotexist.com. This will generate such an image. You just have to download it and store it somewhere. Give yourself some options/parameters (i.e. location where to save the image). And write the tool in a way so that it can be integrated in coding workflow easily. For example, we just created testimonials for a website. This tool would be handy to generate a face for the testimonial giver. So I hope you get what I want.”
As you can see, I wasn't so sure I had made myself clear enough for it to work. But sure enough, the first draft of the server did just that. It also asked me if it should run. It worked, without any issues the first time, which was scary. Not that it can produce code that works first time. It's that it's so easy to go from "I could really use a tool like this to make my life easier" to "It's there and it works" in less than a minute. Here are some of the images, generated.
Iteration of the first draft
The first draft was only simple and it did what was my intention. After that, I had more ideas on how to improve it and kept on iterating. Here are some prompts that I used to make this tool even more helpful.
Please keep in mind that you sometimes need to generate multiple images at once: not sure if it’s best to invoke the tool multiple times or if it would be better to invoke it once with a new parameter and loop inside the script. Also add an option to resize the image to a given size. There should be a default for this, so this parameter is optional.
Can we add an option to generate faces with different shapes? Circle and rounded rectangle would be useful. Allow for a borderRadius parameter for the rounded shape.
I noticed that the output images are .jpg by default. Let’s make sure all images are saved as .png, regardless of the input filename. Update the filename logic to enforce this.
Add options to resize the images during generation. Default should be 256x256, but I want to pass width and height as parameters when needed.
As you can see, I've tried to describe what I want without saying how to do it, as the AI is capable of doing this itself. Disclaimer: I didn't review the generated code too much. From what I saw, it looked okay-ish. I was more focused on getting a result. Eventually, I got a tool that worked quite well for different scenarios and worked on every iteration, which is impressive. After some testing, I figured it was time to put it to the test.
Testing the tool
Now I wanted to replace the placeholder images with real faces from the Face Generator mcp tool. I also forgot to mention that cline built and installed the mcp server all by himself. I almost took that for granted. 8) This part is a bit bumpier than the others and I'll try to explain it in a back and forth sort of way. Bear with me, there is an important lesson here.
Now invoke this tool and add faces to the testimonials. Do not use the temp-faces directory. Use one that actually serves images for this React application.
I created the "temp-faces" directory to test the mcp tool. cline called the tool correctly, but with the wrong parameters (3 images). So I had to prompt once more:
Check the LoginPage to see how many testimonials you will need.
And lo and behold, it generated the images and replaced them correctly in the existing code. But the styling was not correct. So once again a prompt to correct this.
The images are pulled correctly. However, the styling is off. Look at the screenshot.
The screenshot function didn't actually work, but that was due to the model I was using. I just described it and it resized the images correctly. So the tool worked, even in a real scenario. Now it was time to publish it so cline doesn't use a local copy of it. Maybe this tool is useful for others as well?
Publishing it
So publishing means cleaning everything up, preparing it for publishing and actually publishing it. Also, I had to move it. When cline is instructed to create a tool, it uses its own folder for that, which is not my project directory. And instead of thinking too much about it, I once again focused more on what I want the AI to do, not how it does it. Here are the prompts
Move the face- generator MCP server to my Nodejs project directory. I want to publish it from there.
I left out the actual path because I didn't want reveal directory structure. It's important to point this out so no one thinks the AI is smart enough to guess/know the correct directory. There's probably an MCP server tool for accessing the file system, so it can actually figure that out. But none of that was used here.
One final touch to this MCP server tool. I want to release it somewhere. Please prepare the package for release. Add a README (for example). Not sure what else we need. Also explain where and how I can release it.
Now that the README and LICENSE are in place, publish the face- generator to npm. Make it public.
And then it broke.
npm publish –access public. I got an error saying the package is private. Remove the ‘private’ field from package.json and try again.
And at this point I realised what has already become clearer. Instead of telling the AI what to do, I simply pointed out the error to it and thought, "Figure it out for yourself". For some of you who have been working with such systems longer than I have, this may not be anything new, but for me it was an epiphany. And something that sets other systems, and cline 2.X in particular, apart from the latest version. I could actually shoot back and the AI figured out the rest. It was no surprise that it was able to overcome this issue and finally publish. If you want to see the result and / or just need a mcp server tool to generate random profile pictures, here you go https://www.npmjs.com/package/@dasheck0/face-generator. If you take a look at version 1.0.0, you will find an important typo in the readme file. Instead of npm install @dasheck0/face-generator
and it said to run npm install @yourname/face-generator
, which would lead to installation errors. I didn't see it, when it produced this line, which is another important lesson. Always be the pilot (at least for now), while the AI is the co-pilot. This means you must keep an eye on what it's doing. For me, anyway, this was the perfect opportunity to test its autonomous capabilities. Here is the prompt
I see that the installation is not correct it should be ‘npm install @dasheck0/face-generator’. please fix it, commit it, push it and rerelease it on npm.
I auto approved everything (MCP server invocation, editing files, reading files and safe command line execution) and then went to get some water. The task was done in less than a minute without me having to intervene. Impressive, despite the fact that it was simply
- fix a typo
- increment the version
- commit everything
- execute some commands (e.g. npm publish)
The impressive thing is that I'm telling the AI to do something that is more than just coding, and it works from A to Z.
Some stats and the twist
Alright, let's cut to the chase. I promised you a twist. cline is independent of AI models, meaning you can use almost any model (even open source models). I believe the models from Anthropic should be used. At least those are the models I've used so far. And they are getting pretty expensive. I've burned through $50 in a couple days. That's still a lot cheaper when you factor in the time it would have taken me if I had done it by hand. However from a non-monetization perspective, it gets pretty expensive very quickly. I saw a video the other day about Deepseek performing similarly to Claude Sonnet 3.5 at a fraction of the cost. Twist: So everything you've seen so far has been the work of the Deepseek model. I haven't looked at the benchmarks yet, but in my experience it performs almost as well as Claude Sonnet 3.5, which is really impressive for an open source model. The main difference (besides the cost) is that it thinks in much smaller steps. Claude Sonnet 3.5 can complete a complex task in just one edit, whereas Deepseek requires multiple edits. I like this approach much better as it is more tailored to the way we work, which has helped me to understand it better. At the end of the day, it's just a different kind of approach. Here are some stats on token usage and pricing
- Requests to the model: 155
- Tokens used: 5,698,390 (50,688 Output, 713,558 Cache Miss Input)
- Spend: $0.18 (Deepseek)
- Cost for the same amount of tokens for Claude Sonnet 3.5: $2.90 ($3.00 per MTok https://docs.anthropic.com/en/docs/about-claude/models#model-comparison-table)
The price difference between Deepseek and Claude is huge (only 6% of the cost). I can say with certainty that Deepseek is my new go to model with cline. And I can also say with certainty that cline is my CoPilot now more than ever.
Summary
All in all, this experiment was a great success and I learned a lot from it. Before I present my learnings I want to emphasise that AI is a powerful tool, but not the answer to everything. I am far from blindly trusting AI and accepting it as our lord and saviour. I think it is important to deal with this type of technology these days, especially as a developer. I've been a software developer since 2004 and I've seen a lot in that time. So I'm not an AI kiddie who is suddenly the best developer in the world just because he turned to AI. It was important for me to mention this so as not to appear biased. that would stand in the way of an open dialog.
AI co-piloting has become much more helpful. It's not capable enough to replace you (yet). But developers who know how to use it will replace you. Interacting with AI is the new skill that everyone should learn. Like learning how to google in the mid 2000s.
Tell AI what to do or how to do it. But not both. I prefer to focus on the what, because that feels more natural to me. There was a constant back and forth between me and the AI – like suggesting ideas to a colleague, except this colleague can generate entire servers in seconds. I would suggest an idea, Cline would execute it, and if something wasn't right, I would step in to correct it. This dynamic felt like a true collaboration, where the AI did the heavy lifting and I focused on creative problem solving.
Know what to expect from your co-pilot and how to use it effectively. Cline automated things I would normally dread. What stood out was how effortlessly the AI filled in the gaps without me having to grind through repetitive tasks. However, the AI didn’t always get everything right. There were typos, missteps and quirks that required my attention. I was not able to tell it a god-prompt to do everything. I think we will never get there. But giving smaller tasks and iterating on them was working very well.
Final thoughts
I am in no way affiliated with any of the above tools. But I am an eager user of these and wanted to share my experience. These are just my learnings based on my personal opinion and experiments. Yours may differ. And if so I would also love to learn from you as well. What are your experiences, successes and failures? Let's talk.
Top comments (0)