Tales from the jar side: Junie live stream, MCP video and blog post, MCPs with Claude Code, and the usual silly skeets
Apparently I snore so loudly it terrifies everybody in the car I'm driving (rimshot)
Welcome, fellow jarheads, to Tales from the jar side, the Kousen IT newsletter, for the week of June 15 - 22, 2025. This week I participated in another Junie live stream with Anton Arhipov, published a YouTube video on MCP, and learned a lot about MCP servers in both Docker and Claude Code. In fact, it was pretty much an MCP (Model-Context-Protocol) week around here.
Junie Live Stream
After our first live stream, I felt bad that we hadn’t finished the application we were working on, and that we didn’t get to spend as much time with Junie. We decided, therefore, to give it another try. The title was Agent Wars II: The Wrath of Junie, and ran on Monday this week.
I think overall it went better, but we still didn’t quite finish. The goal this time was to take my MCP service that wraps the OSQuery tool (which I discussed in the video in the next section) and generate a command-line client for it.
What neither of us realized when we started was that while there’s a very straightforward way of doing it using Spring AI, the fact that Spring AI only officially came out a couple weeks ago meant the AI tools we were using didn’t understand the latest docs. Both Claude Code (which I used) and Junie (what Anton used) tried, therefore, to implement the process by hand — they spent lots of time figuring out how to do what the latest version of the API does automatically.
Late in the session we realized what was going on. At the end (really, after we were done), I used the context7 MCP server recommended by Anton to update Claude Code, and it figured out the right thing to do pretty quickly. But alas, that didn’t make it into the video.
It is, however, now in the code base if you want to see it. See this GitHub repository, and you can try out the command-line client through the gradlew
commands listed in the README file.
We’re hoping to do another live stream in July. I suppose that one will have to be Agent Wars III: The Search for Junie, or Agent Wars III: Return of the Junie, or something equally silly. Your suggestions are welcome in the comments.
New YouTube video
I’m not going to go into details about that here, because the topic was already discussed in this newsletter last week and the week before.
I did, however, take the time to port that information into this blog post for those who would rather read text than watch video. That post came out today, which was certainly foolish given that I had a newsletter to write, but I had momentum and didn’t want to leave the post hanging.
Adding MCP servers to Claude Code
Anthropic announced this week that you can add MCP servers to Claude Code (as opposed to Claude, by which most people mean the desktop app or the web site). They made the process pretty simple. You just use the mcp
argument to the claude command:
claude mcp add <name> <command> [args...]
That works both with local servers, where one of the arguments is the path to the server, or remote servers, where you can specify a transport argument and a URL.
For example, during our live stream Anton introduced me to context7, which I’d never heard of. Its job is to provide up-to-date documentation and code examples for whatever libraries you want your LLM to use. It’s really useful.
The interesting thing is that if you want to add context7 to Claude Desktop, you have to install it locally using npx:
{
"mcpServers": {
"Context7": {
"command": "npx",
"args": ["-y", "@upstash/context7-mcp"]
}
}
}
But if you want to add it to Claude Code (which I did), you have a choice. You can install it locally with a very similar command:
claude mcp add context7 -- npx -y @upstash/context7-mcp
or you can install it remotely:
claude mcp add --transport sse context7 https://mcp.context7.com/sse
You have to be connected to the internet (obviously) to use the remote server, but I presume that those docs are always up-to-date. The local version requires you to have npx
installed on your local machine, and I have no idea how often it changes versions or whether I’d have to update it myself or not.
I’ve been using MCP servers in Claude Desktop, which are all configured locally using JSON blocks as shown above. When Claude Code first announced it had MCP support, it introduced this nice little command:
claude mcp add-from-claude-desktop
which does exactly what it says. You can go through the various servers and approve them or not. Now, however, I can add MCP servers directly to Claude Code without going through the chrysalis stage of adding them to Claude Desktop first.
Then I discovered that Docker Desktop has a new capability, called Docker MCP Toolkit:
Under the Servers tab are the MCP servers I’ve already added, and under the Catalog are the ones that are available, all of which run through Docker.
(As the saying goes, every problem in computer science is solved by adding a layer of indirection. Here I’m going through the Docker Toolkit to avoid doing all that extra configuration in Docker Desktop.)
On the image, you can see the Clients tab, which shows there are only four already-configured clients they can set up for you. None of them are Claude Code. However, at the bottom it says to use “docker mcp gateway run” for other clients.
Therefore, I went back to Claude Code and ran this mouthful:
claude mcp add docker-mcp docker mcp gateway run
and, lo and behold, Claude Code suddenly had access to all the tools I’d enabled through the Docker Toolkit. Sweet.
(I was going to say “no daemons were harmed while chanting that incantation,” but that joke doesn’t quite work and I don’t want to overthink it.)
I’m definitely bringing that up in my Claude Code training course I’m running on July 2 on the O’Reilly Learning Platform, as well as demonstrating it in a video I hope to record this week.
Basketball
In case you weren’t aware:
I don’t have a preference, but Deb (our friend who is staying with us this weekend) is rooting for Indiana because one of their players attended college where she did. Kind of a reach, but so be it. I wouldn’t bet against OKC, though.
I should also mention I’m happy that Caitlin Clark is back from her injury and the Indiana Fever is winning again.
Never in my life did I expect to be so aware of two separate teams from Indiana.
Social Media
Normally I spend time browsing social media while writing this newsletter to see any clever posts I can use. Starting last night (Saturday), all my social accounts got very serious. Something (gee, I wonder what?) must have happened beyond the usual Trump insanity. Here, however, I’m going to follow the good media practice of not believing anything reported in the media about a major event during the first 24 hours.
Idols Indy wasn’t expecting
The account RiotGrlErin does beautiful things with images and media. Click on that post to see an assortment of idols Indy wasn’t expecting.
Define “work”
No, that’s not it. Maybe I should leave and come back again.
OCD Fridays
I tried to tell that gag to my wife and her friend Deb and messed it up. Serves me right, I guess.
Airplanes
Rimshot. There’s definitely a Pixar Cars joke in there somewhere, too, but I can’t quite find it.
I loved you most of all
Of course you were, Ned. Of course you were. (Hugs Ned)
Too good not to include
I was going to skip politics entirely this week, but that was too clever to ignore.
Wait, one more:
That’ll learn ‘em
Fine, one more:
Escort service
I’d watch that.
They’re made for each other
I think they’re off to a great start.
Good night
The best time to nap is yes.
I thought my user interfaces were bad
Keep walking, I guess.
Only what?
Lots of depth (ha!) to that gag.
One more Trek joke
Have a great week, everybody. :)
Last week:
Agent Wars II: The Wrath of Junie, on JetBrains Junie live stream
New video on how I finally understood what MCP is for
New blog post based on that video
This week:
Reactive Spring, on the O’Reilly Learning Platform