<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Tools on Shaaf's blog</title><link>https://shaaf.dev/tags/tools/</link><description>Recent content in Tools on Shaaf's blog</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Tue, 14 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://shaaf.dev/tags/tools/index.xml" rel="self" type="application/rss+xml"/><item><title>Modernizing Legacy Code with Konveyor AI: From EJB to Kubernetes</title><link>https://shaaf.dev/post/2026-04-15-konveyor-ai-for-every-language-and-the-future-of-applications-modernization/</link><pubDate>Tue, 14 Apr 2026 00:00:00 +0000</pubDate><guid>https://shaaf.dev/post/2026-04-15-konveyor-ai-for-every-language-and-the-future-of-applications-modernization/</guid><description>&lt;p>I always enjoy participating in KubeCon. This time it was at the RAI center in Amsterdam. I have been to many conferences and the ones that are the best IMHO are the ones that are very community focused. For example DevNexus for Java, GeeCon for Geeks ;), and obviously KubeCon for everything Kubernetes. And obvsiouly making new friends and connections is a great way of learning from all the cool stuff thats going on. Thats probably enough name dropping for a wednesday ;)&lt;/p></description></item><item><title>Nano Agent, Mega Senses: Adding LSP to the 260-Line Coding Agent</title><link>https://shaaf.dev/post/2026-04-09-nano-agent-mega-senses-adding-lsp-to-the-260-line-coding-agent/</link><pubDate>Wed, 08 Apr 2026 00:00:00 +0000</pubDate><guid>https://shaaf.dev/post/2026-04-09-nano-agent-mega-senses-adding-lsp-to-the-260-line-coding-agent/</guid><description>&lt;p>Learn, learn, and learn more—that’s the name of the game. Coding agents are innovating fast; things are getting bigger and, quite often, bloated. To understand what an agent is actually doing, I’ve found it’s best to go back to the basics. It takes a bit more time, but the expertise you gain along the way sets you up for the long haul.&amp;quot; So here I read &lt;a href="https://xam.dk/blog/nanocode-coding-agent-in-260-lines-of-java/">Max&amp;rsquo;s&lt;/a> post and thought, how about add some more things to this. Fetching ideas&amp;hellip; done.. Lets add LSP support.&lt;/p></description></item><item><title>Using LLMs and MCP to generate static code analysis rules</title><link>https://shaaf.dev/post/2026-03-29-using-llms-and-mcp-to-generate-static-code-analysis-rules/</link><pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate><guid>https://shaaf.dev/post/2026-03-29-using-llms-and-mcp-to-generate-static-code-analysis-rules/</guid><description>&lt;blockquote>
&lt;p>&lt;strong>Scribe&lt;/strong> is a &lt;a href="https://modelcontextprotocol.io/">Model Context Protocol (MCP)&lt;/a> server that exposes a single tool: &lt;strong>&lt;code>executeKantraOperation&lt;/code>&lt;/strong>. That tool turns structured parameters into &lt;strong>YAML rules&lt;/strong> compatible with &lt;a href="https://konveyor.io/">Konveyor&lt;/a> / &lt;a href="https://github.com/konveyor/kantra">Kantra&lt;/a>—the static analysis pipeline used for application migration and modernization. This post describes what Scribe does, how it is wired, and concrete examples you can copy.&lt;/p>&lt;/blockquote>
&lt;p>Static code analyzers are great at what they do. Having the ability to write custom rules is important because it can cover multiple usecases such as, if an organization has their own framework or libraries that do not exist in the public domain. Or to look for patterns or anti-patterns or even best practises such as exceptions, logging etc. It can get quite cumbersome to write these rules and test them. While every conference in the world today buzzes of the word &lt;strong>AI&lt;/strong>, how about we put it to real practise and provide this valuable feature with LLMs. Hence the advent of Scribe MCP server that will write Konveyor Kantra rules for an LLM.&lt;/p></description></item><item><title>Adding Rust Support and Some Major updates to My Neovim Config</title><link>https://shaaf.dev/post/2026-03-09-neovim-rust-update/</link><pubDate>Mon, 09 Mar 2026 00:00:00 +0000</pubDate><guid>https://shaaf.dev/post/2026-03-09-neovim-rust-update/</guid><description>&lt;p>It&amp;rsquo;s been about 8 months since my &lt;a href="https://shaaf.dev/post/2025-07-17-neovim4java/">last update on neovim4j&lt;/a>, and the config has evolved significantly. The name &amp;ldquo;neovim4j&amp;rdquo; is now a bit of a misnomer—while it started as a Java-focused setup, it&amp;rsquo;s grown into a polyglot development environment.&lt;/p>
&lt;h2 id="rust-support-">Rust Support 🦀&lt;/h2>
&lt;p>The biggest addition is comprehensive &lt;strong>Rust support&lt;/strong>. I&amp;rsquo;ve integrated:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>rustaceanvim&lt;/strong> for advanced LSP features powered by rust-analyzer&lt;/li>
&lt;li>&lt;strong>crates.nvim&lt;/strong> for smart Cargo.toml management and dependency completion&lt;/li>
&lt;li>&lt;strong>codelldb&lt;/strong> debugger integration&lt;/li>
&lt;li>&lt;strong>neotest&lt;/strong> for running Rust tests directly in the editor&lt;/li>
&lt;/ul>
&lt;p>The Rust setup mirrors the Java tooling quality—full LSP, debugging, and testing all working seamlessly. Semantic highlighting is disabled in favor of Treesitter for more colorful syntax highlighting.&lt;/p></description></item><item><title>Neovim for Java Developers: A Match is made</title><link>https://shaaf.dev/post/2025-07-17-neovim4java/</link><pubDate>Thu, 17 Jul 2025 00:00:00 +0000</pubDate><guid>https://shaaf.dev/post/2025-07-17-neovim4java/</guid><description>&lt;blockquote>
&lt;p>There are some major changes to my setup. read the latest here: &lt;a href="https://shaaf.dev/post/2026-03-09-neovim-rust-update/">https://shaaf.dev/post/2026-03-09-neovim-rust-update/&lt;/a>&lt;/p>&lt;/blockquote>
&lt;p>Are you a Java developer who is mesmerized by the power and efficiency of Vim? Do you want to try your development experience to the next level? I mean hands-off the mouse style! If so, you&amp;rsquo;re in for a treat! In this post, I am going to dive into the world of &lt;a href="https://neovim.io/">Neovim&lt;/a> and explore how you can transform it into a Java IDE. To be honest its a learning journey. And the more I experience learning it, I feel like I really need to share how cool this thing really is!&lt;/p></description></item><item><title>Static Code analysis tutorial with Konveyor and Kantra part - 1</title><link>https://shaaf.dev/post/2025-07-15-static-code-analysis-for-java-with-konveyor-kantra-cli-1/</link><pubDate>Mon, 14 Jul 2025 00:00:00 +0000</pubDate><guid>https://shaaf.dev/post/2025-07-15-static-code-analysis-for-java-with-konveyor-kantra-cli-1/</guid><description>&lt;p>Konveyor Kantra CLI is a command-line tool for analyzing and transforming application source code to aid modernization and migration. It performs static code analysis to detect issues. Kantra can also extract metadata, generate deployment assets (e.g., Kubernetes manifests), and runs via containers or natively. It supports multiple languages e.g. Java, Go, .Net and Node.js and integrates with CI/CD pipelines. Kantra is the foundation for automated, LLM-powered app modernization workflows like &lt;em>&lt;a href="https://konveyor.io/components/kai/">Konveyor AI (Kai)&lt;/a>&lt;/em>.&lt;/p></description></item><item><title>A Keycloak example - building my first MCP server Tools with Quarkus</title><link>https://shaaf.dev/post/2025-05-12-keycloak-mcp-server-quarkus/</link><pubDate>Mon, 12 May 2025 00:00:00 +0000</pubDate><guid>https://shaaf.dev/post/2025-05-12-keycloak-mcp-server-quarkus/</guid><description>&lt;p>Recently I wrote an article about &amp;ldquo;&lt;a href="https://www.infoq.com/news/2025/05/mcp-within-java-ecosystem/">Adoption of the Model Context Protocol Within the Java Ecosystem&lt;/a>&amp;rdquo;. Now it was also time to start experimenting with writing an MCP Server myself (well maybe not the &lt;a href="https://youtu.be/LCzeb61bU9A?si=7mwaSEcaoEWuUB2z&amp;amp;t=5255">first time&lt;/a>).
Certainly I don&amp;rsquo;t want to be left out of all the cool things being demonstrated by the community. The goal for me is to learn, and creating perhaps a more practical example. In this post I am going to choose &lt;a href="https://www.keycloak.org/">Keycloak&lt;/a>, and write an experimental MCP server implementation for keycloak. The post is also to spark interest around this topic. Will it be useful to have an MCP server for Keycloak?&lt;/p></description></item></channel></rss>