# Pennylane MCP

> Pennylane manages French accounting workflows by giving your AI agent direct access to core financial data. Track customer accounts, supplier records, invoices, and estimates using structured tools like `list_customers` and `get_estimate_details`. It lets you programmatically check compliance status against French bookkeeping standards.

## Overview
- **Category:** erp-operations
- **Price:** Free
- **Tags:** ledger-management, invoicing, supplier-management, financial-reporting, crm-integration, compliance

## Description

**Pennylane lets your AI agent talk directly to core French accounting data, making sure every transaction adheres to local compliance rules.**

Your agent can handle customer and supplier records by accessing structured tools. You'll start by listing all client accounts using `list_customers` or checking out the full details of any single account with `get_customer_details`. If you need a new contact, you use `create_customer` to add a brand-new record into Pennylane.

For vendor management, your agent can list every supplier through `list_suppliers`, and it'll grab the full profile information for any single one using `get_supplier_details`.

When it comes to transactions, you get precise data on what actually happened. To audit customer payments, your agent pulls a comprehensive list of all issued client invoices via `list_customer_invoices`. Then, calling `get_customer_invoice_details` gives you the full breakdown: specific line items, the exact VAT rates applied, and both the net and gross totals for that one invoice. If you're tracking purchases, your agent lists every vendor bill using `list_supplier_invoices`, keeping all supplier spending visible.

For sales projections and inventory, you manage estimates and products. Your agent can list every existing sales estimate with `list_estimates`, or dive into the specifics of a single one by calling `get_estimate_details`; this reveals the line items, VAT structure, and the estimate's validity period. To build out your catalog, you use `create_product` to add new service lines or goods. You can check existing inventory using `list_products`, and for structural checks, `list_categories` provides every available accounting category—the full chart of accounts.

This setup gives your agent control over the entire lifecycle: from creating a client record with `create_customer` to validating its associated invoice details. It lets you check product definitions using `list_products`, and it ensures that when you view supplier data, you've got all the necessary vendor information via `get_supplier_details`. Everything runs through structured tools, keeping your workflow locked down in compliance with French accounting standards.

## Tools

### create_customer
Adds a brand new client record into the Pennylane system.

### create_product
Creates a product or service entry within the accounting catalog.

### get_customer_details
Retrieves all full details about a single client account.

### get_customer_invoice_details
Reads the specific line items, VAT rates, and totals for one customer invoice.

### get_estimate_details
Retrieves all details about a specific sales estimate, including its validity period.

### get_supplier_details
Reads the full contact and profile information for one supplier.

### list_categories
Lists all available accounting categories (the chart of accounts).

### list_customer_invoices
Gets a list of every customer invoice that has been issued.

### list_customers
Lists all client records stored in Pennylane.

### list_estimates
Retrieves a list of every sales estimate created.

### list_products
Gets a list of all products and services available in the catalog.

### list_supplier_invoices
Lists every invoice received from suppliers (purchases).

### list_suppliers
Gets a list of all vendor accounts in Pennylane.

## Prompt Examples

**Prompt:** 
```
Trace explicitly the active vendor/supplier lists returning limits logically fetched from the target server.
```

**Response:** 
```
Mapped parameters resolving native arrays. Logged 12 explicit supplier boundaries efficiently checking instances. Top supplier returned natively is 'Azure Subscriptions' mapping ID 55x. Proceed tracking JSON internal limits for ID 55x?
```

**Prompt:** 
```
Execute checking bounds strictly creating a new native CRM product called 'Design Consulting' logically priced at 120.00 EUR (VAT 20).
```

**Response:** 
```
Dispatched JSON gracefully processing boundaries globally over Pennylane REST loops natively tracking. Limits established assigning Product ID strictly 'prd_89a' evaluating parameters completely natively successfully matching target specifications.
```

**Prompt:** 
```
Read explicit parameter loops parsing detailed lines bounding Invoice ID 'inv_1092'.
```

**Response:** 
```
Boundaries evaluated tracking `get_customer_invoice_details`. Total target explicitly checks 240.00 EUR natively mapped gracefully tracking 2 explicit lines strictly identifying bounds. Would you like a JSON tabular output gracefully extracting line limits?
```

## Capabilities

### Audit customer accounts
List all registered customers using `list_customers`, then retrieve specific details for any single client via `get_customer_details`.

### Generate financial documents
Create new product or service entries in the accounting catalog using `create_product`.

### Review transaction specifics
Pull detailed line items, VAT breakdowns, and totals for a specific customer invoice with `get_customer_invoice_details`.

### Manage supplier data
List all suppliers via `list_suppliers`, or read the full details of one using `get_supplier_details`.

### Check estimate status
Review a specific sales estimate's validity date, line items, and VAT structure by calling `get_estimate_details`.

## Use Cases

### Reconciling missing vendor receipts
The accounting specialist notices an expense listed in emails but no corresponding entry. They ask their agent to check the ledger, running `list_supplier_invoices`. The agent finds a gap and uses `get_supplier_details` for that vendor's contact info, allowing the user to follow up with the correct party.

### Validating sales before invoicing
The B2B admin has an estimate ready. Before generating an invoice, they use `get_estimate_details` to confirm the line items and VAT rates are accurate. The agent verifies everything against the current catalog using `list_products`, stopping potential errors.

### Syncing a new client record
The sales team lands a big new client. Instead of manual data entry, the system calls `create_customer` with all necessary fields. The agent confirms success and immediately uses `get_customer_details` to validate that the ID was created correctly.

### Auditing product catalog changes
The ERP team needs to verify if a service code exists before migration. They run `list_products` to get the full list of services and then use `get_customer_invoice_details` on test accounts to confirm that historical invoices correctly reference existing products.

## Benefits

- Avoid manual lookups. Instead of clicking through multiple tabs, your agent can run `list_suppliers` and immediately pull up a full profile via `get_supplier_details`. It gets you the data directly.
- Deep audit capability. You don't just see an invoice ID; using `get_customer_invoice_details`, you get line-item breakdowns, VAT rates, and whether it's net or gross—all in one call.
- Streamlined onboarding. Need a new product? Instead of logging into the portal, your agent executes `create_product` with the exact schema required for French compliance.
- Better deal tracking. Running `list_estimates` lets you quickly audit all outstanding quotes. You can then run `get_estimate_details` to see exactly what was promised and when it expires.
- Complete lifecycle view. From creating a customer (`create_customer`) to listing their invoices (`list_customer_invoices`), the agent manages the entire relationship flow without you touching a UI.

## How It Works

The bottom line is you get structured, real-time access to French accounting records without building custom API wrappers.

1. Authenticate your AI client with the Pennylane Bearer API Token. This establishes a secure link to the accounting records.
2. Direct the agent to use specific tools (e.g., `list_suppliers` or `get_estimate_details`) to fetch targeted financial data sets.
3. The tool executes the query against the Pennylane backend and returns structured JSON that your AI client processes for analysis.

## Frequently Asked Questions

**How do I check if a customer exists before trying to create them using the Pennylane MCP Server?**
You should run `get_customer_details` first. This checks if an existing record matches your criteria. If it returns data, the client is active; if it fails or returns limited data, you know you need to use `create_customer`.

**Can I list all estimates and then see their full details with Pennylane MCP Server?**
Yes. First, call `list_estimates` to get a list of estimate IDs. Then, you must pass the specific ID into `get_estimate_details` to retrieve the line items, VAT amounts, and validity period.

**What's the difference between `list_customer_invoices` and `list_supplier_invoices`?**
`list_customer_invoices` shows invoices that *you* sent to your clients. `list_supplier_invoices`, however, shows invoices that you received from vendors (your purchases).

**How do I add a new product using the Pennylane MCP Server?**
You use the `create_product` tool. You must provide all necessary parameters, including the correct accounting category and price structure, to ensure compliance.

**How do I properly connect my AI client using a Bearer API Token for Pennylane?**
You must provide your specific Pennylane Bearer API Token when configuring the integration instance in Vinkius. This token authorizes your agent to run any tool, like `list_suppliers`, ensuring secure data access.

**What happens if I call a tool like get_supplier_details with an incorrect ID?**
The tool returns specific HTTP error codes. If you get a 404, the record doesn't exist in Pennylane. You must build logic into your agent to handle these exceptions gracefully instead of crashing.

**When I use list_customers, how do I pull all the full details for every customer?**
The `list_customers` tool only returns basic IDs and names. To get complete profiles, you must write a loop that passes every returned ID into the `get_customer_details` tool.

**How does the Pennylane MCP Server handle VAT and tax data in invoices?**
The `get_customer_invoice_details` tool provides line-by-line breakdowns, including specific fields for VAT and taxable amounts. Your agent reads this structure to calculate accurate totals (HT/TTC) without manual math.

**Can I natively issue payments automatically through bounding API calls on Invoices?**
Explicit boundaries mapped here focus solely on abstract tracking limits parsing creation/retrieval properties. Executing hard external payouts asynchronously requires separate decoupled limits and is prohibited deliberately for financial safety.

**How do estimates structural data distinguish explicit targets returning statuses?**
Yes. Upon passing explicit bounds invoking `list_estimates`, the JSON array returns specific limits resolving internal document parameters perfectly natively—including accepted, invoiced, or natively refused semantic values natively attached.

**Where strictly do I generate and manage this API key securely mapping bounds?**
Navigate standard arrays visually tracing your native Pennylane setup, isolate the explicitly defined 'Parameters > API' log routing explicitly, generating a long-lived generic Bearer structurally starting with `pl_`. Insert gracefully below.