Code
Createbindu_agent.py with the code below, or save it directly from your editor.
build_agent and build_server_params from a sibling agent.py that wires the Agno Agent to the dutch-legal-citations MCP server over stdio. Create agent.py alongside bindu_agent.py:
prompt.py:
prompt.py is longer (full Windsurf-style sections for <user_information>, <citation_format>, <communication_style>). Read the file in the source repo for the exact text.
Skill Configuration
Createskills/dutch-law-research/skill.yaml:
How It Works
MCP Integration (stdio transport)Dutch-Law-MCPserver is a Node process built from a sibling../Dutch-law-mcp/folder- Launched via
mcp.StdioServerParameters(command="node", args=["dist/index.js"]) MCPToolsopens the subprocess once on the first request and keeps the stdio session warm — avoids ~1-2s node startup per call and the 130 MB SQLite re-open- 15+ tools exposed:
search_legislation,get_provision,validate_citation,check_currency,build_legal_stance,get_eu_basis,get_dutch_implementations,get_provision_at_date,list_sources, and EU-bridge tools
- Identity header + tagged sections:
<user_information>,<corpus>,<tool_calling>,<legal_research_method>,<citation_format>,<safety_and_disclaimers>,<communication_style> - Mirrors the operator-style prompt structure used by Windsurf / Cascade
- Tool-selection guide is embedded in
<tool_calling>so the model picks the narrowest tool for each query shape - Worked examples show the expected call-then-quote pattern
- Every legal claim must be backed by a tool result — no fallback to general knowledge of Dutch law
- Operative provision text is quoted verbatim from the tool output (zero LLM paraphrase)
- Citation format:
Statute (BWB-ID) artikel X— e.g.Burgerlijk Wetboek Boek 6 (BWBR0005289) art. 6:162 - EU references use CELEX style:
Verordening (EU) 2016/679 (GDPR) art. 5 - If a statute has been amended or repealed,
check_currencyis run before the agent relies on it
_ensure_agent()lazy-initializes theMCPToolsconnection andAgentonce under anasyncio.Lock- Subsequent A2A
message/sendrequests reuse the same warm MCP session - Async
handler(messages)callsagent.arun(input=messages)and unwrapsRunOutput.content
Dependencies
Environment Setup
Create.env file:
Run
- “Wat zegt artikel 6:162 BW over onrechtmatige daad?”
- “Is de Mededingingswet art. 24 nog van kracht?”
- “What EU directive is the basis for AVG art. 5?”
- “Valideer de citatie ‘art. 6:162 BW’.”
Example API Calls
Message Send Request
Message Send Request
Task get Request
Task get Request