Inspiration
Every Oracle Integration Cloud (OIC) integration starts the same way: before a
single line of business logic exists, someone spends half an hour on the
scaffolding — a trigger connection, a WSDL/JCA adapter pair, a tracking
variable that has to match a payload field, a passthrough map, a project.xml
with three separate XML namespaces, and a precise ZIP layout that OIC rejects if
a directory name is off by one character. It's identical work every time, it's
easy to get subtly wrong, and it's exactly the kind of thing that should be a
short conversation, not a checklist.
We already had a generator that turns a YAML spec into a valid .iar / .car.
What was missing was the part that decides what the spec should say — scheduled
or application-driven? which pipeline role? what's the real tracking key? — and
the part that gets the finished archive into an environment. Those are the pieces
we built an agent around.
What it does
You describe the integration in a sentence. The agent:
- Recalls conventions from a seedable file-backed memory — the code prefix, per-environment connection IDs, and a log of everything it has generated.
- Picks the pattern. It classifies scheduled vs application-driven, chooses one of four standard templates, and looks up the recognised integration pattern it implements (Message Endpoint, Content-Based Router + Message Translator, Polling Consumer, …) along with its best-practice guardrails.
- Proposes the whole spec — it does not interrogate. It derives the
integration code as
<DOMAIN>_<role suffix>, plus the operation, URI, tracking key and schedule frequency, and presents them. It only asks for what it genuinely can't infer — the payload fields, a downstream target's real URL. - Previews the spec as YAML and runs it past a
spec_reviewersub-agent that checks the naming, the tracking key, and the exact"Invoke <Target>"phrasing that lineage tools depend on. - Generates the archive — a real, CRC-valid
.iaror.car, importable via the OIC Console or the REST API. - Deploys it —
import_to_oic(archive, env)uploads it to a live OIC instance over the Integration REST API.
How we built it
- Google ADK 2 for the agent runtime, following the adk2 codelab's three
pillars: deterministic work (spec validation, XML generation, the REST import)
stays in plain Python tools — zero LLM cost, zero hallucinated XML — while the
LLM owns the interview and the template choice. The reviewer is a collaborative
sub-agent (
AgentTool). - Gemini 3.5 Flash via Vertex AI (AI Studio key for local dev).
- MCP via FastMCP — the nine tool functions are registered on an MCP server;
the ADK agent and the server share one implementation. (ADK's own
MCPToolsetfor the agent to consume MCP needs a newermcpthan we pin, so the agent calls the functions directly and the server re-exports them.) - An industry-pattern reference (
knowledge/integration_patterns.json) — curated from public sources only: the Enterprise Integration Patterns catalogue (Hohpe & Woolf), Oracle Integration's documented orchestration styles, and standard reliability guidance (retry/backoff, DLQ, idempotency, concurrency guards). Each template carries the pattern name and its guardrails; the agent folds them into every proposal. - The OIC REST import —
oic_import.pydoes OAuth2 client-credentials and posts the archive to/integrations/archiveor/projects/archive. Connection config comes from environment variables or an existing OIC CDenv.propertiesfile — never from the repo — and a prod-looking environment is refused unless the operator setsOIC_ALLOW_PROD=1. - Memory is a custom
BaseMemoryServicebacked by a Markdown file you can open and read (adapted from the MonsterTix memory codelab), seeded with the team's naming conventions and the per-pattern OIC build recipes. - Eval — an ADK evalset pinning the agent's tool trajectory, plus deterministic pytest for the builder, generator and import guards that needs no model at all.
- Two front doors in one container (the MonsterTix pattern) — a custom Studio
chat page with a one-click archive download, plus ADK's
/dev-ui. - The archive generators are vendored from our OIC traceability tooling and re-packaged so the cross-module imports still resolve.
Challenges we ran into
- The
.iar/.carformat is very strict. Artifacts are managed by Vendor. Checks check sum for integrity of code archive. - Getting the agent to propose instead of interrogate. Early versions asked
"what code would you like for this integration?" — the exact boilerplate
question a developer shouldn't have to answer. The fix was to give each
template a
code_suffixand OICbuild_notes, and rewrite the instruction so the agent derives the code, operation, URI and frequency and presents the whole proposal up front. - Keeping client data out. An earlier version of the pattern knowledge base scanned real integration archives. We replaced it with a hand-curated reference built entirely from public patterns — no proprietary shapes, connection ids, or payloads anywhere in the repo.
- Making the REST import safe by default. It reads credentials from the environment or an existing config file, never a committed one, and it refuses prod without an explicit opt-in.
- Eval determinism. LLM output varies, so the evalset leans on the tool trajectory and the hard correctness guarantees live in the model-free tests.
Accomplishments that we're proud of
- Developer inputs,Integration out. The agent goes from technical requirements to an integration artifact that can be imported through MCP Tools
- It proposes, it doesn't interview. For a typical request the developer answers one question — the payload fields — and everything else is derived and confirmed.
- Clean provenance. The pattern knowledge is public and cited; the deployment credentials are never in the repo.
What we learned
- Team went through resources and how GCS (Google Cloud Services) can be leveraged to build coding agents.
- Leverage Memory Bank/MCP Tools to be more context relevant
- How productivity can be increased and show proof of concept to leadership and product owners
What's next for IntegrationCodingAgent
- Agentic Capabilities — Enabling integrations as MCP tools and build AI Agents for major business functions
- Integration Patterns — Enable Order2Cash and Supply Chain Functions from ERP
- CI/CD process — build continuous loop with HIL(Human In Loop) for better performance.
- Updates — update integrations with new changes or enhancements.
Built With
- agent-development-kit
- cloud-run
- fastapi
- gemini-3.6-flash
- google-adk
- oauth2
- oic-rest-api
- oracle-integration-cloud
- python
- uvicorn

Log in or sign up for Devpost to join the conversation.