> ## Documentation Index
> Fetch the complete documentation index at: https://docs.aethis.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# MCP server overview

> Install and configure aethis-mcp for Claude Code, Claude Desktop, Cursor, and Windsurf.

## What it is

MCP (Model Context Protocol) is an open standard that lets AI coding agents call external tools directly from a conversation — no shell, no files. `aethis-mcp` implements this protocol, exposing 27 tools for evaluating eligibility and authoring rules from legislation.

Install it once. After that, your coding agent can call `aethis_decide`, `aethis_create_ruleset`, `aethis_generate_and_test`, and `aethis_publish` as naturally as it calls any other tool.

**Decision tools** (evaluate, schema, explain) work with no API key.\
**Authoring tools** (create, generate, publish) require an API key.

***

## Quick install (recommended)

If you have [`aethis-cli`](/interfaces/cli) installed, one command wires up the MCP server in your editor's config — picks up the API key cached by `aethis login`, drops a canonical `aethis` server entry into the right config file for each target, and preserves any other MCP servers you already have.

```bash theme={null}
# All four clients at once:
aethis mcp install --target all

# Or one at a time:
aethis mcp install --target claude-code      # writes ./.mcp.json (project-local)
aethis mcp install --target cursor           # ~/.cursor/mcp.json
aethis mcp install --target claude-desktop   # ~/Library/Application Support/Claude/...
aethis mcp install --target windsurf         # ~/.codeium/windsurf/mcp_config.json
```

Restart your editor to pick up the change. Re-run after `aethis account generate` rotates your key — the entry updates in place. Reverse with `aethis mcp uninstall --target <client>` (only removes the `aethis` entry).

Don't have `aethis-cli`? Use the manual install below.

***

## Manual install (without aethis-cli)

<Tabs>
  <Tab title="Claude Code">
    ```bash theme={null}
    # Decision tools only (no key needed)
    claude mcp add aethis -- npx -y aethis-mcp

    # With authoring access
    claude mcp add aethis -e AETHIS_API_KEY=ak_live_... -- npx -y aethis-mcp
    ```
  </Tab>

  <Tab title="Claude Desktop">
    Add to `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) or `%APPDATA%\Claude\claude_desktop_config.json` (Windows):

    ```json theme={null}
    {
      "mcpServers": {
        "aethis": {
          "command": "npx",
          "args": ["-y", "aethis-mcp"],
          "env": {
            "AETHIS_API_KEY": "ak_live_..."
          }
        }
      }
    }
    ```

    Omit the `env` block if you only need decision tools.
  </Tab>

  <Tab title="Cursor / Windsurf">
    Add to `.cursor/mcp.json` or `.windsurf/mcp.json` — same JSON structure as Claude Desktop above.
  </Tab>
</Tabs>

<Note>
  The API key must be set in the MCP client's config file, not in your shell profile. The MCP server process doesn't inherit shell environment variables.
</Note>

***

## Prompts

MCP prompts are pre-built workflow guides that compatible clients can surface as selectable templates.

| Prompt          | Description                                                                                     |
| --------------- | ----------------------------------------------------------------------------------------------- |
| `aethis-author` | Step-by-step TDD workflow: gather requirements → create ruleset → generate → refine → publish   |
| `aethis-decide` | Decision workflow: find ruleset → get schema → evaluate. Accepts optional `ruleset_id` argument |

***

## Try it — no API key required

Decision tools work immediately. Two examples you can try now:

**UK Free School Meals — child eligibility:**

> Is a 10-year-old at a state-funded school eligible for Free School Meals?

```
aethis_decide({
  ruleset_id: "aethis/uk-fsm/child-eligibility",
  field_values: { "child.age": 10, "child.school_type": "state_funded" },
  include_trace: true
})
```

```json theme={null}
{
  "decision": "eligible",
  "fields_provided": 2,
  "fields_evaluated": 2,
  "trace": {
    "age_check": "PASS — age 10 is within 4–15 (FSM Regulations 2014, Regulation 3(1))",
    "school_type_check": "PASS — school_type is state_funded (FSM Regulations 2014, Regulation 3(2)(b))"
  }
}
```

**Spacecraft crew certification — Vogon applicant:**

> Is a Vogon eligible for spacecraft crew certification?

```
aethis_decide({
  ruleset_id: "aethis/spacecraft-crew-certification",
  field_values: { "space.crew.species": "Vogon" },
  include_trace: true
})
```

```json theme={null}
{
  "decision": "not_eligible",
  "fields_provided": 1,
  "fields_evaluated": 11,
  "trace": {
    "species_check": "FAIL — species is 'Vogon' (disqualifying, Section 3)"
  }
}
```

One field provided. The engine determined a Vogon was disqualified without asking about flight hours, medical certificates, or anything else. It found the shortest path to a decision from the facts it already had.

***

## Authoring with a coding agent

Paste a policy document into Claude Code, Cursor, or Windsurf and ask the agent to author rules. The agent runs the tool calls; you confirm section boundaries, field names, test cases, and domain corrections at checkpoints. Full procedural flow: [Author a rule from legislation](/recipes/author-a-rule).

```text theme={null}
Use Aethis MCP to turn this policy into a tested ruleset.
Draft the input fields and test cases first, then stop for my approval.
Do not publish until all tests pass.
```

For the human-facing workflow, see [AI coding agent onboarding](/agents/onboarding).

***

## Authoring access

Authoring is invite-only private beta — [request access](https://aethis.ai/developer-access). Generation tools call an Anthropic model on your behalf and accept the key per request; it is used only for that request and never stored. Prefer passing the key **by reference** — `anthropic_key_env` (the name of an env var that holds the key) or `anthropic_key_keychain` (a macOS keychain item) — rather than the deprecated raw `anthropic_key`, which lands verbatim in the host's session transcript.

***

## Troubleshooting

| Error                              | Cause                                                              | Fix                                                                                                                                             |
| ---------------------------------- | ------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------- |
| `"API key is required"`            | `AETHIS_API_KEY` not set                                           | Set in MCP client config (not shell profile). Decision tools don't need a key.                                                                  |
| `"Ruleset not found"` (404)        | Wrong ID or archived ruleset                                       | For public showcase rulesets, use `aethis_discover_rulesets`; for private tenant rulesets, use `aethis_list_projects` → `aethis_list_rulesets`. |
| `"Cannot publish: tests failing"`  | Tests don't pass                                                   | Fix with `aethis_refine`, or pass `force: true` to override (not recommended for production).                                                   |
| Rate limit exceeded (429)          | Daily limit hit                                                    | Wait and retry. Contact [eng@aethis.ai](mailto:eng@aethis.ai) for a higher tier.                                                                |
| Generation timeout (504)           | Client timed out — normal for complex rules (5–15 min server-side) | See [Handling generation timeouts](/authoring/rule-generation#handling-generation-timeouts).                                                    |
| Date field named in `field_errors` | Value is neither ISO `"YYYY-MM-DD"` nor an integer ordinal         | Pass either form (ISO accepted since engine 0.31.0; rulebooks need ordinals) — see [Date field values](/reference/errors#date-field-values).    |

<Note>
  **Help improve this page**

  If something here is unclear or missing an example, use the feedback button at the bottom of the page.

  Found a bug? [Open a GitHub issue](https://github.com/Aethis-ai/feedback/issues). Evaluating Aethis for a regulated workflow? [Contact us directly](https://aethis.ai/developer-access).
</Note>
