This is an automated email from the ASF dual-hosted git repository.

acosentino pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-website.git


The following commit(s) were added to refs/heads/main by this push:
     new 429ae9f4 Adding a blog post introducing the camel-jbang-mcp server 
(#1505)
429ae9f4 is described below

commit 429ae9f45f66f8a0e4db3352dc8c0d338e5e4e50
Author: Andrea Cosentino <[email protected]>
AuthorDate: Tue Feb 10 11:45:15 2026 +0100

    Adding a blog post introducing the camel-jbang-mcp server (#1505)
    
    * Adding a blog post introducing the camel-jbang-mcp server
    
    Signed-off-by: Andrea Cosentino <[email protected]>
    
    * Adding a blog post introducing the camel-jbang-mcp server
    
    Signed-off-by: Andrea Cosentino <[email protected]>
    
    ---------
    
    Signed-off-by: Andrea Cosentino <[email protected]>
---
 content/blog/2026/02/camel-jbang-mcp/featured.png | Bin 0 -> 243818 bytes
 content/blog/2026/02/camel-jbang-mcp/index.md     | 486 ++++++++++++++++++++++
 2 files changed, 486 insertions(+)

diff --git a/content/blog/2026/02/camel-jbang-mcp/featured.png 
b/content/blog/2026/02/camel-jbang-mcp/featured.png
new file mode 100644
index 00000000..a9a95d3b
Binary files /dev/null and b/content/blog/2026/02/camel-jbang-mcp/featured.png 
differ
diff --git a/content/blog/2026/02/camel-jbang-mcp/index.md 
b/content/blog/2026/02/camel-jbang-mcp/index.md
new file mode 100644
index 00000000..beac9dd6
--- /dev/null
+++ b/content/blog/2026/02/camel-jbang-mcp/index.md
@@ -0,0 +1,486 @@
+---
+title: "Apache Camel MCP Server: Bringing Camel Knowledge to AI Coding 
Assistants"
+date: 2026-02-10
+draft: false
+authors: [ oscerd ]
+categories: [ "Camel", "AI", "Tooling" ]
+preview: "Introducing the Camel MCP Server, a Model Context Protocol server 
that exposes the full Camel Catalog, route validation, security analysis, and 
more to AI coding assistants like Claude Code, OpenAI Codex, and others."
+---
+
+Working with Apache Camel means dealing with over 300 components, dozens of 
Enterprise Integration Patterns, multiple DSL formats, and a rich set of 
configuration options. Keeping all of that in your head while writing 
integration routes is not trivial, and AI coding assistants have become a 
natural companion for this kind of work. The problem is that general-purpose 
LLMs lack deep, structured knowledge of Camel's catalog, its component options, 
its URI syntax rules, and its security bes [...]
+
+Apache Camel 4.18 addresses this gap with a dedicated MCP (Model Context 
Protocol) server: `camel-jbang-mcp`. This server exposes the Camel Catalog and 
a set of specialized tools through the [Model Context 
Protocol](https://modelcontextprotocol.io/), the open standard that allows AI 
assistants to call external tools. Instead of relying on the LLM's training 
data (which may be outdated or incomplete), the AI can query the live Camel 
Catalog, validate endpoint URIs against the real schema, [...]
+
+In this post we will walk through what the MCP server offers, how to set it up 
with different AI assistants, and practical examples of interacting with the 
tools it provides.
+
+## What the MCP Server Exposes
+
+The server is built on [Quarkus](https://quarkus.io/) with the 
[quarkus-mcp-server](https://docs.quarkiverse.io/quarkus-mcp-server/dev/index.html)
 extension and supports two transports: STDIO for direct integration with 
CLI-based AI tools, and HTTP/SSE for web-based clients and remote scenarios. It 
ships as a single uber-JAR that can be launched via JBang.
+
+The server exposes 13 tools organized into six functional areas:
+
+### Catalog Exploration
+
+- **`camel_catalog_components`** -- List available Camel components with 
filtering by name, label (e.g., `messaging`, `cloud`, `database`), and runtime 
type (`main`, `spring-boot`, `quarkus`). Supports querying specific Camel 
versions.
+- **`camel_catalog_component_doc`** -- Get full documentation for a specific 
component including all endpoint options, component-level options, Maven 
coordinates, and URI syntax.
+- **`camel_catalog_dataformats`** -- List available data formats (JSON, XML, 
CSV, Avro, Protobuf, and others).
+- **`camel_catalog_languages`** -- List expression languages (Simple, 
JsonPath, XPath, JQ, Groovy, and others).
+- **`camel_catalog_eips`** -- List Enterprise Integration Patterns with 
filtering by category.
+- **`camel_catalog_eip_doc`** -- Get detailed documentation for a specific EIP 
including all its options.
+
+### Kamelet Catalog
+
+- **`camel_catalog_kamelets`** -- List available Kamelets from the Kamelet 
Catalog with filtering by name, description, and type (`source`, `sink`, 
`action`). Supports querying specific Kamelets catalog versions.
+- **`camel_catalog_kamelet_doc`** -- Get detailed documentation for a specific 
Kamelet including all properties/options, their types, defaults, examples, and 
the Kamelet's Maven dependencies.
+
+### Route Understanding
+
+- **`camel_route_context`** -- Given a Camel route (YAML, XML, or Java DSL), 
extracts all components and EIPs used, looks up their documentation from the 
catalog, and returns structured context. This is what allows the AI to provide 
accurate explanations of routes it has never seen before.
+
+### Security Analysis
+
+- **`camel_route_harden_context`** -- Analyzes a route for security concerns. 
Identifies security-sensitive components (47 components are tracked, from 
`http` and `kafka` to `exec` and `docker`), assigns risk levels, detects issues 
like hardcoded credentials or plain-text protocols, and returns structured 
security findings alongside best practices.
+
+### Validation and Transformation
+
+- **`camel_validate_route`** -- Validates Camel endpoint URIs against the 
catalog schema. Catches unknown options, missing required parameters, invalid 
enum values, and type mismatches. Also provides suggestions for misspelled 
option names.
+- **`camel_transform_route`** -- Assists with route DSL format transformation 
between YAML and XML.
+
+### Version Management
+
+- **`camel_version_list`** -- Lists available Camel versions for a given 
runtime, including release dates, JDK requirements, and LTS status.
+
+## Setting Up the MCP Server
+
+The MCP server is distributed as a Quarkus uber-JAR. You can run it via JBang, 
which means you need JBang installed and available on your PATH.
+
+Until the release will be done, you could use the 4.18.0-SNAPSHOT version of 
the runner.
+
+### Claude Code
+
+[Claude Code](https://docs.anthropic.com/en/docs/claude-code/overview) 
supports MCP servers through its configuration file. Add the following to your 
project's `.mcp.json` (or `~/.claude/mcp.json` for global configuration):
+
+```json
+{
+  "mcpServers": {
+    "camel": {
+      "command": "jbang",
+      "args": [
+        "-Dquarkus.log.level=WARN",
+        "org.apache.camel:camel-jbang-mcp:4.18.0:runner"
+      ]
+    }
+  }
+}
+```
+
+After saving this file, Claude Code will automatically start the MCP server 
and make all 11 tools available during your session.
+
+### OpenAI Codex
+
+For [OpenAI Codex](https://openai.com/index/codex/), you need to configure the 
MCP server in the `codex-config.json` or through the CLI setup. Add the server 
to your MCP configuration:
+
+```json
+{
+  "mcpServers": {
+    "camel": {
+      "command": "jbang",
+      "args": [
+        "-Dquarkus.log.level=WARN",
+        "org.apache.camel:camel-jbang-mcp:4.18.0:runner"
+      ]
+    }
+  }
+}
+```
+
+### VS Code with Copilot
+
+In VS Code, you can configure MCP servers in your `.vscode/mcp.json` or in the 
user settings:
+
+```json
+{
+  "servers": {
+    "camel": {
+      "command": "jbang",
+      "args": [
+        "-Dquarkus.log.level=WARN",
+        "org.apache.camel:camel-jbang-mcp:4.18.0:runner"
+      ]
+    }
+  }
+}
+```
+
+### JetBrains IDEs
+
+JetBrains IDEs support MCP servers starting from 2025.1. You can configure 
them in Settings > Tools > AI Assistant > MCP Servers, or create an 
`.junie/mcp.json` file in your project root:
+
+```json
+{
+  "mcpServers": {
+    "camel": {
+      "command": "jbang",
+      "args": [
+        "-Dquarkus.log.level=WARN",
+        "org.apache.camel:camel-jbang-mcp:4.18.0:runner"
+      ]
+    }
+  }
+}
+```
+
+### Generic STDIO-based MCP Clients
+
+Any MCP client that supports the STDIO transport can use the server. The 
launch command is:
+
+```shell
+jbang org.apache.camel:camel-jbang-mcp:4.18.0:runner
+```
+
+The server communicates over stdin/stdout using the MCP protocol and logs to 
stderr to avoid interfering with the protocol messages.
+
+### HTTP/SSE Transport
+
+In addition to STDIO, the server also includes the `quarkus-mcp-server-http` 
dependency, which means it supports the HTTP/SSE (Server-Sent Events) 
transport. This is useful when you want to run the MCP server as a standalone 
service, for example on a shared development machine, in a container, or behind 
a reverse proxy, and have multiple clients connect to it remotely.
+
+To start the server with the HTTP transport enabled:
+
+```shell
+jbang -Dquarkus.http.host-enabled=true -Dquarkus.http.port=8080 
org.apache.camel:camel-jbang-mcp:4.18.0:runner
+```
+
+MCP clients that support HTTP/SSE can then connect to the server at 
`http://localhost:8080/mcp/sse`. This makes it possible to share a single Camel 
MCP Server instance across a team, or to integrate it into web-based 
development environments that do not support STDIO-based tools.
+
+## Practical Examples
+
+Let's walk through some real interactions that show what the MCP server 
enables.
+
+### Discovering Components
+
+Suppose you want to find all Camel components related to messaging. You can 
prompt your AI assistant with:
+
+> "List all Camel components in the messaging category"
+
+The assistant calls the `camel_catalog_components` tool with `label=messaging` 
and gets back structured results:
+
+```json
+{
+  "count": 15,
+  "camelVersion": "4.18.0",
+  "components": [
+    {
+      "name": "kafka",
+      "title": "Kafka",
+      "description": "Sent and receive messages to/from an Apache Kafka 
broker.",
+      "label": "messaging",
+      "deprecated": false,
+      "supportLevel": "Stable"
+    },
+    {
+      "name": "jms",
+      "title": "JMS",
+      "description": "Sent and receive Jakarta Messaging messages to a JMS 
Queue or Topic.",
+      "label": "messaging",
+      "deprecated": false,
+      "supportLevel": "Stable"
+    },
+    {
+      "name": "amqp",
+      "title": "AMQP",
+      "description": "Messaging with AMQP protocol using Apache QPid Client.",
+      "label": "messaging",
+      "deprecated": false,
+      "supportLevel": "Stable"
+    }
+  ]
+}
+```
+
+The assistant can then present this information in a clear, conversational 
way, and you can drill down into any specific component.
+
+### Getting Component Documentation
+
+When you need the exact syntax and available options for a component, ask:
+
+> "Show me the documentation for the Kafka component, including all endpoint 
options"
+
+The assistant calls `camel_catalog_component_doc` with `component=kafka` and 
receives the full component model, including the URI syntax (`kafka:topic`), 
Maven coordinates, and every single endpoint option with types, defaults, and 
descriptions. This is the same information you'd find on the Camel website, but 
delivered directly into your coding session.
+
+### Browsing Kamelets
+
+Kamelets are pre-built integration connectors that abstract away the 
complexity of configuring individual components. The MCP server gives the AI 
direct access to the Kamelet Catalog, which is especially useful when you want 
to wire together sources and sinks without dealing with low-level component 
options.
+
+> "Show me all available source kamelets related to AWS"
+
+The assistant calls `camel_catalog_kamelets` with `type=source` and 
`filter=aws`:
+
+```json
+{
+  "count": 5,
+  "kameletsVersion": "4.18.0",
+  "kamelets": [
+    {
+      "name": "aws-cloudwatch-sink",
+      "type": "sink",
+      "supportLevel": "Stable",
+      "description": "Send metrics to AWS CloudWatch."
+    },
+    {
+      "name": "aws-s3-source",
+      "type": "source",
+      "supportLevel": "Stable",
+      "description": "Receive data from an Amazon S3 Bucket."
+    },
+    {
+      "name": "aws-sqs-source",
+      "type": "source",
+      "supportLevel": "Stable",
+      "description": "Receive data from AWS SQS."
+    }
+  ]
+}
+```
+
+You can then drill into a specific Kamelet to get the full documentation:
+
+> "What options does the aws-s3-source kamelet accept?"
+
+The assistant calls `camel_catalog_kamelet_doc` with `kamelet=aws-s3-source` 
and returns the complete property list:
+
+```json
+{
+  "name": "aws-s3-source",
+  "type": "source",
+  "supportLevel": "Stable",
+  "description": "Receive data from an Amazon S3 Bucket.",
+  "options": [
+    {
+      "name": "bucketNameOrArn",
+      "description": "The S3 Bucket name or Amazon Resource Name (ARN).",
+      "type": "string",
+      "required": true,
+      "defaultValue": null,
+      "example": null,
+      "enumValues": null
+    },
+    {
+      "name": "region",
+      "description": "The AWS region to access.",
+      "type": "string",
+      "required": true,
+      "defaultValue": null,
+      "example": null,
+      "enumValues": null
+    },
+    {
+      "name": "deleteAfterRead",
+      "description": "Specifies to delete objects after consuming them.",
+      "type": "boolean",
+      "required": false,
+      "defaultValue": "true",
+      "example": null,
+      "enumValues": null
+    }
+  ],
+  "dependencies": [
+    "camel:aws2-s3",
+    "camel:kamelet"
+  ]
+}
+```
+
+This gives the AI the exact parameter names, types, and which ones are 
required, so it can generate correct Kamelet bindings and Pipe definitions 
without guessing.
+
+### Validating an Endpoint URI
+
+A common source of errors in Camel routes is a typo in an endpoint URI or 
using an option that does not exist. You can ask:
+
+> "Validate this Kafka endpoint: 
`kafka:myTopic?brkers=localhost:9092&groupId=myGroup`"
+
+The assistant calls `camel_validate_route` with the URI and gets:
+
+```json
+{
+  "uri": "kafka:myTopic?brkers=localhost:9092&groupId=myGroup",
+  "valid": false,
+  "errors": {
+    "unknownOptions": "brkers"
+  },
+  "suggestions": {
+    "brkers": "brokers"
+  }
+}
+```
+
+The tool not only catches the typo but also suggests the correct option name. 
This is especially useful for components with many options (Kafka alone has 
over 100 endpoint parameters).
+
+### Understanding a Route
+
+Paste a route into your AI assistant and ask for an explanation:
+
+> "Explain what this route does"
+
+```yaml
+- route:
+    from:
+      uri: kafka:orders
+      parameters:
+        brokers: localhost:9092
+        groupId: order-processor
+    steps:
+      - choice:
+          when:
+            - simple: "${header.orderType} == 'priority'"
+              steps:
+                - to: direct:priority-processing
+          otherwise:
+            steps:
+              - to: direct:standard-processing
+      - marshal:
+          json:
+            library: jackson
+      - to:
+          uri: aws2-s3:processed-orders
+          parameters:
+            region: eu-west-1
+```
+
+The assistant calls `camel_route_context` with this route. The tool extracts 
the components (`kafka`, `direct`, `aws2-s3`) and the EIPs (`choice`, `when`, 
`otherwise`, `marshal`) used, looks up their documentation, and returns it all 
in a structured payload. The assistant can then use this enriched context to 
provide an accurate explanation, rather than guessing based on its training 
data.
+
+### Security Hardening
+
+Security analysis is where the MCP server really shines. Pass a route and ask:
+
+> "Analyze this route for security concerns and suggest hardening measures"
+
+```yaml
+- route:
+    from:
+      uri: "http://api.partner.com/orders";
+      parameters:
+        password: s3cret123
+    steps:
+      - to: "sql:INSERT INTO orders VALUES (:#id, :#name)"
+      - to: "ftp://files.internal.net/archive";
+```
+
+The assistant calls `camel_route_harden_context` and receives a detailed 
analysis:
+
+```json
+{
+  "securitySensitiveComponents": [
+    {
+      "name": "http",
+      "riskLevel": "high",
+      "securityConsiderations": "Prefer HTTPS over HTTP. Validate 
certificates. Configure appropriate timeouts. Set security headers."
+    },
+    {
+      "name": "sql",
+      "riskLevel": "high",
+      "securityConsiderations": "Use parameterized queries to prevent SQL 
injection. Limit database user privileges. Enable connection encryption."
+    },
+    {
+      "name": "ftp",
+      "riskLevel": "high",
+      "securityConsiderations": "INSECURE: Use SFTP or FTPS instead. Plain FTP 
transmits credentials in cleartext."
+    }
+  ],
+  "securityAnalysis": {
+    "concerns": [
+      {
+        "severity": "critical",
+        "category": "Secrets Management",
+        "issue": "Potential hardcoded credentials detected",
+        "recommendation": "Use property placeholders {{secret}} or vault 
services for credentials"
+      },
+      {
+        "severity": "high",
+        "category": "Encryption",
+        "issue": "Using HTTP instead of HTTPS",
+        "recommendation": "Use HTTPS for secure communication. Configure TLS 
version 1.2 or higher"
+      },
+      {
+        "severity": "high",
+        "category": "Encryption",
+        "issue": "Using plain FTP instead of SFTP/FTPS",
+        "recommendation": "Use SFTP or FTPS for encrypted file transfers"
+      }
+    ],
+    "positives": [],
+    "concernCount": 3,
+    "positiveCount": 0
+  },
+  "summary": {
+    "securityComponentCount": 3,
+    "criticalRiskComponents": 0,
+    "highRiskComponents": 3,
+    "hasExternalConnections": true,
+    "hasSecretsManagement": false,
+    "usesTLS": false,
+    "hasAuthentication": false
+  }
+}
+```
+
+The tool catches three issues: hardcoded credentials, HTTP instead of HTTPS, 
and plain FTP instead of SFTP/FTPS. Note that the SQL component actually uses 
parameterized queries correctly (the `:#id` and `:#name` syntax), so no SQL 
injection concern is flagged. This kind of context-aware analysis goes beyond 
what a generic AI can do on its own.
+
+### Checking Camel Versions
+
+When planning upgrades or checking compatibility:
+
+> "What are the latest LTS versions of Camel for Spring Boot?"
+
+The assistant calls `camel_version_list` with `runtime=spring-boot` and 
`lts=true`:
+
+```json
+{
+  "count": 3,
+  "versions": [
+    {
+      "camelVersion": "4.18.0",
+      "runtime": "spring-boot",
+      "runtimeVersion": "3.5.10",
+      "jdkVersion": "17",
+      "kind": "lts",
+      "releaseDate": "2026-03-01",
+      "eolDate": "2027-03-01"
+    },
+    {
+      "camelVersion": "4.8.0",
+      "runtime": "spring-boot",
+      "runtimeVersion": "3.4.1",
+      "jdkVersion": "17",
+      "kind": "lts",
+      "releaseDate": "2025-01-15",
+      "eolDate": "2026-01-15"
+    }
+  ]
+}
+```
+
+This makes upgrade planning straightforward since you get release dates, 
end-of-life dates, and JDK requirements in one shot.
+
+## Architecture Notes
+
+A few technical details worth noting:
+
+- **Dual transport support**: The server ships with both STDIO and HTTP/SSE 
transports. The STDIO transport is what CLI-based AI tools like Claude Code and 
Codex expect, and is the default mode. The HTTP/SSE transport (provided by 
`quarkus-mcp-server-http`) opens the door to browser-based clients, remote 
access, and integration with web applications that speak the MCP protocol over 
Server-Sent Events. By default the HTTP server is disabled for clean STDIO 
operation, but you can enable it [...]
+- **Uber-JAR packaging**: The server is packaged as a Quarkus uber-JAR, which 
means a single `java -jar` (or `jbang`) command starts everything. No 
application server, no container required.
+- **Catalog accuracy**: All catalog queries go through `DefaultCamelCatalog`, 
the same catalog that powers the Camel website documentation and IDE plugins. 
This means the data is always consistent with the Camel release you are 
querying.
+- **Runtime-aware queries**: The catalog tools support runtime-specific 
queries. Component availability differs between Camel Main, Spring Boot, and 
Quarkus runtimes, and the server handles this transparently.
+- **Version-specific queries**: You can query the catalog for any released 
Camel version, not just the one the server was built with. This is useful when 
working on projects that use older Camel versions.
+
+## What Comes Next
+
+This is the first release of the Camel MCP Server, and we are marking it as 
Preview. There are several directions we are considering for future iterations:
+
+- **Live Camel context access**: Connecting the MCP server to a running Camel 
application to expose runtime information, live route statistics, and health 
checks to the AI assistant.
+- **Recipe-driven upgrades**: Providing structured upgrade guidance through 
the MCP server, powered by the [Camel Upgrade 
Recipes](https://github.com/apache/camel-upgrade-recipes) project.
+- **Custom catalog overlays**: Supporting organizational catalogs that extend 
the standard Camel catalog with custom components and policies.
+
+We would like to hear from the community about which of these directions would 
be most valuable, and what other use cases you see for AI-assisted Camel 
development. The MCP specification is evolving, and as new capabilities land 
(like resource subscriptions and sampling), we plan to adopt them.
+
+If you build something interesting with the Camel MCP Server, or if you 
integrate it with an AI tool that we have not covered here, please share your 
experience on the Apache Camel [mailing list](mailto:[email protected]) or 
join us on [Zulip chat](https://camel.zulipchat.com/).
+
+Happy integrating!

Reply via email to