mcp server
ruleverdict
Deterministic rule-engine decisions with document-grounded explanations, rules and usage tools.
Set up
Runs on your computer. Pick your agent and operating system.
Before you start
- Node.js 20 or newer
{
"mcpServers": {
"ruleverdict": {
"command": "npx",
"args": [
"-y",
"@reneturcios/ruleverdict"
]
}
}
}same format Cursor, GitHub Copilot CLI, Junie, JetBrains AI Assistant, Augment (Auggie CLI), Factory Droid, Kiro, Devin CLI +12
Values in angle brackets are placeholders. Restart Claude Desktop after editing its config.Claude Desktop docs
README
synced Nov 5, 2026ruleverdict
Ask a rule engine, not a guess. ruleverdict is a small client for the ai-rete-rag service, which decides cases with deterministic rules instead of free-form model output: you pass structured facts and/or free text for a domain, and the verdict comes from that domain's rule set, explained with the documents the rules rest on.
Alongside deciding, it covers the full life of a domain: see which facts the rules need, inspect the rules themselves, pull them down as editable YAML, draft new rules from a written policy (each draft cites the sentence it encodes, and nothing is saved until you say so), publish a replacement rule set, feed policy text into the knowledge base, and watch the monthly decision quota. Responses come back exactly as the service returned them: nothing is trimmed, renamed or summarised on the way through.
Configuration
Two environment variables control the client:
AI_RETE_RAG_API_KEY(optional) — when set, it is sent on every request asAuthorization: Bearer <key>. Leaving it unset is not an error: shared demo domains work keyless, and enforcement problems such as a missing domain claim or an exhausted quota surface from the API as errors rather than failing locally.AI_RETE_RAG_API_URL(optional) — API base URL. Defaults tohttps://ai-rete-rag.com(see "Endpoint provenance" below).
Tools
decide— make a decision in a domain from structuredfactsand/or freetext; the verdict comes from the rule engine, with a document-grounded explanation. Optional:as_of(a date the decision is evaluated at),fact_sources(where each fact came from), and the retrieval-mode flagspattern_01(Pattern 01: rules-scope retrieval) andpattern_02(Pattern 02: retrieval into working memory). Typical call:decide(domain="loan", facts={...}).get_parameters— the facts a domain's rules decide on, most decisive first: what to collect before callingdecide.list_rules— inspect a domain's rules: conditions, verdicts, salience and overlaps.get_rule_source— fetch a domain's rule set as editable YAML.import_policy_rules— turn a written policy document into draft rules, each citing the sentence it encodes. Nothing is saved.put_rules— create or replace a domain's rule set from YAML; passdry_runto validate without saving.ingest_text— add policy text to a domain's knowledge base, optionally witheffective_from/effective_untildates or asupersedespointer to the version it replaces.list_documents— browse a domain's ingested documents.get_usage— check your plan and remaining monthly decision quota.
Unset optional arguments are omitted from requests
entirely. An upstream non-2xx reply fails with
ai-rete-rag error: HTTP <status> and an unreachable API
with ai-rete-rag unreachable.
Endpoint provenance
The original project's README pins the nine tools, the
worked decide example, the Pattern 01 / Pattern 02
modes, both environment variable names, the optional-key
behaviour, and the dry-run / nothing-saved workflow
semantics — but not the request paths. Those are
reconstructions, labelled as such:
POST <base>/api/decidewith the arguments as the JSON body (used bydecide).GET <base>/api/domains/{domain}/parameters(used byget_parameters).GET <base>/api/domains/{domain}/rules(used bylist_rules).GET <base>/api/domains/{domain}/rules/source(used byget_rule_source).POST <base>/api/domains/{domain}/rules/importwith body{"text": "..."}(used byimport_policy_rules).PUT <base>/api/domains/{domain}/ruleswith body{"rules": "...", "dry_run": ...}(used byput_rules).POST <base>/api/domains/{domain}/documentswith body{"text": "...", ...}(used byingest_text).GET <base>/api/domains/{domain}/documents(used bylist_documents).GET <base>/api/usage(used byget_usage).
Domain path segments are URL-encoded.
CLI
Each tool is a subcommand taking one JSON argument string:
npx @reneturcios/ruleverdict decide '{"domain":"loan","facts":{"income":85000}}'
npx @reneturcios/ruleverdict get_parameters '{"domain":"loan"}'
npx @reneturcios/ruleverdict list_rules '{"domain":"loan"}'
npx @reneturcios/ruleverdict get_rule_source '{"domain":"loan"}'
npx @reneturcios/ruleverdict import_policy_rules '{"domain":"loan","text":"Loans need verified income."}'
npx @reneturcios/ruleverdict put_rules '{"domain":"loan","rules":"rules: []","dry_run":true}'
npx @reneturcios/ruleverdict ingest_text '{"domain":"loan","text":"Policy text"}'
npx @reneturcios/ruleverdict list_documents '{"domain":"loan"}'
npx @reneturcios/ruleverdict get_usage '{}'
npx @reneturcios/ruleverdict --version
Output is the tool's result text (the upstream body on
success). Exit codes: 0 on success, 1 on a runtime
error, 2 on a usage error.
MCP server
npx -y @reneturcios/ruleverdict mcp
MCP client config (the key is optional; provide it through the client's environment when you have one):
{
"mcpServers": {
"ruleverdict": {
"command": "npx",
"args": ["-y", "@reneturcios/ruleverdict", "mcp"],
"env": {
"AI_RETE_RAG_API_KEY": "<your key>"
}
}
}
}
Docker
docker run -i ghcr.io/cloudcorprecords/ruleverdict
docker run --rm ghcr.io/cloudcorprecords/ruleverdict get_usage '{}'
Development
npm install
npm run build # tsc -> dist/
npm test # tsx --test test/*.test.ts (fake fetch only, no network)
npm run dev # run the CLI from source
License
MIT — Copyright (c) 2026 Rene Turcios