Roadmap: what you can build today, and what comes next
Cameleer ships an integration engine: routes, about 230 connectors, the Enterprise Integration Patterns and the languages. Some things agent and serverless teams want don't exist as packaged components yet. This page covers two things:
- Build it on the engine today: how to assemble each missing piece from what already ships. These are patterns, not shipped features; the sketches show the route shape, and you fill in names, URIs and credentials.
- Enhancement opportunities: what we intend to package or improve, with the evidence behind each item.
Status labels: โ available ยท ๐งฉ build it from existing components (pattern below) ยท ๐ง not yet.
1. Build it on the engine today
1.1 Agent tool server (MCP-style) ๐งฉ
Goal: an agent calls named tools over HTTP, and each tool is a route with retries, timeouts and idempotency.
How: one platform-http route receives tool calls and dispatches them by name to a direct:
route per tool with toD. Each tool route is ordinary Camel: error handling, idempotent consumer,
circuit breaker. A second endpoint returns the tool list (a static JSON body, or one built from route
descriptions). Full MCP protocol support (JSON-RPC sessions, tools/list schemas) is the packaged
version on the roadmap (2.1).
# sketch: a tool endpoint dispatching to one route per tool
- route:
id: agent-tools
from:
uri: platform-http:/tools/call
steps:
- setHeader:
name: tool
jsonpath: "$.name"
- setBody:
jsonpath: "$.arguments"
- toD: "direct:tool-${header.tool}"
- route:
id: tool-refund
from:
uri: direct:tool-refund
steps:
- idempotentConsumer:
jsonpath: "$.orderId"
steps:
- to: "http://payments.internal/refunds?httpMethod=POST"1.2 Tool-calling agent loop ๐งฉ
Goal: let the model choose tools until it has an answer.
How:
azure-openaireturns the model's tool calls in headers.- A
loop(withdoWhile) calls the model, useschoiceto stop when there are no more tool calls, and runs the requested tools withrecipientListortoDto theirdirect:routes. - An aggregation strategy appends each tool result to the message list for the next turn.
Keep the turn count bounded with the loop's count limit, and the cost bounded with throttle. The
openai and aws-bedrock components don't pass tool definitions yet (2.1).
1.3 Vector store ingestion and retrieval ๐งฉ
Goal: store embeddings and query them for RAG.
How:
- Embed with
openai:embeddings,aws-bedrock(invokeEmbeddingsModel) orgoogle-vertexai(generateEmbeddings). - Store them with what already ships:
- PostgreSQL with pgvector through the
sqlcomponent: plain SQL with a vector literal (INSERT ... VALUES (:#id, :#embedding::vector), and for retrievalORDER BY embedding <-> :#query::vector LIMIT 5). The vector operators run in PostgreSQL. - OpenSearch or Elasticsearch through the
elasticsearchcomponent: index documents with a vector field; k-NN queries go through the search operation. - Qdrant, Pinecone, Weaviate or Milvus through their REST APIs with the
httpcomponent and thejsondata format.
- PostgreSQL with pgvector through the
- Bedrock knowledge bases are โ
through
aws-bedrock-agent-runtime(retrieve,retrieveAndGenerate).
Dedicated vector components are on the roadmap (2.1).
1.4 AWS Lambda function โ
Goal: run routes as a Lambda function rather than a container.
How: cameleer is its own Lambda custom runtime (provided.al2023). Package the routes with
scripts/package-lambda.sh: API Gateway and function URL events go to the platform-http
routes, other events to direct:lambda (or the endpoint in the function's Handler setting).
See AWS Lambda. Containers on Cloud Run, Fargate, Azure Container
Apps or Knative work as before.
1.5 Streaming model output to users ๐งฉ
Goal: forward tokens to a browser or client as they arrive.
How:
aws-bedrock,azure-openaiandgoogle-vertexaisupport streaming withstreamOutputMode=chunksand astreamingChunkProcessorcalled per chunk.- In that processor, send each chunk to a
websocketendpoint, or write it to a seda queue that a server-sent-events endpoint drains.
1.6 Token and cost budgets ๐งฉ
Goal: cap spend per tenant or per agent.
How:
- Read the usage headers the model components set (prompt and completion tokens).
- Add them to a counter in
spring-redisorsql, keyed by tenant. - Put a
filterorchoicebefore the model call that rejects or downgrades the model once the budget is spent. - Use
throttlefor a hard requests-per-second cap.
1.7 Human in the loop ๐งฉ
Goal: an agent's risky action waits for a person.
How:
- Route the proposed action to
slack,telegramormailwith an approval link that hits aplatform-httproute. - Park the pending action in a repository (
sqlorspring-redis) keyed by an id. - On approval, continue the action route. A
claimCheckor the aggregator withcompletionTimeouthandles expiry.
2. Enhancement opportunities
2.1 Agents and AI
| Item | Why | Status |
|---|---|---|
MCP server component: expose routes as MCP tools (JSON-RPC, tools/list with JSON schemas, tools/call) | the standard way agents discover and call tools; today it's the pattern in 1.1 | ๐ง |
Tool calls in openai and aws-bedrock: pass tool definitions and return tool calls (as azure-openai already does) | removes the main gap for the agent loop in 1.2 | ๐ง |
| An agent EIP / DSL step: model call โ tool dispatch โ loop, with turn and token limits | packages 1.2 so it's one step in a route | ๐ง |
| Vector store components: pgvector, Qdrant, OpenSearch k-NN, Pinecone | first-class retrieval instead of SQL/REST in 1.3 | ๐ง |
Streaming in openai | parity with the Bedrock, Azure and Vertex components | ๐ง |
| Prompt templates and response caching | cut cost and latency for repeated prompts; reuse the templating languages | ๐ง |
| Anthropic API component | direct access without Bedrock or Vertex | ๐ง (reachable today through aws-bedrock and google-vertexai) |
2.2 Serverless and edge
| Item | Why | Status |
|---|---|---|
| AWS Lambda runtime adapter: route as a Lambda handler, with events mapped to exchanges | packages 1.4; Lambda is the largest serverless platform | โ
built into cameleer run (AWS Lambda) |
| Published container images and deployment examples (Cloud Run, Fargate, Azure Container Apps, Knative) | shows scale-to-zero end to end | ๐ง |
| Static and ARM64 builds tested (musl, aarch64 Linux) | edge gateways and Graviton or Ampere hosts; today the hermetic suite runs on Windows and Linux x86-64 | ๐ง |
| Binary size budget and feature flags per crate | smaller images for functions that need only a few connectors | โ
a feature per component family, plus templates, jq, xpath, http2 and validate (build features) |
2.3 Performance
Current results: BENCHMARKS.md; analysis: ../benchmarks/analysis.md.
| Item | Why | Status |
|---|---|---|
| HTTP benchmark with the load generator on a second machine | on one machine even a do-nothing server tops out near 400k req/s (3.6x Java), so 4x can't be shown there | ๐ง |
| Event-driven HTTP server (IOCP on Windows, epoll on Linux), opt-in, with the blocking server as fallback | scalability with many idle connections; on one machine it measured no faster than threads | ๐ง decision pending |
Shared JSON object keys (ObjectMap API change) | JSON parsing is the largest cost in split/aggregate (3.18x today) | ๐ง |
A smaller Exchange (box exception, group from_*) | fewer bytes copied per split part and per seda hand-off | ๐ง |
| Kafka benchmark scenario | needs a real broker on both sides | ๐ง |
2.4 Operations
| Item | Why | Status |
|---|---|---|
| OpenTelemetry tracing export | trace a request across agents, routes and services; today there are Prometheus metrics, tracing and message history | ๐ง |
Windows default time zone (CLDR windowsZones map) | TimeZone::local is UTC on Windows unless TZ is set | ๐ง |
Graceful stop for the remaining direct TcpStream::shutdown calls | so stop() never hangs on idle peers on Windows | ๐ง |
2.5 Verification and trust
| Item | Why | Status |
|---|---|---|
| Real cloud accounts tier (AWS, Azure, GCP) | today the cloud components are verified against emulators and official SDKs | ๐ง needs the owner's credentials |
| Docker-based real servers (Kafka, Elasticsearch, Cassandra, CouchDB, MongoDB, Artemis) | beyond the protocol emulators | ๐ง |
| Independent security audit and fuzzing of the from-scratch TLS, SSH, XML security and protocol parsers | the price of having no dependencies is owning that code | ๐ง |
The verification and operations items are also tracked in STATUS.md.
Found a problem?
If something on this page doesn't match what Cameleer does, or you hit a bug while building
with it, please help fix it, whether you are a person or a coding agent:
open an issue that describes what you saw,
then fork the repository, fix it, add or update a test, run cargo test --workspace, and open
a pull request. CONTRIBUTING.md
explains the ground rules.