Skip to main content
Glama

ai·rete·rag MCP Server

Use ai·rete·rag — deterministic rule-based decisions with RAG-powered explanations — from Claude Code, Claude Desktop, or any MCP client.

The verdict always comes from the Rete rule engine (auditable, reproducible); the LLM only explains why, grounded in your ingested policy documents.

Tools

Tool

What it does

decide

Make a decision in a domain — structured facts and/or free text, with optional Pattern 01 (rules scope retrieval) and Pattern 02 (retrieval into working memory). as_of reads the policy documents in force on an earlier day

get_parameters

The facts a domain's rules decide on (from your account's own rules), most decisive first — what to collect before decide

list_rules

Inspect a domain's rules — conditions, verdicts, salience, 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 — review, then put_rules)

put_rules

Create or replace a domain's rule set from YAML (dry_run to validate)

ingest_text

Add policy text to a domain's knowledge base, optionally dated (effective_from, effective_until) or replacing an earlier version (supersedes)

list_documents

Browse a domain's ingested documents

get_usage

Check your plan and remaining monthly decision quota

Related MCP server: gnt MCP Server

Prompt: decide_case

An agent workflow for deciding a case in any domain on your account, including your own: it calls get_parameters to learn which facts the rules decide on, reads the case — text, photos, document scans, voice notes or video (the agent reads the media itself; the API only receives the facts) — maps it onto those exact fields, calls decide with fact_sources recording which file each fact came from (kept in the decision's audit trail), and — while the result's missing_parameters is non-empty (facts that could still change the verdict) — asks you for them, most decisive first, and decides again. The verdict always comes from the rules.

Connect by URL (no install)

The server is also hosted, which is the only route for clients that connect to a URL and have no field for a static header — claude.ai and Claude Desktop custom connectors, in particular.

URL

Auth

Reaches

https://ai-rete-rag.com/mcp/auth

Sign in with Google, once, in the browser

Your account — your domains, your plan quota

https://ai-rete-rag.com/mcp

None, or Authorization: Bearer ik_...

Shared demo domains anonymously; your account with a key

Add https://ai-rete-rag.com/mcp/auth as a custom connector and approve the prompt. Connections are listed under Settings → Connected apps, and disconnecting one takes effect immediately.

Install

No install needed with uv — uvx ai-rete-rag-mcp fetches and runs the server on demand (see the config snippets below).

Alternatively, install it as a package:

pip install ai-rete-rag-mcp         # from PyPI
pip install .                       # or from source, in this repo

Configure

First create an API key: sign in at ai-rete-rag.com, open Settings → API Keys, and create a key (ik_... — shown once).

Claude Code

claude mcp add ai-rete-rag -e AI_RETE_RAG_API_KEY=ik_your-key-here -- uvx ai-rete-rag-mcp

(If you installed via pip, use -- ai-rete-rag-mcp instead of -- uvx ai-rete-rag-mcp.)

Or skip the install entirely and point it at the hosted endpoint with your key:

claude mcp add --transport http ai-rete-rag https://ai-rete-rag.com/mcp \
  --header "Authorization: Bearer ik_your-key-here"

Claude Desktop / other clients (JSON)

{
  "mcpServers": {
    "ai-rete-rag": {
      "command": "uvx",
      "args": ["ai-rete-rag-mcp"],
      "env": {
        "AI_RETE_RAG_API_KEY": "ik_your-key-here"
      }
    }
  }
}

(With a pip install, set "command": "ai-rete-rag-mcp" and drop "args".)

Environment variables:

Variable

Default

Purpose

AI_RETE_RAG_API_KEY

(none)

Your API key — authenticates calls and ties them to your plan quota

AI_RETE_RAG_API_URL

https://ai-rete-rag.com

API base URL — point at http://localhost:8000 for local dev

Without a key you can still explore the shared demo domains (loan, fraud, clinical, …) subject to free-tier limits.

Example

"Use ai·rete·rag to decide whether this loan application should be approved: credit score 645, annual income $52k, requested amount $30k."

Claude calls decide(domain="loan", facts={...}) and returns the rule-derived verdict plus a plain-English explanation citing the underwriting policy.

Available Tools

9 tools
decideMake a decisionAInspect

Make a deterministic, auditable decision in a domain.

The verdict comes from the domain's rule set (Rete engine, never the LLM), so it is reproducible and compliant. The explanation is generated from the domain's ingested policy documents.

Without an API key only the shared demo domains are available, and the response carries next_step: how to get a free key for your own rules. Pass that on to the user rather than dropping it.

Args: domain: Rule-set domain, e.g. "loan", "fraud", "clinical". query: Natural-language question or decision request. facts: Structured facts for working memory, e.g. {"credit_score": 710, "annual_income": 85000}. Use get_parameters to see which fields a domain's rules test. Facts you read yourself from photos, document scans, voice notes or video go here, under those field names; explicit facts always win over anything extracted server-side. fact_sources: Where each fact in facts came from, e.g. {"monthly_income": "payslip.jpg", "claim_usd": "voice note 1"}. Always set this for facts you read from a file, photo, recording or video: it is stored in the decision's audit record so a reviewer can tell typed facts from ones read off evidence. Facts without a source are recorded as "request". unstructured_text: Optional free text (an application, a case note, a voice-note transcript, what a photo or video shows); facts are extracted from it automatically and merged. response_mode: "verdict_only" (fastest), "verdict_with_explanation", or "full_audit" (every rule evaluation + retrieved chunks, available on every plan including the free tier). rule_firings come back in causal order: a rule that matched a fact asserted by an earlier firing appears after it, with the derived facts listed under asserted_facts. filter_retrieval_with_rules: Pattern 01 — run the rules first and let a fired rule's retrieval_scope action narrow which documents the retrieval searches before it runs. extract_from_retrieval: Pattern 02 — parse the retrieved documents into facts and assert them into working memory, so rules fire on what was actually read (not just the facts you passed).

The result's missing_parameters lists rule inputs that were not supplied but could still change the verdict, most decisive first. When it is non-empty, tell the user the verdict is provisional and ask for those facts; when it is empty, more facts cannot change the verdict.

ParametersJSON Schema
NameRequiredDescriptionDefault
factsNo
queryYes
domainYes
fact_sourcesNo
response_modeNoverdict_with_explanation
unstructured_textNo
extract_from_retrievalNo
filter_retrieval_with_rulesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint=false and destructiveHint=false, so the description carries the real behavioral burden and does so well: deterministic/non-LLM verdicts, explanations sourced from ingested policy docs, free-tier domain limits, and the `missing_parameters` contract that determines whether a verdict is provisional. It also documents `rule_firings` causal ordering and `asserted_facts`, which the agent could not infer otherwise.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is long, but front-loaded with the verdict mechanism and its guarantees before the Args block, and each paragraph adds distinct information (audit trail, free-tier behavior, missing_parameters semantics). Some prose in the Args block is verbose enough that it could be tightened, keeping it from a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-parameter tool with an output schema (so return values need not be described) and only safety annotations, the description supplies everything an agent needs: input semantics, mode selection, free-tier constraints, the next_step handoff, and how to interpret missing_parameters. Nothing material is left unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 8 parameters, so the description must compensate, and it does: every parameter is explained with examples (facts, fact_sources with audit implications, unstructured_text extraction, the three response_mode values, and the two pattern flags). The fact_sources explanation adds meaning the schema cannot convey (typed vs evidence-read facts recorded as 'request').

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence names a specific verb and resource ('Make a deterministic, auditable decision in a domain') and immediately characterizes the mechanism (Rete rule engine, never the LLM). This clearly separates it from siblings like list_rules, put_rules, get_parameters, and ingest_text, which manage rules/documents rather than produce a verdict.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives real operating context: no API key means demo domains only, and it points to get_parameters to discover which fields a domain's rules test. It also tells the agent what to do with `next_step`. It stops short of explicit when-not-to-use routing (e.g., 'use put_rules to define a domain before calling decide'), so a 4 rather than 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_parametersGet decision parametersA
Read-only
Inspect

List the input parameters a domain's rules decide on — the facts to collect before calling decide. Derived from your account's own copy of the rules, so it covers your custom domains too.

Each parameter has its field name (the key to use in facts), kind (number / boolean / string), the tests rules make on it (e.g. >= 720 — match these units and scales), the rules and verdicts it can lead to, and max_salience. Parameters come most decisive first: those feeding the highest-salience rules, which win when several rules fire. Also returns every verdict the domain can reach.

ParametersJSON Schema
NameRequiredDescriptionDefault
domainYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint=true; the description adds real context beyond that: results are derived from the account's own rule copy (so custom domains are included) and parameters are ordered most-decisive-first by max_salience, which explains why ordering is meaningful. No auth, freshness, or pagination disclosure, so not a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in the first clause, followed by useful output-shape and ordering detail; the sentence structure is scannable. The enumeration of return fields is slightly listy but each item carries semantic weight (units/scales warning, salience ordering).

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description need not explain return values, yet it usefully clarifies ordering and scope. For a one-parameter read tool with annotations covering safety, the only material omission is the `domain` argument's expected format.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% for the single `domain` parameter, so the description must carry the semantics. It conveys that domain scopes to a rule set and that custom domains work, but never states the expected identifier form (key, name, or ID), leaving a real gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List the input parameters a domain's rules decide on') and immediately positions it relative to the sibling `decide`. An agent can distinguish it from `list_rules`, `get_rule_source`, and `decide` without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly frames the tool as the prerequisite step — 'the facts to collect before calling `decide`' — which routes the agent through a concrete workflow. It names no when-not condition or alternate path (e.g. when to use `list_rules` instead), so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_rule_sourceGet rule source (YAML)A
Read-only
Inspect

Fetch a domain's rule set as editable YAML (plus the parsed rules and whether you may edit it). Use this before put_rules to see the current rules. For a built-in demo domain you get your own copy's rules once you have edited it, otherwise the shared demo's.

ParametersJSON Schema
NameRequiredDescriptionDefault
domainYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

readOnlyHint=true already covers the safety profile, and the description adds genuinely useful behavior beyond it: that the return includes parsed rules and an editability flag, and the demo-domain copy semantics. It stops short of describing freshness, size, or error behavior for unknown domains.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the primary outcome before the usage cue. The final demo-domain sentence is a little convoluted ('your own copy's rules once you have edited it, otherwise the shared demo's') but still earns its place by explaining a non-obvious behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return shape need not be spelled out, and the description rightly focuses on behavior and sequencing. Given a single trivial parameter, the only real omission is any hint about valid domain values, which keeps this just short of complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is one required parameter, 'domain', with 0% schema description coverage, so the schema adds nothing and the description must compensate. The description only obliquely implies what a domain is (via the demo-domain sentence) and never clarifies naming format or where to discover valid domains.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Fetch') and resource ('a domain's rule set as editable YAML') and enumerates what comes back (parsed rules, edit permission). It partially differentiates from siblings by emphasizing editable source YAML, but never explicitly contrasts with list_rules, so an agent must still infer which of the two rule-retrieval tools it wants.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit sequencing cue: 'Use this before `put_rules` to see the current rules', which clearly names the downstream tool this complements. It lacks any when-not guidance or a named alternative (e.g. list_rules) for read-only inspection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_usageCheck usage and quotaA
Read-only
Inspect

Show this account's decision usage, plan, and remaining monthly quota.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotation readOnlyHint=true already discloses the read-only nature. The description adds context by specifying it is scoped to 'this account' and includes 'remaining monthly quota,' which is useful. It does not disclose other behavioral traits like caching or data freshness, but for a simple usage check this is acceptable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, front-loaded with the action 'Show,' and contains no redundant words. Every word contributes to understanding the tool's purpose and scope.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple with no parameters and has an output schema that likely describes return values. The description covers the purpose and scope, making it complete for an agent to understand and invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are zero parameters, so the baseline is 4. The empty schema already covers all parameter information, and the description adds no unnecessary detail. This is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Show' and clearly identifies the resource: the account's decision usage, plan, and remaining monthly quota. This distinguishes it from sibling tools like 'decide' or 'list_rules' that serve different purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage by stating it shows account usage and quota, suggesting it would be used to check limits before making decisions. However, it does not explicitly state when to use it or mention alternatives such as the 'decide' tool that consumes quota.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

import_policy_rulesDraft rules from a policyA
Read-only
Inspect

Convert a written policy document into DRAFT decision rules (LLM-assisted).

Returns validated draft rules (when/action, including chained asserts where the policy stages its determinations), derived rule→rule edges, and overlap warnings. Each returned rule carries a citation field holding the policy sentence it encodes (also summarized in the top-level citations map). NOTHING IS SAVED: review the drafts (and show them to the user), then persist explicitly with put_rules — validate first with dry_run=true, and keep each rule's citation in the YAML you save so the audit trail back to the policy survives.

Args: domain: Domain the rules are drafted for (an owned domain or a new name). policy_text: The policy document text (max ~50k characters).

ParametersJSON Schema
NameRequiredDescriptionDefault
domainYes
policy_textYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, it discloses that nothing is saved, describes the return payload (validated draft rules, rule→rule edges, overlap warnings, citation fields), and warns to review drafts before persisting. This adds significant behavioral context not captured by the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is densely informative but well-structured: purpose first, then return details, then critical workflow warning, then parameter docs. Every sentence earns its place with no fluff or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists, the description successfully covers all essential contextual aspects: what the output contains, citation tracking, no side effects, and the recommended persistence workflow. It is a complete mental model for an agent to act correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Despite 0% schema coverage, the description defines both parameters: domain ('an owned domain or a new name') and policy_text ('max ~50k characters'). This adds meaningful semantic constraints and context beyond the bare schema property names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Convert a written policy document into DRAFT decision rules.' It clearly distinguishes itself from sibling tools like put_rules (persist) and list_rules (list existing rules) by emphasizing the draft and no-save aspects.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states when to use this tool and what to do next: 'NOTHING IS SAVED: review the drafts... then persist explicitly with put_rules — validate first with dry_run=true.' This provides a concrete workflow and names the exact sibling tool for persistence.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ingest_textIngest policy textAInspect

Add policy/reference text to a domain's knowledge base.

The text is chunked and embedded; explanations for future decisions in this domain will cite it. Creating a new domain claims it for your account (plan limits apply). Ingesting into a built-in demo domain gives your account its own copy of that demo (it counts as one of your domains); the shared demo others see is unchanged. On team plans, only the domain admin (the member who created the domain, or the subscription owner) can add documents.

Args: domain: Domain to ingest into (existing or new). text: The policy or reference text. source: Optional source name shown in the document list.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes
domainYes
sourceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only tell the agent this is a non-destructive write; the description adds substantial behavior beyond that: chunking/embedding, citation of ingested text in future decisions, plan-limit consumption, demo-domain copy semantics, and the team-plan admin-only restriction. That is exactly the kind of side-effect and authorization detail a caller needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core action, then layers the consequential behavioral details, then lists args cleanly. It is somewhat dense but every sentence carries decision-relevant information; nothing is padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described. Combined with the permission/plan/copy semantics and full parameter coverage, an agent has everything needed to invoke this correctly in a domain-mutating scenario.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description carries the burden and does so for all three params: domain ('existing or new'), text ('policy or reference text'), and source ('shown in the document list'). The text param is nearly a restatement of its title, keeping this from a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Add policy/reference text to a domain's knowledge base') and clarifies the downstream effect (chunked, embedded, cited in future decisions). An agent can distinguish this from siblings like put_rules or import_policy_rules, which operate on rules rather than raw document text.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear decision context: the domain may be existing or new, creating a new domain claims it for the account, and ingesting into a demo domain makes a private copy. It does not, however, explicitly name alternatives (e.g. import_policy_rules) or state when not to use this tool, so it falls short of full when/when-not routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_documentsList documentsA
Read-only
Inspect

List the documents ingested into a domain's knowledge base.

ParametersJSON Schema
NameRequiredDescriptionDefault
domainYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already declares safe read-only behavior, and the description adds the scope of 'ingested into a domain's knowledge base.' It does not discuss pagination, ordering, or return details, but for a simple list tool with annotation coverage, this is acceptable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with no filler. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple one-parameter input, the presence of an output schema, and a clear scope in the description, it is mostly complete. It could benefit from noting whether results are sorted or paginated, but those are non-critical gaps for a basic listing tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It only mentions 'domain's' in passing, which implies the domain parameter selects the knowledge base, but it does not explain domain's format, requiredness, or behavior. The single parameter is simple, but the description adds minimal value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') and resource ('documents ingested into a domain's knowledge base'), clearly stating what the tool does. It differentiates from siblings like list_rules by targeting documents rather than rules.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear context: this lists documents from a domain's knowledge base, which implies when it should be used versus other tools like ingest_text or put_rules. However, it does not explicitly state exclusions or alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_rulesList rulesA
Read-only
Inspect

List the decision rules for one domain (or all domains).

Returns each rule's conditions — either a flat AND list (field / operator / value) or a when condition tree (nested all/any/not) — plus its verdict, salience, and any asserted facts (action.assert, the facts a rule produces for other rules to consume). edges lists the derived rule→rule dependencies: src asserts a fact type that dst's conditions test (forward chaining). Each rule may also carry citation — the policy sentence it encodes — which is what lets a decision be traced back to the source clause. Also includes overlap warnings. Use this to learn which fact fields a domain expects before calling decide.

ParametersJSON Schema
NameRequiredDescriptionDefault
domainNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the readOnlyHint annotation by detailing the return structure: condition formats (flat AND list or when tree), verdict, salience, asserted facts, edges with forward-chaining semantics, citation purpose, and overlap warnings. This gives an agent a thorough understanding of what to expect from the tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Five sentences pack a high density of information without fluff. Front-loaded with the primary action, each subsequent sentence adds meaningful semantics (return fields, edges, citation, overlap warnings) and ends with a practical use case. No word is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description fully contextualizes the tool: what it lists, what the output contains, why edges and citations matter, and how the domain parameter behaves. Given the simple schema (1 optional param) and presence of an output schema, this description is complete enough for an agent to use the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has no parameter description (0% coverage), but the phrase 'one domain (or all domains)' clarifies that the `domain` parameter filters to a specific domain while null/omission means all domains. This is valuable, though it doesn't explicitly name the parameter or mention validation/format.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'List the decision rules for one domain (or all domains),' clearly stating a specific verb and resource with a scope qualifier. It also distinguishes the tool from siblings like `decide` by positioning it as a read-only listing tool for learning domain expectations, and its focus on rules differentiates it from `list_documents` and `get_rule_source`.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides a clear when-to-use signal: 'Use this to learn which fact fields a domain expects before calling `decide`.' This explicitly ties the tool to a pre-decision workflow, but it lacks an explicit 'when not to use' or named alternatives for related operations like retrieving the original policy text (get_rule_source).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

put_rulesSave rulesA
Destructive
Inspect

Create or replace a domain's rule set from YAML (self-serve rule authoring).

The first save to a new domain claims it for your account (plan limits apply). Saving to a built-in demo domain saves your own copy of it, seeded from the demo; the shared demo others see is unchanged. Rules are validated before saving — set dry_run=true to validate without persisting. The response reports ok/errors, the parsed rules, and any overlap warnings.

YAML format — a list of rules. Flat form (conditions are AND-ed): - name: "Approve" salience: 10 conditions: - type: loan field: credit_score op: ">=" value: 700 action: verdict: "APPROVED" reason: "Credit score meets threshold"

Tree form — when: holds nested all/any/not condition groups, and an action may assert derived facts that other rules consume (forward chaining; the rule graph derives from these automatically): - name: "Sepsis Screen" salience: 30 when: all: - {type: clinical, field: temperature_f, op: ">=", value: 101.5} - any: - {type: clinical, field: wbc_count, op: ">", value: 12.0} - {type: clinical, field: bands_pct, op: ">", value: 10} action: verdict: "URGENT_ALERT" assert: - {type: sepsis_flag, fields: {severity: high}} - name: "Escalate" salience: 40 when: all: - {type: sepsis_flag, field: severity, op: "==", value: high} - {type: clinical, field: age, op: ">=", value: 65} action: verdict: "ADMIT_ICU"

Use either conditions: or when: per rule, never both. not passes when the inner condition does not hold (including when the field is absent). Produce/consume cycles between rules are rejected at validation. An action may also carry retrieval_scope: { <key>: <value> } to narrow which documents retrieval searches (Pattern 01).

A rule may also carry citation: — the policy sentence it encodes. It is stored with the rule and shown beside it in decision audits, so a verdict can be defended with the source language, not just the rule name: - name: "Decline Late Returns" salience: 20 citation: "Returns are accepted within 30 days of delivery." when: all: - {type: retail, field: days_since_delivery, op: ">", value: 30} action: verdict: "DENIED"

IMPORTANT: when persisting drafts returned by import_policy_rules, copy each rule's citation through into this YAML. Dropping it silently loses the link from the decision back to the policy clause that justifies it.

Args: domain: Domain to author (an owned domain, or a new name to claim). rules_yaml: The full rule set as YAML text. dry_run: Validate only, without saving.

ParametersJSON Schema
NameRequiredDescriptionDefault
domainYes
dry_runNo
rules_yamlYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag a destructive write, and the description goes well beyond them: domain claiming and plan limits, demo-copy semantics, pre-save validation, dry_run behavior, rejected produce/consume cycles, response contents (ok/errors, parsed rules, overlap warnings), and a warning that dropping `citation` silently loses the policy link.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded and every paragraph adds real information for a YAML-authoring tool, but three full YAML examples make it long; the citation example is valuable while the second tree-form example is somewhat verbose for what it teaches.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex, destructive, 0%-coverage schema with an output schema present, the description covers everything an agent needs: YAML grammar, validation/dry-run path, cycle rejection, domain claiming, and the import_policy_rules citation handoff.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry the load and does: `domain` is 'an owned domain, or a new name to claim', `dry_run` is 'validate only, without saving', and `rules_yaml` is documented in depth with flat/tree forms, conditions-vs-when exclusivity, and `not` semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb and resource: 'Create or replace a domain's rule set from YAML.' It clearly distinguishes itself from siblings like list_rules, get_rule_source, and import_policy_rules by describing authoring/persistence rather than reading or draft import.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete context: first save to a new domain claims it (plan limits apply), saving to a demo domain creates a private copy, and dry_run validates without persisting. It also names the import_policy_rules handoff, though it never states explicitly when another tool should be preferred over this one.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 2 tool updatesv0.9.0
    • Changeddecide1 field changed
      • addedInput schema / properties / fact_sources
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Fact Sources"
        +}
    • Addedget_parameters
  2. 8 tool updatesv0.5.3
    • First observeddecide
    • First observedget_rule_source
    • First observedget_usage
    • First observedimport_policy_rules
    • First observedingest_text
    • First observedlist_documents
    • First observedlist_rules
    • First observedput_rules

TDQS

A4.2/5.0

Scored across 9 tools

Disambiguation4/5

Most tools target distinct resources/actions: ingest_text vs list_documents (write vs read KB), import_policy_rules (draft) vs put_rules (persist), decide vs get_parameters (act vs inspect inputs). The only real overlap is list_rules vs get_rule_source, both surfacing rules, though the descriptions distinguish inspection from editable YAML authoring.

Naming Consistency4/5

Names are consistently snake_case with a verb_noun shape (import_policy_rules, list_documents, list_rules, put_rules, get_parameters, get_rule_source, ingest_text). Minor deviation: 'decide' is a bare verb, and get_/list_ are mixed for read-style tools (get_parameters vs list_documents).

Tool Count5/5

Nine tools is well-scoped for a rule-authoring + knowledge-base + decision service. Each tool maps to a clear lifecycle step (ingest, author, inspect, decide, account) with no obviously redundant entries.

Completeness4/5

The core lifecycle is covered: ingest text, list documents, draft rules from policy, persist/replace rules, fetch editable rules, inspect rules/parameters, and decide. Gaps are minor: no document deletion or single-document fetch, and rules are only replaceable wholesale (no targeted delete/edit), but these are workable.

Maintenance

ActivityMaintained
ResponsivenessSlow

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Deterministic policy enforcement for AI agent tool calls. It evaluates every tool call against user-defined rules before execution, with no LLM in the authorization path.
    3
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enforces deterministic policy decisions on AI agent tool calls, supporting allow, deny, correct, escalate, and human review actions with verifiable audit receipts.
    10 npm
    MIT