@qomodome/node-red-agent-ai 0.2.0
Node-RED nodes for AI agent with LLM calling and MCPs support
node-red-agent-ai
Drop an AI agent into any Node-RED flow — it runs a reasoning loop, calls MCP tools, and returns the final answer.
What you get
ai-agent-config: stores provider credentials and shared defaultsai-agent: executes a reasoning loop, can call MCP tools, then returns final output- Provider support: OpenAI GPT, Google Gemini, AWS Bedrock, z.ai (GLM), Azure OpenAI, Azure AI Inference
Architecture
The node runtime is organized with an hexagonal architecture to keep business logic decoupled from framework details.
- Domain layer: core reasoning loop and policies
- Application layer: use case orchestration
- Adapters layer: Node-RED I/O mapping, LangChain model factory, MCP client integration
Current structure:
nodes/
domain/
application/
adapters/
nodered/
llm/
tools/
Requirements
- Node.js 18+
- Node-RED 3+
Installation
From the Node-RED editor:
- Go to
Manage palette>Installtab - Search for
@qomodome/node-red-agent-ai - Click
Install
From the command line:
npm install @qomodome/node-red-agent-ai
Use the node
- Add an
ai-agent-confignode and set credentials for the provider you want to use. - (Optional) Add one or more
ai-mcp-server-confignodes if you want external tools. - Add an
ai-agentnode and link it to yourai-agent-config. - Pick provider/model in the node UI (or override from
msg.ai). - Send a message like this:
msg.payload = {
input: "Summarize today tickets in 5 bullet points"
};
msg.ai = {
provider: "gemini", // openai | gemini | bedrock | zai | azure | azure-ai
model: "gemini-3.5-flash"
};
return msg;
If msg.ai is missing, ai-agent uses the defaults configured in the node editor.
Node reference
ai-agent-config
name(optional): label in editoropenaiApiKey(optional): used when provider isopenaigoogleApiKey(optional): used when provider isgeminiawsAccessKeyId(optional): AWS key id forbedrockawsSecretAccessKey(optional): AWS secret forbedrockawsSessionToken(optional): AWS session token when neededzaiApiKey(optional): used when provider iszaiazureOpenAIApiKey(optional): used when provider isazureazureAiApiKey(optional): used when provider isazure-ai
ai-mcp-server-config
name(optional): label in editortransport(required):streamableHttp|sse|stdiourl(required for HTTP transports): MCP endpoint URLcommand(required forstdio): executable to spawnargsRaw(optional): one argument per line forstdioenvJson(optional): JSON object with env vars forstdio
ai-agent
agent(required): reference toai-agent-configprovider(required):openai|gemini|bedrock|zai|azure|azure-aimodel(optional): provider model override (z.ai defaults toglm-5.2)systemPrompt(optional): persistent agent instructionawsRegion(optional): used forbedrock(defaultus-east-1)zaiBaseUrl(optional): z.ai base URL (defaulthttps://api.z.ai/api/paas/v4)azureEndpoint(required forazure): e.g.https://<resource>.openai.azure.comazureDeployment(required forazure): Azure OpenAI deployment nameazureApiVersion(optional forazure): default2024-10-21azureAiEndpoint(required forazure-ai): e.g.https://<resource>.services.ai.azure.com/modelsazureAiApiVersion(optional forazure-ai): API version query parammcpServerIds(optional): linkedai-mcp-server-confignodesdebugLogs(optional): verbose runtime logs- advanced limits (optional):
maxIterations,maxToolCalls,rateLimitRetries,rateLimitBackoffMs
Message contract
Input:
msg.payloadstring or object withinput- optional overrides in
msg.ai:provider:openai·gemini·bedrock·zai·azure·azure-aimodel: model id/namemcpServers: array of MCP server configs
Output on success:
msg.payload: final assistant textmsg.aiAgent.trace: iteration-by-iteration tracemsg.aiAgent.usage: counters and timings
Error behavior:
- Errors are propagated with
node.error(err, msg)anddone(err) - Use standard Node-RED
catchnodes for handling - Internal handling is limited to rate-limit retry/backoff
Local Docker run
From repository root:
docker compose up --build
Then open:
http://localhost:1880
Notes:
- The setup installs this local module inside
/data/node_modules - Flows persist in a named Docker volume
- Rebuild after source changes:
docker compose up --build --force-recreate
Development
Run tests:
npm test
Publishing
The publish process is automated via GitHub Actions when pushing a tag that matches the package.json version. To publish a new version:
npm version X.Y.Z
git push origin main vX.Y.Z
For manual publish (not recommended - use only for emergencies):
- Verify you have an npm account and are logged in with
npm whoami. If not, runnpm login --scope=@qomodome --auth-type=weband follow the prompts. - Update version in
package.json - Verify contents with
npm pack --dry-run - Publish to npm:
npm publish --access public
License
MIT License. See LICENSE for details.