DZone
Thanks for visiting DZone today,
Edit Profile
  • Manage Email Subscriptions
  • How to Post to DZone
  • Article Submission Guidelines
Sign Out View Profile
  • Post an Article
  • Manage My Drafts
Over 2 million developers have joined DZone.
Log In / Join
Refcards Trend Reports
Events Video Library
Refcards
Trend Reports

Events

View Events Video Library

Related

  • Anthropic’s Model Context Protocol (MCP): A Developer’s Guide to Long-Context LLM Integration
  • Production Checklist for Tool-Using AI Agents in Enterprise Apps
  • Understanding MCP Architecture: LLM + API vs Model Context Protocol
  • Open-Source LLM Tools Worth Your Time

Trending

  • Detecting Bugs and Vulnerabilities in Java With SonarQube
  • 11 Agentic Testing Tools to Know in 2026
  • AI Agents in Java: Architecting Intelligent Health Data Systems
  • Bringing Intelligence Closer to the Source: Why Real-Time Processing is the Heart of Edge AI
  1. DZone
  2. Data Engineering
  3. AI/ML
  4. Enhance Development With DevoxxGenie and MCP

Enhance Development With DevoxxGenie and MCP

This blog provides a tutorial on how to integrate AI agents, specifically MCP agents, into your coding workflow using the DevoxxGenie plugin for JetBrains IDE.

By 
Gunter Rotsaert user avatar
Gunter Rotsaert
DZone Core CORE ·
Oct. 06, 25 · Tutorial
Likes (0)
Comment
Save
Tweet
Share
1.6K Views

Join the DZone community and get the full member experience.

Join For Free

Are you interested in adding AI agents to your coding workflow? In this blog, you will learn what MCP agents are and how you can integrate them into your coding workflow. DevoxxGenie will be used, which is a JetBrains IDE plugin supporting AI coding assistance. Enjoy!

Introduction

Using AI coding assistants can help you during development. One of the available AI coding assistants is DevoxxGenie, a plugin for the JetBrains IDEs. A killer feature of DevoxxGenie is the ability to work with local large language models (LLMs). You can interact with your code and an LLM this way without leaving your local environment, not sharing any code with external providers. 

But wouldn't it be great if you could extend the capabilities of an LLM? For example, if the LLM were able to execute tasks on your local machine, like creating files, updating files, running a build, etc. This is possible with the help of AI agents, small applications running on your local system. But how do they communicate with your LLM? This is where Model Context Protocol (MCP) comes into play. So, how does this work?

Consider DevoxxGenie to be the MCP client that sends a prompt (a question about your code) to an LLM.

  1. The MCP client must know about the available MCP servers. This means that DevoxxGenie must be aware of the MCP servers you are running or must know which MCP servers you want to be visible to DevoxxGenie. Every MCP server will list the tools it provides to DevoxxGenie.
  2. When a prompt is sent to the LLM, DevoxxGenie will include all of the available tools it is aware of in the prompt.
  3. The LLM receives the prompt and decides that it needs to invoke a tool in order to respond to the prompt correctly.
  4. The LLM finds a tool in the provided list and returns a request to DevoxxGenie to invoke the tool with the necessary arguments.
  5. DevoxxGenie sends this request to the correct MCP server, which will execute the request and respond (a success or failure response of a command, or data that has been asked to retrieve, ...).
  6. The response is sent back to the LLM, and the LLM can proceed with processing the prompt to generate a final response.

Maybe all of this still sounds a bit vague, but in the remainder of this blog, examples will be shown that will hopefully make it clearer.

Prerequisites

The prerequisites for reading this blog are:

  • Familiar with JetBrains IntelliJ IDE
  • Basic knowledge of Maven and Java;
  • Basic knowledge of DevoxxGenie, you can read a previous blog for more information (DevoxxGenie 0.6.9 is used in this blog)
  • Basic knowledge of LLMs, the Qwen3-8b model is used
  • Basic knowledge of LMStudio. The examples are executed with version 0.3.17 of LMStudio, which includes support for MCP interaction.

Configure MCP Java File System

When you take a look at the DevoxxGenie plugin settings, you see an entry, MCP Settings (BETA). Initially, MCP will be disabled. At the bottom, you see some information on how to get started with your first MCP server. As an example, the FileSystem MCP will be used. This MCP server is a pet project from the creator of DevoxxGenie, Stephan Jansen.

MCP Settings (BETA)


Navigate to the GitHub page and clone the repository.

Build the source code.

Shell
 
mvn clean verify


After a successful build, the jar-file is present in the target-directory.

Navigate to the DevoxxGenie plugin settings again and click the + sign in order to add an MCP server to DevoxxGenie. Enter the following:

  • Name: MCPJavaFileSystem
  • Transport Type: STDIO
  • Command: this must be the full path to your Java-installation (on Linux: which java will show you the full path)
  • Arguments (also here, the full path to the jar-file must be added):
    -Dspring.ai.mcp.server.stdio=true
    -Dspring.main.web-application-type=none
    -Dlogging.pattern.console=
    -jar
    /home/<full path>/MCPJavaFileSystem/target/devoxx-filesystem-0.0.1-SNAPSHOT.jar
The full path to the jar-file must be added


Click the button Test Connection and Fetch Tools to verify the correct configuration. If everything went well, the button caption changes into Connection Successful! 9 tools found.

Click the OK button and check Enable MCP Support and Enable MCP Logging.

Check Enable MCP Support and Enable MCP Logging


At the bottom right of the IDE, you see two new icons:

  • A tools icon
  • An MCP logs icon
Two new icons


The tools icon shows you the available MCP servers.

Tools icon


The Show All Tools button shows all available tools. This is a complete list of all tools of all enabled MCP servers.

All available tools


The MCP logs icon enables you to view MCP logs. This can be helpful in understanding what is going on in the background.

Viewing MCP logs


Search All Files

Now that the configuration is in place, it is time to actually use the MCP server. As an inference engine, LMStudio is used in combination with Qwen3-8b. It is important that you use an inference engine that supports MCP and also a model that supports tool calls. The combination of both determines how well tools call functions. The combination of LMStudio with Qwen3 seems to work very well.

Enter the prompt: "Show me all files in this repository."

In the LMStudio logs, you will notice that the available tools are sent to the LLM.

JSON
 
Received request: POST to /v1/chat/completions with body  {
  "model": "qwen3-8b",
  "messages": [
    {
      "role": "system",
      "content": "You are a software developer IDEA plugin with expe... <Truncated in logs> ...at is correct and relevant to the code or plugin.\n"
    },
    {
      "role": "user",
      "content": "<ProjectPath>\n/home/<project path>... <Truncated in logs> ...>\nlist all files in this directory\n</UserPrompt>\n\n"
    }
  ],
  "temperature": 0,
  "top_p": 0.9,
  "stream": false,
  "max_tokens": 8000,
  "tools": [
    {
      "type": "function",
      "function": {
        "name": "editFile",
        "description": "Make line-based edits to a text file. Each edit re... <Truncated in logs> ... \"oldText----newText\" where ---- is the separator\n",
        "parameters": {
          "type": "object",
          "properties": {
            "path": {
              "type": "string",
              "description": "The path to the file to edit"
            },
            "edits": {
              "type": "string",
              "description": "List of edits to apply, each containing oldText and newText"
            },
            "dryRun": {
              "type": "boolean",
              "description": "If true, only show diff without changing the file"
            }
          },
          "required": [
            "path",
            "edits"
          ]
        }
      }
    },
    ...


When the LLM requests an MCP call, DevoxxGenie will ask for your approval. A human-in-the-loop is very important in these agentic calls. You never know what an LLM will instruct the agent to do, especially when the agent supports destructive operations like deleting files, for example. You can disable this behavior in the settings, but it is strongly advised not to do so.

Approve MCP tool execution


As you can see, the LLM requests to execute the searchFiles tool with arguments path and pattern. Click the Approve button to continue. If you click the Deny button, the LLM will receive a failed response.

The response is, in the end, the following.

Java
 
Here is the file structure of the repository:

Core Project Files

pom.xml (Maven build configuration)
README.md (Project documentation)
Source Code

src/main/java/ (Main application code)
com/devoxx/mcp/filesystem/ (Core functionality)
McpServerApplication.java (Main entry point)
Various tool services (EditFile, FetchWebpage, GrepFiles, etc.)
src/main/resources/ (Configuration files)
application.properties
mcp-servers-config.json
Native image configuration for GraalVM
Test Files

src/test/java/ (Unit tests)
Corresponding test classes for all services
Integration tests for client tools (SSE, Stdio)
Version Control

.git/ (Git repository files)
Contains refs, objects, and configuration
IDE Configuration

.idea/ (IntelliJ IDEA project settings)
Includes workspace config, encodings, and VCS settings
This is a standard Maven project structure with Spring Boot components. The main application logic and services are implemented in the src/main/java directory, while tests reside in src/test/java.


The response is correct, maybe not as complete as expected, but certainly not wrong.

On another day, with the same prompt, the following response was returned.

Java
 
Here's an overview of the repository structure:

**1\. Git Repository Files**

*   `.git/` (version control metadata)
*   `.gitignore`
*   `README.md`

**2\. Source Code (`src/main/java`)**

*   Core application: `McpServerApplication.java`
*   Services:
    *   `AbstractToolService.java`
    *   `BashService.java`
    *   `EditFileService.java`
    *   `FetchWebpageService.java`
    *   `GrepFilesService.java`
    *   `ListDirectoryService.java`
    *   `ReadFileService.java`
    *   `SearchFilesService.java`
    *   `WriteFileService.java`
    *   `CreateDirectoryService.java`

**3\. Test Files (`src/test/java`)**

*   Service tests:
    *   `BashServiceTest.java`
    *   `CreateDirectoryServiceTest.java`
    *   `EditFileServiceTest.java`
    *   `FetchWebpageServiceTest.java`
    *   `GrepFilesServiceTest.java`
    *   `ListDirectoryServiceTest.java`
    *   `ReadFileServiceTest.java`
    *   `SearchFilesServiceTest.java`
    *   `WriteFileServiceTest.java`

**4\. Resources**

*   Configuration files:
    *   `application.properties`
    *   `mcp-servers-config.json`
*   Native image configuration:
    *   `native-image.properties`
    *   `reflect-config.json`
    *   `resource-config.json`

**5\. IDE Configuration**

*   `.idea/` (IntelliJ IDEA project settings)

**6\. Other Files**

*   `pom.xml` (Maven build configuration)
*   `mvnw`, `mvnw.cmd` (Maven wrapper)

Would you like to explore any specific part of this structure in more detail?


This is a complete response, except for the ClientSse and ClientStdio files.

Enter a follow-up prompt: "I want a complete list of the files in the test directory."

Again, it asks to invoke the MCP tool searchFiles, this time with the path of the test directory.

The response now includes all files. See this snippet from the response.

Plain Text
 
src/test/
├── java/
│   └── com/
│       └── devoxx/
│           └── mcp/
│               └── filesystem/
│                   ├── ClientSse.java
│                   ├── ClientStdio.java
│                   └── tools/
│                       ├── BashServiceTest.java
│                       ├── CreateDirectoryServiceTest.java
│                       ├── EditFileServiceTest.java
│                       ├── FetchWebpageServiceTest.java
│                       ├── GrepFilesServiceTest.java
│                       ├── ListDirectoryServiceTest.java
│                       ├── ReadFileServiceTest.java
│                       ├── SearchFilesServiceTest.java
│                       └── WriteFileServiceTest.java


Create Directory

Now, let's try to create a directory. Enter the prompt: "Create a directory temp in this repository."

Again, the LLM instructs to call a tool, the createDirectory tool, this time.

The directory is correctly created in the repository. Great!

Create File

Let's try to create a file.

Enter the prompt: "Create a file temp.txt in the temp directory."

This time, the tool writeFile is invoked, and the file is created in the temp directory.

Conclusion

In this blog, you learnt how to configure DevoxxGenie to use MCP servers. You also saw how an LLM is able to decide when to use an available tool. Now, think about the possibilities for your coding workflow. If an LLM is able to create, edit files and directories, code can be generated directly in your repository. You can check the diff, you can build the changes immediately, and so on.

Integrated development environment Tool large language model

Published at DZone with permission of Gunter Rotsaert. See the original article here.

Opinions expressed by DZone contributors are their own.

Related

  • Anthropic’s Model Context Protocol (MCP): A Developer’s Guide to Long-Context LLM Integration
  • Production Checklist for Tool-Using AI Agents in Enterprise Apps
  • Understanding MCP Architecture: LLM + API vs Model Context Protocol
  • Open-Source LLM Tools Worth Your Time

Partner Resources

×

Comments

The likes didn't load as expected. Please refresh the page and try again.

  • RSS
  • X
  • Facebook

ABOUT US

  • About DZone
  • Support and feedback
  • Community research

ADVERTISE

  • Advertise with DZone

CONTRIBUTE ON DZONE

  • Article Submission Guidelines
  • Become a Contributor
  • Core Program
  • Visit the Writers' Zone

LEGAL

  • Terms of Service
  • Privacy Policy

CONTACT US

  • 3343 Perimeter Hill Drive
  • Suite 215
  • Nashville, TN 37211
  • [email protected]

Let's be friends:

  • RSS
  • X
  • Facebook