From 8834ab4bb7e6bfd243bc582c8a988d348f99292b Mon Sep 17 00:00:00 2001 From: Max Rydahl Andersen Date: Wed, 29 Jan 2025 12:42:31 +0100 Subject: [PATCH] content and image --- _posts/2025-01-28-introducing-mcp-jdbc.adoc | 82 ------------- .../2025-01-29-introducing-mcp-servers.adoc | 108 ++++++++++++++++++ .../posts/mcpservers/mcp-jdbc-goose.png | Bin 0 -> 27020 bytes 3 files changed, 108 insertions(+), 82 deletions(-) delete mode 100644 _posts/2025-01-28-introducing-mcp-jdbc.adoc create mode 100644 _posts/2025-01-29-introducing-mcp-servers.adoc create mode 100644 assets/images/posts/mcpservers/mcp-jdbc-goose.png diff --git a/_posts/2025-01-28-introducing-mcp-jdbc.adoc b/_posts/2025-01-28-introducing-mcp-jdbc.adoc deleted file mode 100644 index 387d0b2af2f..00000000000 --- a/_posts/2025-01-28-introducing-mcp-jdbc.adoc +++ /dev/null @@ -1,82 +0,0 @@ ---- -layout: post -title: 'Introducing Model Context Protocol servers project' -date: 2025-01-28 -tags: ai -synopsis: Introducing the Model Context Protocol servers project which provides a set of MCP servers implemented using Quarkus and Java. Starting with JDBC, filesystem and JavaFX. -author: maxandersen ---- -:imagesdir: /assets/images/posts/mcpservers -ifdef::env-github,env-browser,env-vscode[:imagesdir: ../assets/images/posts/mcpservers] - -Today, I'm excited to introduce the Model Context Protocol (MCP) servers project. - -Model Context Protocol is the recent approach to enable AI models to interact with your applications and services in a nice decoupled way. - -There is already a lot of MCP servers implemented in other languages, but this project is as far as I know the first one to -provide a set of MCP servers implemented using Java and at least uniquely Quarkus. - -Intended to show-case the capabilities of the Model Context Protocol, and inspiration for what you can do with it - especially in Java. - -== The Servers - -At time of writing there are three servers implemented: - -JDBC:: Let your AI app introspect and interact to any JDBC-compatible database - -Filesystem:: Access the file system - -JavaFX:: Draw on a JavaFX canvas - -Each server is implemented using Quarkus and Java, and each server is available to easily run using JBang. - -== How to use the servers - -The general setup is to install JBang (no need for Java, Quarkus or any other Java tool installed). - -Then in your MCP client configure it with: - -`jbang [server-name]@quarkiverse/quarkus-mcp-servers [arguments]` - -Thus for example to run the JDBC server to connect to a MariaDB database you would do: - -`jbang mcp-jdbc-server@quarkiverse/quarkus-mcp-servers jdbc:mariadb://localhost:3306/test --user root --password mysecretpassword` - -and if you use a client that is compatible with Claude Desktop config this is how it would look for enabling all the servers: - -```json -{ - "mcpServers": { - "jdbc": { - "command": "jbang", - "args": [ - "jdbc@quarkiverse/quarkus-mcp-servers", - "jdbc:sqlite:%{https://github.com/jpwhite3/northwind-SQLite3/raw/refs/heads/main/dist/northwind.db}" - ] - }, - "jfx": { - "command": "jbang", - "args": [ - "jfx@quarkiverse/quarkus-mcp-servers" - ] - }, - "files": { - "command": "/jbang", - "args": [ - "filesystem@quarkiverse/quarkus-mcp-servers", - "~/code/quarkusio/quarkus", - "~/code/jbangdev/jbang", - ] - } - } -} -``` - -There are more examples for each server in their respective README files. - -== Conclusion - -This project is a fun way to show-case the capabilities of the Model Context Protocol, and inspiration for what you can do with it - especially in Java. - -I hope you will find it useful and fun to play with. - diff --git a/_posts/2025-01-29-introducing-mcp-servers.adoc b/_posts/2025-01-29-introducing-mcp-servers.adoc new file mode 100644 index 00000000000..2cf6d64f01d --- /dev/null +++ b/_posts/2025-01-29-introducing-mcp-servers.adoc @@ -0,0 +1,108 @@ +--- +layout: post +title: 'Introducing Model Context Protocol servers project' +date: 2025-01-29 +tags: ai +synopsis: Introducing the Model Context Protocol servers project which provides a set of MCP servers implemented using Quarkus and Java. Starting with JDBC, filesystem and JavaFX. +author: maxandersen +--- +:imagesdir: /assets/images/posts/mcpservers +ifdef::env-github,env-browser,env-vscode[:imagesdir: ../assets/images/posts/mcpservers] + +Today, I'm excited to introduce the Model Context Protocol (MCP) servers project. + +Model Context Protocol is the recent approach to enable AI models to interact with your applications and services in a nice decoupled way. + +The https://github.com/quarkiverse/quarkus-mcp-servers[mcp-servers] project is as far as I know the first one to provide a set of MCP servers implemented using Java and at least uniquely Quarkus. + +Intended to show-case the capabilities of the Model Context Protocol, and inspiration for what you can do with it - especially in Java. + +== The Servers + +At time of writing there are three servers implemented: + +JDBC:: Let your AI app introspect and interact to any JDBC-compatible database, let it be PostgreSQL, MySQL, MariaDB, SQLite, Oracle, etc. image:https://github.com/quarkiverse/quarkus-mcp-servers/raw/main/jdbc/images/jdbc-trends-demo.png[JDBC server] + +Filesystem:: Access the file system of your machine, let it be your home directory, your code directory, your project directory, etc. image:https://github.com/quarkiverse/quarkus-mcp-servers/raw/main/filesystem/images/filesystem-demo.png[Filesystem server] + +JavaFX:: Draw on a JavaFX canvas, get your AI to draw some art for you! image:https://github.com/quarkiverse/quarkus-mcp-servers/raw/main/jfx/images/jfx-demo.png[JavaFX server] + +Each server is implemented using Quarkus and Java, and each server is available to easily run using JBang. No need for user to install Java, Quarkus or any other Java tool. + +== How to use the servers + +The general setup is to install https://jbang.dev/download/[JBang], preferably using a package manager as then desktop apps are more likely to find `jbang` in the PATH. + +Then in your MCP client configure it with: + +`jbang [server-name]@quarkiverse/quarkus-mcp-servers [arguments]` + +For example to run the JDBC server to connect to a MariaDB database you would do: + +`jbang mcp-jdbc-server@quarkiverse/quarkus-mcp-servers jdbc:mariadb://localhost:3306/test --user root --password mysecretpassword` + +or use a downlodable SQLite database of Netflix movies: + +`jbang mcp-jdbc-server@quarkiverse/quarkus-mcp-servers jdbc:sqlite:%{https://github.com/lerocha/netflixdb/releases/download/v1.0.0/netflixdb.sqlite}` + +TIP: Tthe `%{}` syntax is a JBang feature to download a file from a URL in the command line and use it as a local file. + +Similar there is `jbang jfx@quarkiverse/quarkus-mcp-servers` to draw on a JavaFX canvas, and `jbang filesystem@quarkiverse/quarkus-mcp-servers [path]` to access the file system. + +== Tested MCP Clients + +During development we tested the servers with the following clients: + +* Claude Desktop +* mcp-cli +* Goose + +There are more MCP clients out there, and we're sure that the servers will work with many more. + +Goose is noteworthy given it is opensource and available both as a desktop app (on MacOS) and as a cli tool. It was https://block.github.io/goose/docs/quickstart/[recently announced] with full support for the Model Context Protocol. + +Here I configured Goose to use the SQLLite database from the Northwind sample database with this setup stored in `~/.config/goose/config.yaml`: + +```yaml +extensions: + netflixdb: + args: + - jdbc@quarkiverse/quarkus-mcp-servers + - jdbc:sqlite:%{https://github.com/lerocha/netflixdb/releases/download/v1.0.0/netflixdb.sqlite} + cmd: jbang + enabled: true + envs: {} + name: netflixdb + type: stdio +``` + +Note: we do recommend to use `goose config` to generate/edit the config file. + +With the above config Goose will be able to use the JDBC server to connect to the SQLLite database: + +image::mcp-jdbc-goose.png[Goose using the JDBC server to connect to the SQLLite database] + +== Unique features for Quarkus MCP Servers + +All that is great, but why use Quarkus for implementing the MCP servers? + +First is that the programming model provided by Quarkus is very powerful, allowing you to easily focus on the business logic of your application. See https://quarkus.io/blog/mcp-server/[previous blog] for details on how to implement a server or look at the https://github.com/quarkiverse/quarkus-mcp-servers/blob/main/jdbc/src/main/java/io/quarkus/mcp/servers/jdbc/MCPServerJDBC.java[code of the JDBC servers]. Notice how compact it is! + +Second, is the wast Java ecosystem provides things like JDBC drivers which enables us to make a single server that works with any JDBC-compatible database. We use `jbang` to dynamically download https://github.com/quarkiverse/quarkus-mcp-servers/blob/main/jdbc/.scripts/mcpjdbc.java[the right JDBC driver] and then launch the quarkus mcp server. Similar is done for `jfx` to https://github.com/quarkiverse/quarkus-mcp-servers/blob/main/jbang-catalog.json#L34[fetch] the right OS specific JavaFX dependencies. + +Thirdly, ability to run the servers as a native executable. In the MCP servers project the `filesystem` server is https://github.com/quarkiverse/quarkus-mcp-servers/releases[published as a native executable] you can download and gain a much faster startup time. + +== Sky is the limit! + +The Model Context Protocol opens up exciting possibilities for building intelligent applications using your application data with your favourite programming language and framework. With Quarkus MCP Servers, you have a powerful foundation to create your own Java based servers that can bridge AI with any data source or system you can imagine. + +Whether you want to connect to your favorite database, integrate with your company's internal systems, or build something completely new - the sky truly is the limit! The simplicity of implementing MCP servers with Quarkus means you can focus on the creative aspects rather than the plumbing. + +We'd love to see what you build! Leave a comment or consider contributing your MCP servers back to the community through the https://github.com/quarkiverse/quarkus-mcp-servers[Quarkiverse MCP Servers project]. Your implementation could help others solve similar problems or inspire them to create something even more amazing. + +So what are you waiting for? Grab the code, fire up your IDE, and start building your own MCP server today. The future of AI-powered applications is here, and you can be part of shaping it! + +Have Fun! + +p.s. Next week on Thursday February 6th we're hosting a https://quarkus.io/insights/[MCP server Insights] where we will discuss the MCP server and client SDK's in Quarkus project and how you can use it to build your own MCP servers and extend your AI infused applications. + diff --git a/assets/images/posts/mcpservers/mcp-jdbc-goose.png b/assets/images/posts/mcpservers/mcp-jdbc-goose.png new file mode 100644 index 0000000000000000000000000000000000000000..d4aafbec2a6424a3c7e991d6e7ef81f26db16d56 GIT binary patch literal 27020 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

<&!%keT;flsU*`xx%b9%u&} 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 KT)B+N=l=zY|6-j0 literal 0 HcmV?d00001