# Claude, ChatGPT and other AI assistants

> Connect Claude, ChatGPT, Cursor or another MCP client to Tillage so an assistant can look up clients, draft quotes and contracts, and work with invoices.

- URL: https://tillage.ai/docs/integrations/claude-and-chatgpt
- Section: [Integrations](https://tillage.ai/docs/integrations)

Tillage runs an MCP (Model Context Protocol) server, so an AI assistant can work in your account directly: find a client, draft a quote from a project description, create a contract, or check which invoices are unpaid. This page covers connecting, what the assistant can and can't do, and how to revoke access.

## Connection details

| | |
|---|---|
| Server URL | `https://app.tillage.ai/api/mcp` |
| Transport | Streamable HTTP |
| Sign-in | OAuth (you approve access in Tillage), or a Tillage API key |

Most assistants find the sign-in automatically. You'll be sent to a Tillage consent page, where you sign in and approve the access the assistant is asking for. No keys to copy.

## Connect Claude

**Claude (claude.ai or the desktop app):**

1. In Claude's settings, add a custom connector.
2. Enter the URL `https://app.tillage.ai/api/mcp`.
3. Claude opens the Tillage consent page. Sign in and approve.

**Claude Code:**

```bash
claude mcp add --transport http tillage https://app.tillage.ai/api/mcp
```

Then run `/mcp` in Claude Code to finish signing in.

## Connect ChatGPT

ChatGPT can use remote MCP servers as custom connectors, on plans and settings where OpenAI makes them available.

1. In ChatGPT's settings, create a custom connector.
2. Enter the URL `https://app.tillage.ai/api/mcp` and choose OAuth for authentication.
3. Sign in on the Tillage consent page and approve.

ChatGPT's menu names change from time to time; look for connectors or apps in its settings.

## Connect Cursor and other clients

Add the server to `.cursor/mcp.json` in your project, or `~/.cursor/mcp.json` for all projects:

```json
{
  "mcpServers": {
    "tillage": {
      "url": "https://app.tillage.ai/api/mcp"
    }
  }
}
```

Cursor asks you to sign in the first time you use it. Any MCP client that supports remote servers with OAuth connects the same way.

### Use an API key instead

For scripts and automation where no one is there to sign in, use an API key as a bearer token:

1. Go to **Team Settings → Developers**.
2. Under **API Keys**, enter a name and click **Create MCP Key**. This selects all eight read and write scopes for clients, quotes, invoices and contracts.
3. Copy the key. You'll only see it once.
4. Send it as a header:

```json
{
  "mcpServers": {
    "tillage": {
      "url": "https://app.tillage.ai/api/mcp",
      "headers": {
        "Authorization": "Bearer tk_live_..."
      }
    }
  }
}
```

See [API and webhooks](https://tillage.ai/docs/integrations/api-and-webhooks) for more on keys and scopes.

## Teams

- **OAuth connections** act as you, on any team you belong to. Without a team named, the assistant uses your current team.
- **API keys** are locked to the team they were created in.

The assistant can call `list_teams` to see where it can work, and every response says which team it used. If you're on several teams, tell the assistant which one you mean.

## What the assistant can do

| Area | Tools |
|---|---|
| Teams | `list_teams` |
| Clients | `list_clients`, `get_client`, `create_client`, `update_client` |
| Quotes | `list_quotes`, `get_quote`, `create_quote`, `update_quote` |
| Invoices | `list_invoices`, `list_recurring_schedules`, `get_invoice`, `create_invoice`, `update_invoice` |
| Contract templates | `list_contract_templates`, `get_contract_template`, `create_contract_template`, `update_contract_template` |
| Contracts | `list_contracts`, `get_contract`, `create_contract`, `update_contract` |

Two built-in prompts help with drafting:

- `draft_quote` writes a quote from a project description: 4 to 10 phase-based line items priced as hours × rate, saved as a draft. It can also add items to an existing quote.
- `draft_contract_template` writes a reusable contract template with clauses that use [smart variables](https://tillage.ai/docs/reference/smart-variables#contracts) and a signature block.

Some details worth knowing:

- Quotes are priced the way Tillage prices them: hours × rate, with variance and profit margin applied on top. Your team defaults fill in when the assistant doesn't set them. See [Formulas](https://tillage.ai/docs/reference/formulas).
- `list_invoices` filters by status, client, invoice type, issue date or due date. `list_recurring_schedules` shows billing schedules with their next run date.
- `update_invoice` can mark an invoice paid, with a past payment date if you give one.
- `create_invoice` creates an invoice from an approved quote, or a standalone invoice for a client with a due date.

## What it can't do

- **Send email.** Marking a quote, contract or invoice as sent gives the assistant a client link to share, but nothing is emailed. Send from Tillage, or share the link yourself.
- **Delete anything.**
- **Take payments, issue refunds or change settings**, including fee settings and Stripe.
- **Work across teams in one change.**

Everything the assistant creates appears in Tillage like anything else you'd made, so you can review and edit it.

## Revoke access

- **OAuth connections**: go to **Account Settings → Connected Apps** and disconnect the app. Its access ends immediately.
- **API keys**: go to **Team Settings → Developers** and click **Revoke** next to the key.

## Related

- [API and webhooks](https://tillage.ai/docs/integrations/api-and-webhooks)
- [AI quote drafts](https://tillage.ai/docs/quotes/ai-quote-drafts) for AI inside the Tillage app

---

All docs: https://tillage.ai/docs.md  
Site index for AI assistants: https://tillage.ai/llms.txt  
Sign up free: https://app.tillage.ai/signup
