feat(tools): n8n caveauDbnAgent starter workflow + import guide
Clonable AI Agent workflow driving the DBN legal tools over one MCP Client Tool node (dynamic catalog, 23 dbn.* tools). Chat Model + Bearer creds are placeholders Dave wires post-import — no cloud spend baked in. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
# caveauDbnAgent — n8n starter workflow
|
||||
|
||||
A clonable n8n agent that drives the Do Better Norge legal tools over MCP. One
|
||||
**MCP Client Tool** node connects to the DBN bridge and enumerates the **whole**
|
||||
catalog automatically (currently **23** `dbn.*` tools) — the catalog is dynamic
|
||||
(`includes/DbnMcpRuntime.php::tools()`), so new tools appear without editing this
|
||||
workflow.
|
||||
|
||||
## What's in `caveauDbnAgent.json`
|
||||
|
||||
```
|
||||
When chat message received ─▶ DBN Agent (AI Agent)
|
||||
├─ ai_languageModel ◀─ Chat Model (placeholder)
|
||||
└─ ai_tool ◀─ DBN MCP Tools
|
||||
```
|
||||
|
||||
- **DBN Agent** — system prompt steers the default chain
|
||||
`dbn.search_legal → dbn.legal_analysis → dbn.korrespond` and enforces the
|
||||
process-and-forget privacy rule (never auto-saves; suggests `dbn.redact`).
|
||||
- **DBN MCP Tools** — MCP Client Tool node, `httpStreamable` transport,
|
||||
`https://mcp.dobetternorge.no/mcp`, Bearer auth, `include: all`.
|
||||
- **Chat Model** — a placeholder `lmChatOpenAi` node. **No cloud spend is wired
|
||||
by the template** — you attach your own credential.
|
||||
|
||||
## Import + wire it up (Dave's step — no n8n API access from here)
|
||||
|
||||
1. **n8n → Workflows → Import from File** → pick `caveauDbnAgent.json`.
|
||||
2. **Mint a DBN MCP token**: log in at <https://tools.dobetternorge.no/mcp.php>,
|
||||
create a user token (looks like `dbn_user_mcp_...`). Copy it once.
|
||||
3. **DBN MCP Tools node → Credential → Bearer Auth**: paste the token as the
|
||||
bearer value. (The node sends `Authorization: Bearer dbn_user_mcp_...`.)
|
||||
4. **Chat Model node → Credential**: attach your existing OpenAI-compatible
|
||||
credential — e.g. the colin LiteLLM proxy (`http://10.0.1.10:4000`, base-URL
|
||||
override on an OpenAI cred) or Azure OpenAI. Set the model to one your key can
|
||||
serve (e.g. `gpt-4o`).
|
||||
5. **Open the chat** (the trigger node's built-in chat) and ask, e.g.:
|
||||
*"Min sønn ble akuttplassert av barnevernet. Hva er fristene og hvilke
|
||||
rettigheter har jeg?"* The agent should call `dbn.search_legal` /
|
||||
`dbn.legal_analysis` and answer with cited sources.
|
||||
|
||||
## Notes
|
||||
|
||||
- The DBN tools require an active DBN member session behind the token; the token
|
||||
carries the user/tenant + scopes. Keep the token secret (vault it; don't commit).
|
||||
- If the MCP node lists zero tools, re-check the bearer token and that the bridge
|
||||
(`mcp.dobetternorge.no`, caveau-mcp container `dobetternorge-mcp:3002` on colin)
|
||||
is up.
|
||||
- This starter matches the live catalog as of 2026-06-21. Re-export from n8n if
|
||||
you customize it so the repo copy stays current.
|
||||
@@ -0,0 +1,120 @@
|
||||
{
|
||||
"name": "caveauDbnAgent",
|
||||
"nodes": [
|
||||
{
|
||||
"parameters": {
|
||||
"options": {}
|
||||
},
|
||||
"id": "a1b2c3d4-0001-4a01-8a01-000000000001",
|
||||
"name": "When chat message received",
|
||||
"type": "@n8n/n8n-nodes-langchain.chatTrigger",
|
||||
"typeVersion": 1.1,
|
||||
"position": [
|
||||
-260,
|
||||
0
|
||||
],
|
||||
"webhookId": "caveau-dbn-agent-chat"
|
||||
},
|
||||
{
|
||||
"parameters": {
|
||||
"options": {
|
||||
"systemMessage": "You are caveauDbnAgent, a Norwegian family-law preparation assistant. You answer using ONLY the Do Better Norge (DBN) legal tools exposed over MCP — never invent statutes, case numbers, or citations.\n\nTOOLS: a single MCP connection exposes the full DBN catalog (dbn.search_legal, dbn.corpus_search, dbn.ask, dbn.list_personas, dbn.summarize, dbn.timeline, dbn.redact, dbn.translate, dbn.legal_analysis, dbn.korrespond, dbn.korrespond_refine, dbn.barnevernet_analyze, dbn.advocate_brief, dbn.deep_research, dbn.discrepancy_find, dbn.transcribe_audio, dbn.extract_text, dbn.corpus_stats, dbn.list_documents, dbn.get_document, dbn.citation_graph, dbn.case_workbench_plan, dbn.save_to_case).\n\nDEFAULT CHAIN: for a typical case-prep request, (1) call dbn.search_legal to ground yourself in the corpus, (2) call dbn.legal_analysis on the user's document or question, then (3) call dbn.korrespond to draft any letter to a Norwegian authority. Pick a persona with the `profile` argument (family, child-welfare, immigration, labour, consumer-tenancy, general) — default family. Call dbn.list_personas if unsure.\n\nPRIVACY: the DBN tools are process-and-forget. Do NOT call dbn.save_to_case unless the user explicitly asks to save a result. Suggest dbn.redact before sharing anything containing names or IDs.\n\nAlways cite the sources the tools return. If a tool returns no grounded sources, say so plainly rather than guessing."
|
||||
}
|
||||
},
|
||||
"id": "a1b2c3d4-0002-4a01-8a01-000000000002",
|
||||
"name": "DBN Agent",
|
||||
"type": "@n8n/n8n-nodes-langchain.agent",
|
||||
"typeVersion": 1.7,
|
||||
"position": [
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"parameters": {
|
||||
"model": {
|
||||
"__rl": true,
|
||||
"mode": "list",
|
||||
"value": "gpt-4o"
|
||||
},
|
||||
"options": {}
|
||||
},
|
||||
"id": "a1b2c3d4-0003-4a01-8a01-000000000003",
|
||||
"name": "Chat Model (wire your LiteLLM/Azure cred)",
|
||||
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
|
||||
"typeVersion": 1.2,
|
||||
"position": [
|
||||
-120,
|
||||
220
|
||||
],
|
||||
"notes": "Placeholder. Attach your existing OpenAI-compatible credential (e.g. colin LiteLLM at :4000, or Azure OpenAI). No new cloud spend is wired by this template."
|
||||
},
|
||||
{
|
||||
"parameters": {
|
||||
"endpointUrl": "https://mcp.dobetternorge.no/mcp",
|
||||
"serverTransport": "httpStreamable",
|
||||
"authentication": "bearerAuth",
|
||||
"include": "all"
|
||||
},
|
||||
"id": "a1b2c3d4-0004-4a01-8a01-000000000004",
|
||||
"name": "DBN MCP Tools",
|
||||
"type": "@n8n/n8n-nodes-langchain.mcpClientTool",
|
||||
"typeVersion": 1,
|
||||
"position": [
|
||||
180,
|
||||
220
|
||||
],
|
||||
"notes": "Bearer credential = a DBN user MCP token (dbn_user_mcp_...) minted at https://tools.dobetternorge.no/mcp.php. The catalog is dynamic — this one node enumerates all 23 dbn.* tools."
|
||||
}
|
||||
],
|
||||
"connections": {
|
||||
"When chat message received": {
|
||||
"main": [
|
||||
[
|
||||
{
|
||||
"node": "DBN Agent",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
]
|
||||
},
|
||||
"Chat Model (wire your LiteLLM/Azure cred)": {
|
||||
"ai_languageModel": [
|
||||
[
|
||||
{
|
||||
"node": "DBN Agent",
|
||||
"type": "ai_languageModel",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
]
|
||||
},
|
||||
"DBN MCP Tools": {
|
||||
"ai_tool": [
|
||||
[
|
||||
{
|
||||
"node": "DBN Agent",
|
||||
"type": "ai_tool",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
"settings": {
|
||||
"executionOrder": "v1"
|
||||
},
|
||||
"pinData": {},
|
||||
"meta": {
|
||||
"templateId": "caveau-dbn-agent-starter"
|
||||
},
|
||||
"tags": [
|
||||
{
|
||||
"name": "caveauAI"
|
||||
},
|
||||
{
|
||||
"name": "dbn"
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user