---
title: "Pennylane MCP server for AI agents - actionlake"
description: "Give Claude 175 Pennylane actions through one MCP server: customer invoices. Your agent never holds the credential. 100,000 calls a month free."
canonical: https://actionlake.com/connectors/pennylane
updated: 2026-10-23
---

Connectors · Accounting & finance

# Pennylane MCP server for AI agents.

actionlake is an MCP gateway: one remote MCP server that connects Claude and other MCP clients to Pennylane and the rest of your systems. It gives your agent 175 Pennylane actions (97 reads, 70 writes and 8 that wait for a confirmation) and holds the Pennylane credential itself, so the agent never does. It paces Pennylane's limits and records every call.

[Connect Pennylane free](https://actionlake.com/console?start=sandbox) [See pricing](https://actionlake.com/pricing)

100,000 free calls a month. No card, no email, no password: press Start a free sandbox on the next screen and keep the key it shows you.

`claude mcp add --transport http actionlake https://connect.actionlake.com/mcp`

the first call

```
do {
  action: "pennylane.customer_invoices.list",
  intent: "check which Pennylane account is connected"
}
# List customer invoices · read · 1 upstream call
```

- 175 actions in one signed file
- 97 read look, never change
- 70 write create and update
- 8 wait for a yes destructive, confirmed first

Set up

## Connect Pennylane in three steps.

1. 01
   ### Add actionlake to Claude.
   Run the command once in Claude Code; its consent page can create a free sandbox: 100,000 calls a month, no card. In the Claude app, add a custom connector with the URL below and paste your key on the consent page. Creating a new sandbox from the Claude app is not yet tested by us.
   `https://connect.actionlake.com/mcp`
2. 02
   ### Connect Pennylane.
   Bearer token. No consent screen: your agent can connect it for you, but the key then passes through your chat. To keep it out of the model's context, paste it in the console instead. actionlake stores what you paste write-only, sealed under your tenant's key.
   - `access_token` Pennylane API token: in Pennylane open Settings > Connectivity > Developers and generate a Company API token (pick…
   - `company_id` Your Pennylane company id
   ```
   account { op: "connections.requirements", service: "pennylane" }
   # free: exactly what to paste, and what is found for you
   ```
3. 03
   ### Make the first call. Check before a write.
   Ask in plain words; Claude picks the action. Before anything changes, `check` validates the call and prices it, for free.
   ```
   do    { action: "pennylane.customer_invoices.list" }
   # list customer invoices · read · 1 upstream call
   check { action: "pennylane.customer_invoices.create", input: { … } }
   # free: inputs, permissions, cost and confirmations, nothing sent
   ```

Pennylane at a glance

**Sign-in**

Bearer token. No consent screen: your agent can connect it for you, but the key then passes through your chat. To keep it out of the model's context, paste it in the console instead.

**You provide**

`access_token`

**Setup fields**

`company_id`

**Limits we pace to**

25 calls per 5 seconds, per connection

**API covered**

Pennylane Company API 2.0 (OpenAPI 3.0.1)`app.pennylane.com`

**Built from**

Pennylane's documentation, read 23 October 2026[pennylane.readme.io](https://pennylane.readme.io/openapi/accounting.json) [pennylane.readme.io](https://pennylane.readme.io/)

**Service file**

Version 1.0.0, signed (Ed25519)

**Cached reads**

97 of 97 reads, for up to 5 minutes; a write clears what it affects

**Shared entities**

9, so ask can line Pennylane up with your other systems

**Data**

Processed and stored in Sydney, Australia. No US region yet

Capabilities

## What an AI agent can do in Pennylane.

175 actions in 33 areas. Every one carries its effect, so a key can allow the reads and hold the rest.

- **97** read look, never change
- **70** write create and update
- **8** destructive wait for a confirmation

1. ### Customer invoices
   23
   9 read · 12 write · 2 destructive
   List customer invoices · Create a customer invoice · Retrieve a customer invoice · Update a customer invoice
2. ### Supplier invoices
   15
   6 read · 8 write · 1 destructive
   List supplier invoices · Retrieve a supplier invoice · Update a supplier invoice · List invoice lines for a supplier invoice
3. ### Customers
   12
   6 read · 5 write · 1 destructive
   List customers (company and individual) · Create a customer (company or individual) · Retrieve a customer · Update a customer (company or individual)
4. ### Changelogs
   11
   11 read · 0 write · 0 destructive
   Get customer invoices changes events · Get customer changes events · Get ledger entry category change events · Get ledger entry change events
5. ### Quotes
   9
   5 read · 4 write · 0 destructive
   List quotes · Create a quote · Retrieve a quote · Update a quote
6. ### Commercial documents
   8
   5 read · 3 write · 0 destructive
   Create a commercial document · List commercial documents · Retrieve a commercial document · Update a commercial document
7. ### Ledger entry lines
   7
   4 read · 2 write · 1 destructive
   List ledger entry lines · Retrieve a Ledger entry line · List categories of a Ledger Entry line · Letter ledger entry lines
8. ### Transactions
   7
   4 read · 3 write · 0 destructive
   List transactions · Create a transaction · Retrieve a transaction · Update a transaction

**25 more areas · 83 actions**

- Billing subscriptions **6**
- Exports **6**
- Ledger entries **6**
- Suppliers **6**
- Category groups **5**
- Gocardless mandates **5**
- Sepa mandates **5**
- Webhook subscriptions **5**
- Categories **4**
- Ledger accounts **4**
- Pro account **4**
- Products **4**
- Bank accounts **3**
- Company customers **3**
- Individual customers **3**
- Journals **3**
- Purchase requests **3**
- Bank establishments **1**
- Billing email templates **1**
- Company **1**
- Customer invoice templates **1**
- Fiscal years **1**
- Me **1**
- Pa registrations **1**
- Trial balance **1**

Top actions

## The Pennylane API, shaped for agents.

The ids your agent types, what each does, and the one name it shares with other systems. 55 of Pennylane's 57 action names are shared with at least one other connector, so an agent learns them once.

| Action | What it does | Effect | Same name in |
| --- | --- | --- | --- |
| `pennylane.customer_invoices.list` List customer invoices | List customer invoices. | read | `finance.invoice.list` 101 connectors |
| `pennylane.quotes.list` List quotes | List quotes. | read | `finance.quote.list` 52 connectors |
| `pennylane.customers.list` List customers (company and individual) | List customers (company and individual). | read | `crm.company.list` 162 connectors |
| `pennylane.ledger_accounts.list` List Ledger Accounts | List Ledger Accounts. | read | `finance.ledger_account.list` 36 connectors |
| `pennylane.bank_accounts.list` List bank accounts | List bank accounts. | read | `finance.bank_account.list` 35 connectors |
| `pennylane.supplier_invoices.list` List supplier invoices | List supplier invoices. | read | `finance.bill.list` 31 connectors |
| `pennylane.ledger_entries.list` List Ledger Entries | List Ledger Entries. | read | `finance.journal_entry.list` 25 connectors |
| `pennylane.products.list` List products | List products. | read | `finance.billing_item.list` 24 connectors |
| `pennylane.customer_invoices.create` Create a customer invoice | Create a customer invoice. | write | `finance.invoice.create` 74 connectors |
| `pennylane.quotes.create` Create a quote | Create a quote. | write | `finance.quote.create` 52 connectors |
| `pennylane.customers.create` Create a customer (company or individual) | Create a customer (company or individual). | write | `crm.company.create` 142 connectors |
| `pennylane.customer_invoices.delete` Delete draft invoice | Delete draft invoice. | destructive | `finance.invoice.delete` 56 connectors |

Try it

## Prompts to paste into Claude.

Each one names the Pennylane actions it will call, so you know what it reads and what it changes before you send it.

1. Read read
   Which Pennylane invoices are more than 30 days overdue? Group them by customer with the total owed.
   calls `pennylane.customer_invoices.list`
2. Write write
   Create a customer invoice in Pennylane. Show me exactly what you will send before you save it.
   calls `pennylane.customer_invoices.create`
3. Across systems read
   Which Pennylane companies have invoices in ConnectWise PSA, and how many each?
   calls `pennylane.customers.list` `connectwise_manage.invoices.list`

Across your systems

## Pennylane, joined to the rest of your business.

One `ask` fetches from Pennylane and another system, joins the rows on the same customer on our side, and hands your agent the answer, not every row.

- Which Pennylane companies have invoices in ConnectWise PSA, and how many each?
  `pennylane.customers.list` + `connectwise_manage.invoices.list`, on `crm.company` · [ConnectWise PSA](https://actionlake.com/connectors/connectwise-psa)
- Which Pennylane companies have tickets in HubSpot CRM, and how many each?
  `pennylane.customers.list` + `hubspot_crm.tickets.list`, on `crm.company` · [HubSpot CRM](https://actionlake.com/connectors/hubspot-crm)

Also mapped by other connectors `crm.company` **227** `finance.invoice` **91** `finance.quote` **45** `finance.ledger_account` **32** `finance.bill` **27** `finance.bank_account` **25** `finance.billing_item` **14** `finance.journal_entry` **9**

ask

```
ask {
  intent: "which Pennylane companies have invoices in ConnectWise PSA, and how many each",
  steps: [
    { action: "pennylane.customers.list", as: "co", input: {}, limit: 100, max_pages: 5 },
    { action: "connectwise_manage.invoices.list", as: "inv", input: {}, limit: 100, max_pages: 5 },
    { join: {
        left: "co",
        right: "inv",
        on: "crm.company",
        group_by: "co.name",
        select: ["co.name", "count(inv.id) as invoices"]
    } }
  ]
}
```

Example. Run it through check first: it validates the steps and prices them, and it is free.

Governance for Pennylane

## Destructive actions wait for a yes.

8 Pennylane actions are destructive. These are all of them:

- Delete draft invoice `pennylane.customer_invoices.delete`
- Delete an SEPA mandate `pennylane.sepa_mandates.delete`
- Delete a webhook subscription `pennylane.webhook_subscriptions.delete`
- Delete a contact of a customer `pennylane.customers.contacts_delete`
- Unletter ledger entry lines `pennylane.ledger_entry_lines.unletter`
- Unmatch a transaction to a customer invoice `pennylane.customer_invoices.matched_transactions_delete`
- Unmatch a transaction to a supplier invoice `pennylane.supplier_invoices.matched_transactions_delete`
- Cancel a Gocardless mandate `pennylane.gocardless_mandates.cancel`

A destructive action runs only with `confirm: true`. Under the `human` policy the agent cannot confirm for itself: the run stops until a named person approves, in the console or from a signed link in an email. The cap on a key is refused before the call is sent, never after.

do pennylane.customer_invoices.delete confirm_policy: **human**

Delete draft invoice?

**intent:** the user asked me to delete draft invoice

run suspended · waiting for a named person · key _pennylane-agent_ cannot confirm itself

In the console, or from an emailed signed link.

a key for this connector

```
account {
  op: "keys.create", name: "pennylane-agent",
  allowed_actions: ["pennylane.*"], cap_calls: 2000,
  confirm_policy: "human_for_writes",
  approval_rules: [
    { match: "pennylane.customer_invoices.delete", approver: "lead@example.com" },
    { match: "pennylane.sepa_mandates.delete", approver: "lead@example.com" },
    { match: "pennylane.webhook_subscriptions.delete", approver: "lead@example.com" }
  ]
}
```

Illustrative. Scoped to Pennylane only, capped at 2,000 upstream calls, every write confirmed, and the destructive ones approved by a named person.

Cost

## What Pennylane costs on actionlake.

Every Pennylane action is one upstream call, the only thing actionlake bills. Searching, `check`, `cost`, `account` and any call Pennylane refused with 401, 403, 429 or a 5xx are free. Paid plans start at US$49 a month for 250,000 calls, with overage from US$0.30 down to US$0.18 per 1,000.

- 1 upstream call per action all 175 Pennylane actions
- 175 actions page each page of a long list is one call
- 97 reads can be cached a cache hit costs nothing
- 100,000 calls a month, free paid plans from US$49 a month for 250,000

[See pricing](https://actionlake.com/pricing)

Action index

## Every Pennylane action.

175 actions by area: the id your agent calls, what it does, and its effect.

**Customer invoices 23**

- `pennylane.customer_invoices.appendices_list` List appendices of a customer invoice read
- `pennylane.customer_invoices.categories_list` List categories of a customer invoice read
- `pennylane.customer_invoices.categories_update` Categorize a customer invoice write
- `pennylane.customer_invoices.create` Create a customer invoice write
- `pennylane.customer_invoices.create_from_quote` Create a customer invoice from a quote write
- `pennylane.customer_invoices.custom_header_fields_list` List custom header fields for a customer invoice read
- `pennylane.customer_invoices.delete` Delete draft invoice destructive
- `pennylane.customer_invoices.finalize` Turn the draft invoice into a finalized invoice. write
- `pennylane.customer_invoices.get` Retrieve a customer invoice read
- `pennylane.customer_invoices.import` Import an invoice with file attached write
- `pennylane.customer_invoices.invoice_line_sections_list` List invoice line sections for a customer invoice read
- `pennylane.customer_invoices.invoice_lines_list` List invoice lines for a customer invoice read
- `pennylane.customer_invoices.link_credit_note` Link a credit note to a customer invoice write
- `pennylane.customer_invoices.list` List customer invoices read
- `pennylane.customer_invoices.mark_as_paid` Mark a customer invoice as paid write
- `pennylane.customer_invoices.matched_transactions_create` Match a transaction to a customer invoice write
- `pennylane.customer_invoices.matched_transactions_delete` Unmatch a transaction to a customer invoice destructive
- `pennylane.customer_invoices.matched_transactions_list` List matched transactions for a customer invoice read
- `pennylane.customer_invoices.payments_list` List payments for a customer invoice read
- `pennylane.customer_invoices.send_by_email` Send a customer invoice by email write
- `pennylane.customer_invoices.send_to_pa` Send a customer e-invoice to PA write
- `pennylane.customer_invoices.update` Update a customer invoice write
- `pennylane.customer_invoices.update_imported` Update an Imported customer invoice write

**Supplier invoices 15**

- `pennylane.supplier_invoices.categories_list` List categories of a supplier invoice read
- `pennylane.supplier_invoices.categories_update` Categorize a supplier invoice write
- `pennylane.supplier_invoices.e_invoice_status` Update e-invoice status for a supplier invoice write
- `pennylane.supplier_invoices.get` Retrieve a supplier invoice read
- `pennylane.supplier_invoices.import` Import a supplier invoice with a file attached write
- `pennylane.supplier_invoices.invoice_lines_list` List invoice lines for a supplier invoice read
- `pennylane.supplier_invoices.linked_purchase_requests_create` Link a purchase request to a supplier invoice write
- `pennylane.supplier_invoices.list` List supplier invoices read
- `pennylane.supplier_invoices.matched_transactions_create` Match a transaction to a supplier invoice write
- `pennylane.supplier_invoices.matched_transactions_delete` Unmatch a transaction to a supplier invoice destructive
- `pennylane.supplier_invoices.matched_transactions_list` List matched transactions for a supplier invoice read
- `pennylane.supplier_invoices.payment_status` Update a supplier invoice payment status write
- `pennylane.supplier_invoices.payments_list` List payments for a supplier invoice read
- `pennylane.supplier_invoices.update` Update a supplier invoice write
- `pennylane.supplier_invoices.validate_accounting` Validate the accounting of a supplier invoice write

**Customers 12**

- `pennylane.customers.categories_list` List categories of a customer read
- `pennylane.customers.categories_update` Categorize a customer write
- `pennylane.customers.contacts_create` Create a contact of a customer write
- `pennylane.customers.contacts_delete` Delete a contact of a customer destructive
- `pennylane.customers.contacts_get` Retrieve a contact of a customer read
- `pennylane.customers.contacts_list` List contacts of a customer read
- `pennylane.customers.contacts_update` Update a contact of a customer write
- `pennylane.customers.create` Create a customer (company or individual) write
- `pennylane.customers.electronic_billing_addresses_list` List eligible electronic billing addresses for a customer read
- `pennylane.customers.get` Retrieve a customer read
- `pennylane.customers.list` List customers (company and individual) read
- `pennylane.customers.update` Update a customer (company or individual) write

**Changelogs 11**

- `pennylane.changelogs.customer_invoices_list` Get customer invoices changes events read
- `pennylane.changelogs.customers_list` Get customer changes events read
- `pennylane.changelogs.ledger_entries_categories_list` Get ledger entry category change events read
- `pennylane.changelogs.ledger_entries_list` Get ledger entry change events read
- `pennylane.changelogs.ledger_entry_lines_categories_list` Get ledger entry line category change events read
- `pennylane.changelogs.ledger_entry_lines_list` Get ledger entry line change events read
- `pennylane.changelogs.products_list` Get product change events read
- `pennylane.changelogs.quotes_list` Get quotes changes events read
- `pennylane.changelogs.supplier_invoices_list` Get supplier invoices changes events read
- `pennylane.changelogs.suppliers_list` Get supplier changes events read
- `pennylane.changelogs.transactions_list` Get transaction change events read

**Quotes 9**

- `pennylane.quotes.appendices_list` List appendices of a quote read
- `pennylane.quotes.create` Create a quote write
- `pennylane.quotes.get` Retrieve a quote read
- `pennylane.quotes.invoice_line_sections_list` List invoice line sections for a quote read
- `pennylane.quotes.invoice_lines_list` List invoice lines for a quote read
- `pennylane.quotes.list` List quotes read
- `pennylane.quotes.send_by_email` Send a quote by email write
- `pennylane.quotes.update` Update a quote write
- `pennylane.quotes.update_status` Update status of a quote write

**Commercial documents 8**

- `pennylane.commercial_documents.appendices_list` List appendices of a commercial document read
- `pennylane.commercial_documents.create` Create a commercial document write
- `pennylane.commercial_documents.get` Retrieve a commercial document read
- `pennylane.commercial_documents.invoice_line_sections_list` List invoice line sections for a commercial document read
- `pennylane.commercial_documents.invoice_lines_list` List invoice lines for a commercial document read
- `pennylane.commercial_documents.list` List commercial documents read
- `pennylane.commercial_documents.send_by_email` Send a commercial document by email write
- `pennylane.commercial_documents.update` Update a commercial document write

**Ledger entry lines 7**

- `pennylane.ledger_entry_lines.categories_list` List categories of a Ledger Entry line read
- `pennylane.ledger_entry_lines.categories_update` Link Analytical Categories to a Ledger Entry line write
- `pennylane.ledger_entry_lines.get` Retrieve a Ledger entry line read
- `pennylane.ledger_entry_lines.letter` Letter ledger entry lines write
- `pennylane.ledger_entry_lines.lettered_ledger_entry_lines_list` List ledger entry lines lettered to a given ledger entry line read
- `pennylane.ledger_entry_lines.list` List ledger entry lines read
- `pennylane.ledger_entry_lines.unletter` Unletter ledger entry lines destructive

**Transactions 7**

- `pennylane.transactions.categories_list` List categories of a bank transaction read
- `pennylane.transactions.categories_update` Categorize a bank transaction write
- `pennylane.transactions.create` Create a transaction write
- `pennylane.transactions.get` Retrieve a transaction read
- `pennylane.transactions.list` List transactions read
- `pennylane.transactions.matched_invoices_list` List invoices matched to a bank transaction read
- `pennylane.transactions.update` Update a transaction write

**Billing subscriptions 6**

- `pennylane.billing_subscriptions.create` Create a billing subscription write
- `pennylane.billing_subscriptions.get` Get a billing subscription read
- `pennylane.billing_subscriptions.invoice_line_sections_list` List the invoice line sections of a billing subscription read
- `pennylane.billing_subscriptions.invoice_lines_list` List invoice lines for a billing subscription read
- `pennylane.billing_subscriptions.list` List billing subscriptions read
- `pennylane.billing_subscriptions.update` Update a billing subscription write

**Exports 6**

- `pennylane.exports.analytical_general_ledgers_create` Create an Analytical General Ledger export write
- `pennylane.exports.analytical_general_ledgers_get` Retrieve an Analytical General Ledger export read
- `pennylane.exports.fecs_create` Create an FEC export write
- `pennylane.exports.fecs_get` Retrieve an FEC export read
- `pennylane.exports.general_ledgers_create` Create a General Ledger export write
- `pennylane.exports.general_ledgers_get` Retrieve a General Ledger export read

**Ledger entries 6**

- `pennylane.ledger_entries.create` Create a ledger entry write
- `pennylane.ledger_entries.dms_files_list` List DMS files of a Ledger Entry read
- `pennylane.ledger_entries.get` Retrieve a Ledger entry read
- `pennylane.ledger_entries.ledger_entry_lines_list` List ledger entry lines of a Ledger Entry read
- `pennylane.ledger_entries.list` List Ledger Entries read
- `pennylane.ledger_entries.update` Update a ledger entry write

**Suppliers 6**

- `pennylane.suppliers.categories_list` List categories of a supplier read
- `pennylane.suppliers.categories_update` Categorize a supplier write
- `pennylane.suppliers.create` Create a Supplier write
- `pennylane.suppliers.get` Retrieve a supplier read
- `pennylane.suppliers.list` List suppliers read
- `pennylane.suppliers.update` Update a supplier write

**Category groups 5**

- `pennylane.category_groups.categories_list` List categories of a category group read
- `pennylane.category_groups.create` Create a category group write
- `pennylane.category_groups.get` Retrieve a category group read
- `pennylane.category_groups.list` List category groups read
- `pennylane.category_groups.update` Update a category group write

**Gocardless mandates 5**

- `pennylane.gocardless_mandates.associate` Associate a GoCardless mandate to a customer write
- `pennylane.gocardless_mandates.cancel` Cancel a Gocardless mandate destructive
- `pennylane.gocardless_mandates.get` Get a Gocardless mandate read
- `pennylane.gocardless_mandates.list` List gocardless mandates read
- `pennylane.gocardless_mandates.mail_request_create` Send a GoCardless mandate email request write

**Sepa mandates 5**

- `pennylane.sepa_mandates.create` Create an SEPA mandate write
- `pennylane.sepa_mandates.delete` Delete an SEPA mandate destructive
- `pennylane.sepa_mandates.get` Get an SEPA mandate read
- `pennylane.sepa_mandates.list` List SEPA mandates read
- `pennylane.sepa_mandates.update` Update an SEPA mandate write

**Webhook subscriptions 5**

- `pennylane.webhook_subscriptions.create` Create a webhook subscription write
- `pennylane.webhook_subscriptions.delete` Delete a webhook subscription destructive
- `pennylane.webhook_subscriptions.get` Get a webhook subscription read
- `pennylane.webhook_subscriptions.list` List webhook subscriptions read
- `pennylane.webhook_subscriptions.update` Update a webhook subscription write

**Categories 4**

- `pennylane.categories.create` Create a category write
- `pennylane.categories.get` Retrieve a category read
- `pennylane.categories.list` List categories read
- `pennylane.categories.update` Update a category write

**Ledger accounts 4**

- `pennylane.ledger_accounts.create` Create a ledger account write
- `pennylane.ledger_accounts.get` Get a ledger account read
- `pennylane.ledger_accounts.list` List Ledger Accounts read
- `pennylane.ledger_accounts.update` Update a ledger account write

**Pro account 4**

- `pennylane.pro_account.mandate_migrations_create` Migrate a mandate to Pro Account write
- `pennylane.pro_account.mandate_migrations_list` List mandate migration candidates read
- `pennylane.pro_account.mandate_request_create` Send a Pro Account SEPA mandate request write
- `pennylane.pro_account.mandates_list` List Pro Account payment mandates read

**Products 4**

- `pennylane.products.create` Create a product write
- `pennylane.products.get` Retrieve a product read
- `pennylane.products.list` List products read
- `pennylane.products.update` Update a product write

**Bank accounts 3**

- `pennylane.bank_accounts.create` Create a bank account write
- `pennylane.bank_accounts.get` Retrieve a bank account read
- `pennylane.bank_accounts.list` List bank accounts read

**Company customers 3**

- `pennylane.company_customers.create` Create a company customer write
- `pennylane.company_customers.get` Retrieve a company customer read
- `pennylane.company_customers.update` Update a company customer write

**Individual customers 3**

- `pennylane.individual_customers.create` Create an individual customer write
- `pennylane.individual_customers.get` Retrieve an individual customer read
- `pennylane.individual_customers.update` Update an individual customer write

**Journals 3**

- `pennylane.journals.create` Create a journal write
- `pennylane.journals.get` Retrieve a journal read
- `pennylane.journals.list` List journals read

**Purchase requests 3**

- `pennylane.purchase_requests.get` Retrieve a purchase request read
- `pennylane.purchase_requests.import` Import a purchase order. write
- `pennylane.purchase_requests.list` List purchase requests read

**Bank establishments 1**

- `pennylane.bank_establishments.list` List bank establishments read

**Billing email templates 1**

- `pennylane.billing_email_templates.list` List billing email templates read

**Company 1**

- `pennylane.company.features_get` Company features read

**Customer invoice templates 1**

- `pennylane.customer_invoice_templates.list` List customer invoice templates read

**Fiscal years 1**

- `pennylane.fiscal_years.list` List Company's Fiscal Years read

**Me 1**

- `pennylane.me.get` User Profile read

**Pa registrations 1**

- `pennylane.pa_registrations.list` List PA Registrations read

**Trial balance 1**

- `pennylane.trial_balance.list` Get the trial balance read

Questions

## The Pennylane MCP server, answered.

**Is there a Pennylane MCP server for Claude?**

Yes. actionlake is an MCP gateway: a remote MCP server that gives Claude, or another MCP client, 175 Pennylane actions across customer invoices, supplier invoices, customers and changelogs, through the same eight tools it uses for every other connector. actionlake is independent; it is not made or endorsed by Pennylane.

**What do I need to connect Pennylane?**

Pennylane API token: in Pennylane open Settings > Connectivity > Developers and generate a Company API token (pick…. Plus your company id. The free call account { op: "connections.requirements", service: "pennylane" } lists exactly what to paste.

**Can an AI agent delete or change things in Pennylane?**

Only if its key allows it, and only with an explicit confirmation. 8 Pennylane actions are destructive, including delete draft invoice, delete an SEPA mandate and delete a webhook subscription. Each runs only with confirm: true. Under the human confirm policy, or an approval rule on the key, the run waits until a named person approves it.

**Will an AI agent use up my Pennylane API limit?**

actionlake paces every call to the limits in the Pennylane service file: 25 calls per 5 seconds per connection. Repeated reads are answered from cache (97 Pennylane actions can be), which never reaches Pennylane.

**What does a Pennylane action cost?**

One upstream call, the only unit actionlake bills. A list that pages bills one call per page (175 Pennylane actions page). Cache hits, searches, dry runs and calls Pennylane refused with 401, 403, 429 or a 5xx are free. The Free plan includes 100,000 calls a month with no card. Paid plans start at US$49 a month for 250,000 calls, with overage from US$0.30 down to US$0.18 per 1,000.

**Which Pennylane API does it cover?**

The Pennylane Company API 2.0 (OpenAPI 3.0.1) at app.pennylane.com. It is built from Pennylane's documentation as read on 23 October 2026. 175 actions in 33 areas, each one in the signed service file (version 1.0.0).

**Can I combine Pennylane with my other systems?**

Yes. ask joins Pennylane to ConnectWise PSA or HubSpot CRM on the same customer and returns the answer rather than every row. Pennylane maps crm.company, which 227 other connectors also map.

**Does actionlake keep my Pennylane data, and where?**

actionlake processes and stores data in Sydney, Australia; there is no US region yet. Reads may be cached for up to 5 minutes, and a write clears the reads it affects. Each run's request and response is kept, sealed, for your plan's trace window: 1 day on Free, 3 days on Starter, 7 days on Pro, 14 days on Team, 30 days on Business and 30 days on Enterprise. Your Pennylane credential is sealed under your tenant's key, never logged and never returned. Your traffic is not used to train models.

**Which AI clients can use it?**

Claude Code, tested by us end to end, and the Claude app as a custom connector, tested by us with an existing key. Other MCP clients that support remote servers over Streamable HTTP (MCP revisions 2025-06-18 and 2025-11-25) and OAuth dynamic client registration, or a bearer header, should connect the same way; we have not tested them. Or plain REST, under the same action names.

## More connectors like Pennylane

Shares the most action names with

- [Xero 38](https://actionlake.com/connectors/xero)
- [Moneybird 33](https://actionlake.com/connectors/moneybird)
- [Visma eAccounting 28](https://actionlake.com/connectors/visma-eaccounting)
- [Wave 24](https://actionlake.com/connectors/wave)
- [Modern Treasury 23](https://actionlake.com/connectors/modern-treasury)
- [Codat 23](https://actionlake.com/connectors/codat)

Joins with, on shared entities

- [HaloPSA 3](https://actionlake.com/connectors/halopsa)
- [Microsoft Dynamics 365 3](https://actionlake.com/connectors/microsoft-dynamics-365)
- [Zoho Inventory 3](https://actionlake.com/connectors/zoho-inventory)
- [Zuper 3](https://actionlake.com/connectors/zuper)
- [ServiceTrade 3](https://actionlake.com/connectors/servicetrade)
- [Kaseya BMS 3](https://actionlake.com/connectors/kaseya-bms)

Browse

- [All Accounting & finance connectors](https://actionlake.com/connectors/category/accounting-and-finance)
- [All connectors](https://actionlake.com/connectors)
- [How actionlake compares](https://actionlake.com/compare)

actionlake is independent. It is not made or endorsed by Pennylane; the name is the vendor's own. Counts are from the Pennylane service file, version 1.0.0.

## Give your agent Pennylane today.

[Connect Pennylane free](https://actionlake.com/console?start=sandbox) [See pricing](https://actionlake.com/pricing)

Start free - 100,000 calls/month, no card. No signup. Hard caps on every key. Cached answers are free.

---

Source: https://actionlake.com/connectors/pennylane
More: https://actionlake.com/llms.txt
