# Rillet MCP connector

The Rillet connector brings your chart of accounts, subsidiaries, customers, products and contracts to Claude, ChatGPT, Cursor and the Elaichi Agent, so each person can look up and update Rillet records inside their own access.

Source: https://elaichi.ai/connectors/rillet/

## Facts

| | |
| --- | --- |
| Application | Rillet |
| Category | Accounting |
| AI tools | 121 |
| Authentication | Connects with an API key |
| Needs your own OAuth app | No |
| MCP endpoint | https://api.elaichi.ai/mcp |
| Works with | Claude, ChatGPT, Cursor, any MCP client, and the Elaichi Agent |
| Tools advertised by name | No. 121 tools is past the 30-tool threshold, so clients use `search_tools` and `execute_tool` |

## What you can ask once Rillet is connected

- Show me contracts created this quarter and their invoice schedules.
- Preview the invoice schedule for the Acme annual contract.
- Which customers have no active contract in Rillet?

## Connect Rillet in Elaichi

This happens once for the organization, before any client is involved.

1. Open Connections, choose Add connection, and pick Rillet.
2. Optionally set Share with, then press Connect.
3. Paste a Rillet API key. One person generates a token in Rillet and pastes it once. Everyone else works through Share with, and never sees it.

Credentials are vaulted and nobody, including the AI, reads them back. The connection becomes a toolbox immediately, so you can curate which Rillet tools are exposed, rename them, or freeze arguments before anyone points a client at it.

## Connect Rillet to Claude

Endpoint: https://api.elaichi.ai/mcp

1. Open Customize, then Connectors.
2. Press Add.
3. Name it, paste the MCP server URL, then Continue.
4. Sign in and approve.

On Team and Enterprise, an Owner adds it once. Everyone else turns it on for themselves.

## Connect Rillet to ChatGPT

Endpoint: https://api.elaichi.ai/mcp

1. Open Plugins, then press the + button.
2. Name it and paste the endpoint into Server URL.
3. Leave Authentication on OAuth, then tick the risk acknowledgement.
4. Press Create, then sign in and approve.

Works on the web today. The plugin directory lives at chatgpt.com/plugins.

## Connect Rillet to Cursor

Endpoint: https://api.elaichi.ai/mcp

1. Open `~/.cursor/mcp.json`.
2. Add the endpoint under `mcpServers`.
3. Reload Cursor, then sign in and approve.

Set up per machine, so repeat it on each computer you work from.

## Connect Rillet to any MCP client

Endpoint: https://api.elaichi.ai/mcp

1. Add the endpoint as a remote MCP server.
2. Sign in and approve.

The Elaichi Agent already has these tools, with nothing to set up.

## What the consent screen decides

Only Read is granted by default, which is not enough to call a Rillet tool. Over MCP there is no trusted place to confirm a write in the moment, so the consent screen is the standing approval rather than a formality. Grant Read and Run tools. Think hard before granting Delete, which reaches into connected apps and cannot be undone.

## What teams do with Rillet through Elaichi

### Preview an invoice schedule before signing

Finance. Ask for the invoice schedule a new contract would produce before it is created in Rillet, and check the billing dates and amounts line up with what the customer agreed.

### Check the chart of accounts across subsidiaries

Accounting. Pull up every account in Rillet, see which subsidiary it belongs to, and add a new account when a new expense category appears.

### Set up a contract from the signed order

Revenue operations. Once the order form is signed, create the Rillet contract with the right customer and products, then pull it back up by ID to confirm it looks right.

### Add a new customer to Rillet quickly

Sales. Create the customer record in Rillet as soon as the deal closes, and fix the billing details when the customer sends a correction.

### Keep the product catalog current

Pricing. List every product in Rillet, update names and prices when packaging changes, and retire products nobody sells anymore.

### See who can do what in Rillet

Controller. List members, roles and role assignments in Rillet before an audit, and spot anyone whose role no longer matches their job.

## Frequently asked questions

### How do I connect Rillet to Claude?

Connect Rillet in Elaichi first, which asks you to paste an API key from your Rillet workspace, then open Claude, go to Customize, then Connectors, then Add, and paste https://api.elaichi.ai/mcp. There is no OAuth application to register in Rillet and no client ID or secret to generate. Once Claude finishes signing you in, Rillet is available in the conversation.

### Does Rillet work with ChatGPT and Cursor as well as Claude?

Yes. Connect Rillet once in Elaichi and the same endpoint, https://api.elaichi.ai/mcp, works in Claude, ChatGPT, Cursor, the Elaichi Agent and any other MCP client. There is nothing separate to set up for each one.

### What can an AI agent actually do with my Rillet data?

It can look up customers, products, contracts, subsidiaries and the chart of accounts in Rillet, create and update customers and products, create contracts, and preview the invoice schedule a contract would produce. It can also list members, roles and who holds which role, and add payment settings. Because Rillet has a large set of tools, short concrete asks like show contracts for Acme work better than long sentences.

### Does connecting Rillet give the AI access to every subsidiary?

No. Every call runs inside the access of the person who signed in, so the AI sees the Rillet subsidiaries, accounts and contracts that person can already see, and nothing more. Elaichi can narrow that further with roles and restrictions, but it can never widen it.

### Can my team share one Rillet connection?

Yes. One person connects Rillet with the API key and shares the connection with a team, and nobody else ever handles the key. Each teammate still signs in to Elaichi as themselves, so the audit log names the person who created a customer or a contract in Rillet, not a shared account.

### Can I stop an agent from deleting or changing things in Rillet?

Yes. Restrictions in Elaichi work per action, so you can allow reading Rillet contracts and customers while blocking deleting a customer or updating a product. A blocked action is never shown to Claude, ChatGPT or Cursor at all, so no prompt can reach it.

### What happens to a Rillet connection when someone leaves?

Offboarding the person in Elaichi ends their Rillet access at once, in every client they used. If they had shared a Rillet connection with the team, it keeps working for everyone else. When you want Rillet gone entirely, disconnect it once in Elaichi and it disappears from Claude, ChatGPT, Cursor and the Elaichi Agent together.

## All 121 Rillet tools

Every tool below is callable through https://api.elaichi.ai/mcp once Rillet is connected, subject to the toolbox it is in and the restrictions on the caller.

- **List all Rillet accounts** (List). List all accounts in the Rillet chart of accounts for the organization tied to the API credentials. Returns: id, code, name, type, subtype, status, intercompany, updated_at. Account ids are the stable identifiers used when creating journal entries, bills, and other postings.
- **Create a Rillet account** (Create). Create an account in the Rillet chart of accounts. Returns the created account including its id, code, name, type, subtype, status, intercompany flag, and updated_at; currency is inherited from the organization and status is set to ACTIVE. Requires the CreateAccountRequest JSON body (see the create-an-account reference for its required fields).
- **List all Rillet subsidiaries** (List). List all subsidiaries in Rillet. Returns: id, currency, timezone, trade_name, type. Use the returned subsidiary ids on endpoints that accept subsidiary_id, such as contracts, invoices, and reports.
- **Get single Rillet subsidiary by ID** (Get). Get a single Rillet subsidiary by id. Returns: id, currency, timezone, trade_name, type. Required: id. Call list-all-subsidiaries first if you don't yet know which subsidiary id to use.
- **List all Rillet organizations** (List). Retrieve the Rillet organization profile tied to the API credentials in use (the current org). Use it to confirm the organization id, display name, and other org-level settings in integrations. Returns: id, currency, timezone, trade_name, created_at, updated_at.
- **List all Rillet members** (List). List organization members in rillet. Returns each member's identity: id, user_id, email, first_name, last_name, and status. Does not include role assignments — use list-role-assignments to see which member holds which role.
- **List all Rillet roles** (List). List every role defined in the organization, each with the flat set of permission keys it grants. Returns: id, name, description, is_system_role, permissions. Treat each permission key as an opaque, colon-delimited identifier — do not rely on its internal structure.
- **List all Rillet role assignments** (List). List role assignments in Rillet. Returns: id, member_id, role_id, scope. Assignments reference the assigned organization member, role, and assignment scope by id only; resolve names via the roles and members endpoints, as this endpoint is not the source of truth for role or subsidiary names.
- **List all Rillet products** (List). List Rillet products — sellable goods and services for accounts receivable (contracts, invoices). Returns each product's id and its catalog attributes; supports optional status and currency filters.
- **Create a Rillet product** (Create). Create a product (good or service) in Rillet's catalog for use on contracts and invoices. Returns the created product's id and its catalog attributes, including pricing and revenue behavior. Required: a ProductRequest request body.
- **Get single Rillet product by ID** (Get). Get a single Rillet product by id. Returns the product's id and its catalog attributes, including the pricing configuration used on contracts and invoices. Required: id (UUID of the product).
- **Update a Rillet product by ID** (Update). Update a product definition in Rillet's catalog by id. Returns the updated product's id and its catalog attributes. Required: id plus a full ProductRequest body — this is a full-replace operation (PUT semantics): retrieve the product first and submit every field, since omitted fields may be cleared.
- **Delete a Rillet product by ID** (Delete). Delete a Rillet product by id. Returns an empty 204 response on success. Ensure no in-flight contracts or invoices still require the product before deleting. Required: id.
- **List all Rillet customers** (List). List Rillet accounts-receivable customers with pagination and optional name or external-reference filters. Returns: id, updated_at, name, name_on_invoice, address, shipping_address, emails, external_references, payment_terms, send_invoices_automatically, send_payment_reminders, allow_online_payments, fields, created_at. Sorted descending by created by default.
- **Create a Rillet customer** (Create). Create a customer in the Rillet Accounts Receivable catalog. Returns: id, updated_at, name, name_on_invoice, address, shipping_address, emails, external_references, payment_terms, send_invoices_automatically, send_payment_reminders, allow_online_payments, fields, created_at. Required: name. When address is provided, line1, city, state (2-letter code), zip_code, and country are all required.
- **Get single Rillet customer by ID** (Get). Get a single Rillet customer by id, including billing profile details needed for updates. Returns: id, updated_at, name, name_on_invoice, address, shipping_address, emails, external_references, payment_terms, send_invoices_automatically, send_payment_reminders, allow_online_payments, fields, created_at. Required: id.
- **Update a Rillet customer by ID** (Update). Update a Rillet customer by id in the Accounts Receivable catalog. Full-replace operation: omitting any body field sets it to null, so retrieve the customer first and include all existing fields with your changes. Returns: id, updated_at, name, name_on_invoice, address, shipping_address, emails, external_references, payment_terms, send_invoices_automatically, send_payment_reminders,…
- **Delete a Rillet customer by ID** (Delete). Permanently delete a Rillet customer by id. Verify no active contracts or open invoices reference the customer first. Returns an empty 204 response on success. Required: id.
- **Get single Rillet settings payment by ID** (Get). Get the payment method configured for auto-payment for a customer in Rillet. Returns the customer's configured auto-payment payment method object; the available docs do not enumerate its fields. Required: id (the customer's UUID).
- **Create a Rillet settings payment** (Create). Set up auto-payment for a customer in Rillet. Kicks off the setup flow and returns a URL the customer must visit to complete setup (or to update the payment method if one is already configured). Returns the setup result object; the available docs do not enumerate its fields. Required: customer_id.
- **Create a Rillet contracts preview invoice schedule** (Create). Preview the invoice schedule a contract would produce in Rillet, without creating the contract or persisting anything. Requires a JSON request body describing the contract. Returns the computed invoice schedule object.
- **List all Rillet contracts** (List). List all contracts in Rillet with pagination and filters for subsidiary, customer, status, and start/end date ranges. Useful for discovering contract ids, checking lifecycle state, or driving reporting extracts. Returns each contract with id, status, created_at, and updated_at.
- **Create a Rillet contract** (Create). Create a contract in Rillet, choosing the FULL scope when Rillet generates and sends the invoices (invoice numbers assigned automatically), or REVENUE_RECOGNITION_ONLY when contracts and invoices are issued from an external system and only recorded in Rillet for accounting. Returns the created contract including id, status, items, and schedules. Requires a JSON contract creation payload.
- **Get single Rillet contract by ID** (Get). Get a single contract in Rillet by id. Returns the expanded contract including id, status, items, and schedules — always retrieve before issuing a full update so you preserve fields you do not intend to clear. Required: id.
- **Delete a Rillet contract by ID** (Delete). Delete a contract in Rillet by id. Permanently removes the contract — confirm downstream invoices, revenue schedules, and integrations no longer depend on it first. Returns an empty 204 response on success. Required: id.
- **Create a Rillet contract amendment** (Create). Amend a contract in Rillet to add items, retire items, or change pricing or invoicing after go-live, preserving historical billing context. Returns the amended contract as the expanded contract object defined by Rillet's ExpandedContract schema. Use the preview amendment endpoint to dry-run the financial impact before committing. Required: contract_id and an amendment request body.
- **Create a Rillet amendments preview** (Create). Preview how a Rillet contract will look after an amendment, without applying it. Returns the expanded contract including its id, items, schedules, and metadata. Required: contract_id (UUID of the contract) plus an amendment request body (see body schema). The preview has no effect on the actual contract.
- **Rillet contract ends bulk update** (Update). End an open-ended contract in Rillet by setting an explicit end date on a contract that previously had no close date; downstream invoicing and revenue recognition honor the new boundary. Returns an empty 204 response on success. Required: contract_id.
- **Get single Rillet draft contract by ID** (Get). Get a draft contract by id, including its line items and any attached external references. Returns: id, external_references, subsidiary_id, customer_id, name, amount, close_date, start_date, end_date, scope, items, line_items, created_at, updated_at. Required: id.
- **Update a Rillet draft contract by ID** (Update). Update a draft contract by id; items and external_references on the record are fully replaced, and a 404 is returned if the id is not a draft contract in the organization. Returns the updated draft contract including id, external_references, line_items, and updated_at. Required: id.
- **Delete a Rillet draft contract by ID** (Delete). Delete a draft contract by id, permanently removing it along with its line items and external references — use this to programmatically reject a draft instead of using the Rillet UI. Returns an empty 204 response on success. Required: id.
- **List all Rillet draft contracts** (List). List draft contracts staged in Rillet's Draft queue for a human to approve or reject before they become active contracts, with cursor pagination. Returns: id, external_references, subsidiary_id, customer_id, name, amount, close_date, start_date, end_date, scope, items, line_items, created_at, updated_at.
- **Create a Rillet draft contract** (Create). Create a draft contract staged in Rillet's Draft state for a human to approve or reject; supply an external_references entry with a stable (type, id) pair to deduplicate retries. Returns the created draft contract including id, external_references, line_items, and created_at. Promotion to an active contract happens only via the Rillet UI.
- **Get single Rillet contract item usage by ID** (Get). List all usage records for a contract item in Rillet, newest first. Returns the UsageRecords payload plus a pagination object with next_cursor for keyset paging. Required: id (the contract item's UUID).
- **Rillet contract item usages bulk update** (Update). Upsert usage records for a contract item in Rillet: dates with no recorded usage get a new row, dates already recorded are overwritten. Returns the updated UsageRecords payload. Required: contract_item_id and a usage records body.
- **Rillet contract item usages bulk delete** (Delete). Delete a contract item's usage record in Rillet for a single calendar date, without resending the entire usage payload. Returns an empty 204 response on success. Required: contract_item_id and date.
- **List all Rillet invoices** (List). List all AR invoices in Rillet with filters for subsidiary, customer, overdue state, payment status, and update timestamp. Returns each invoice record with id and attributes (line items, tax breakdown, contract/customer linkage). Max 100 per page.
- **Create a Rillet invoice** (Create). Create an invoice in Rillet under a FULL scope (Rillet generates and sends the invoice and automatically assigns the invoice number) or a REVENUE_RECOGNITION_ONLY scope (invoice is issued externally and recorded for accounting, with the invoice number supplied manually). Returns the created invoice record: id, attributes.
- **Get single Rillet invoice by ID** (Get). Get a single Rillet invoice by id, including its line items, tax breakdown, and linkage to contracts or customers. Returns the invoice record: id, attributes. Required: id (invoice UUID).
- **Update a Rillet invoice by ID** (Update). Update a Rillet invoice by id. This is a full-replace (PUT) operation: every field must be included in the body, since omitted fields are set to null and wiped — retrieve the invoice first, then send all existing fields plus your changes. Returns the updated invoice record: id, attributes. Required: id.
- **Delete a Rillet invoice by ID** (Delete). Delete a Rillet invoice by id, permanently removing it when your policy allows (for example draft or voided states); confirm no downstream payments or revenue postings still depend on it. Returns an empty 204 response on success. Required: id.
- **Update a Rillet invoice tax by ID** (Update). Update taxes for an invoice in Rillet — recalculates or replaces the invoice's tax lines using the supplied tax payload, e.g. after changing taxable addresses or when integrating an external tax engine result. Returns the updated invoice object: id, attributes. Required: invoice_id and the tax payload body.
- **List all Rillet invoice payments** (List). List all invoice payments in Rillet across every invoice in the organization, independent of which invoice each payment settled. Returns payment records including their public status, amount, currency, and created_at. Supports an updated.gt timestamp filter for incremental syncs; sorted descending by created or updated via sort_by.
- **Rillet invoice sent status bulk update** (Update). Update the sent status of an invoice in Rillet — set the sent flag true once the billing system or email provider confirms delivery to the customer, or false while the document is still internal-only. Returns an empty 204 response on success. Required: invoice_id, sent.
- **List all Rillet credit memos** (List). List customer credit memos in Rillet with pagination. Returns each memo's id, remaining balance, applications, tax metadata, and updated_at; use memo ids with retrieve-a-credit-memo before updates or when applying credits to invoices. Required: updated.gt to filter by update timestamp.
- **Create a Rillet credit memo** (Create). Create a credit memo in Rillet that reduces receivable exposure before it is allocated to invoices. Returns the CreditMemo record including its id, remaining balance, applications, and tax metadata. The request body must capture subsidiary, customer, line-level reasons, and tax treatment for audit.
- **Get single Rillet credit memo by ID** (Get). Get a credit memo by id in Rillet. Returns the full CreditMemo payload including its id, remaining balance, applications, and tax metadata to echo on PUT updates. Always retrieve before editing — update-a-credit-memo replaces the entire resource when fields are omitted. Required: id.
- **Update a Rillet credit memo by ID** (Update). Update a credit memo by id in Rillet. Full-replace semantics: all fields must be included in the request body — omitting any field sets it to null and wipes existing data. Always retrieve-a-credit-memo first, then echo ALL existing fields plus your changes. Returns the updated CreditMemo: id, remaining balance, applications, tax metadata, updated_at. Required: id.
- **Delete a Rillet credit memo by ID** (Delete). Delete a credit memo by id in Rillet, typically while it is still draft or unused. Confirm no invoice applications depend on it first. Returns an empty 204 response on success. Required: id.
- **Update a Rillet credit memo tax by ID** (Update). Refresh tax quotes on an existing Rillet credit memo using the same structured tax payload as invoice tax updates, stamped with taxesCalculatedAt for auditability. Returns: id, subsidiary_id, credit_memo_number, customer_id, items, credit_memo_date, address, status, net_amount, total, applied_amount, remaining_amount, applications, exchange_rate, taxed_amount, external_references, updated_at,…
- ...and 71 more tools. Call `tools/list` via the MCP endpoint, or see the full catalog via the API, for the complete set.
