Plancraft API and MCP server Let your AI agent write the offer and chase the invoice.

Plancraft's API covers only contacts and projects and is not switched on by default (checked 14 Nov 2026). Cotlet runs a hosted Plancraft MCP server with 14 tools that ChatGPT and Claude use in your own Plancraft account. Sent documents, payments and booked hours wait for your OK.

  • Free 7-day trial, no card
  • Unofficial, not affiliated with Plancraft
Plancraft logo Plancraft Cloud Browser

14 tools Read and write

Trade office work

What can your AI agent do in Plancraft? The office work after the site visit and after the job.

  • Turn site notes into an offer

  • Invoice a finished job from its offer

  • Remind customers with overdue invoices

  • Record this week's bank payments

  • Book the crew's hours on the project

  • Add a new customer and open the project

Contacts and projects only, no MCP

Does Plancraft have an MCP server or an API? The official Plancraft routes, checked 14 November 2026.

Plancraft has an API and webhooks for contacts and projects. Its Help Center says the feature is in a test phase, is not available by default and needs some technical knowledge. You create a read or a write API key inside Plancraft. Plancraft has no official MCP server, and no official ChatGPT or Claude connector was found.

  • The API has no endpoints for offers, invoices, payments, reminders or working hours.
  • Plancraft names Make and n8n for building on the API and gives no support for setting them up.
  • An API key is shown in full only once, right after you create it.
  • Porta, the "KI-Empfang", answers phone calls for the office; it does not work in your documents.
The Plancraft API, working by hand and Cotlet compared
What you need Plancraft APIBy handCotlet
Ask ChatGPT or Claude to do the work No official MCP server Copy and paste Hosted MCP server
Contacts and projects Once access is switched on One screen at a time Read and create
Offers, invoices and reminders No endpoints One document at a time Drafts, sent after your OK
Payments and working hours No endpoints By hand in each list Recorded after your OK

Checked 14 Nov 2026. Sources: Help: API and webhooks for contacts and projects · Help: Create an invoice in a project · Help: Record working hours and absences · Plancraft features · Plancraft prices · bau.bi on Porta, 20 Mar 2026

Set up once

How does the Plancraft MCP server work? The Plancraft MCP server by Cotlet: your agent works in your own Plancraft account.

  1. 1Log in to Plancraft

    Once, in a browser we host for you.

  2. 2Connect your AI agent

    One address in its settings.

  3. 3Hand it your site notes

    It drafts the offer in the project; you send it.

Your agent works in your own signed-in Cloud Browser. Documents to customers, recorded payments and booked hours wait for your OK. Who can see your session

Any MCP client

How to connect Plancraft to your AI agent

  1. 1

    Sign in to Plancraft in a Cloud Browser. Open plancraft.com/de-de/login in your Cotlet Cloud Browser and log in with your own office user.

  2. 2

    Add the Cotlet address. Enter https://cotlet.dev/mcp/v1 as the MCP server or connector URL in your agent.

  3. 3

    Let the agent in. Chat apps open a Cotlet sign-in page. Editors, n8n and scripts send an API key made in the console.

Plancraft sits on the shared address https://cotlet.dev/mcp/v1 with every other app you turn on, so one connector does it. Turned on Plancraft after connecting? Refresh the connector and its 14 tools appear.

ChatGPT
Settings > Apps & Connectors > Create
MCP server URL: https://cotlet.dev/mcp/v1/connect
Authentication: OAuth
Claude
Settings > Connectors > Add custom connector
URL: https://cotlet.dev/mcp/v1/connect

Claude Code:
claude mcp add --transport http cotlet \
  https://cotlet.dev/mcp/v1 \
  --header "Authorization: Bearer $COTLET_API_KEY"
Cursor
// ~/.cursor/mcp.json
{
  "mcpServers": {
    "cotlet": {
      "url": "https://cotlet.dev/mcp/v1",
      "headers": { "Authorization": "Bearer ${env:COTLET_API_KEY}" }
    }
  }
}
Codex
# ~/.codex/config.toml
[mcp_servers.cotlet]
url = "https://cotlet.dev/mcp/v1"
bearer_token_env_var = "COTLET_API_KEY"
n8n
MCP Client Tool (inside an AI Agent)
Transport: HTTP Streamable
URL: https://cotlet.dev/mcp/v1
Auth: Bearer, <your key>
Tool: plancraft_read
6 read, 8 write

All 14 Plancraft MCP tools

Built from the Plancraft Help Center, in the order a job runs: customer, project, offer, invoice, payment, reminder. Lists read at once; drafts land in the project for you to check.

Customers and projects5

Find or add the customer, open the project with its site address, and read a project's overview.

  • list_contacts Customers and other contacts, with salutation, name, company and addresses. read

    Lists the contacts in plancraft as the contact picker shows them, with the details plancraft keeps per contact: salutation, full name, the company it belongs to and addresses. query searches by name. Pass contact_id to create_project to attach a customer.

    MCP callplancraft_read → list_contacts

    REST endpointGET https://cotlet.dev/api/v1/plancraft/contacts

    Parameters

    Parameters: list_contacts
    NameTypeDescription
    query string string Part of the contact or company name.

    Example response

    {
      "contacts": [
        {
          "contact_id": "con_77b2e4",
          "name": "Muster Hausverwaltung GmbH",
          "address": "Beispielstrasse 12, 20095 Hamburg"
        },
        {
          "contact_id": "con_5a90c1",
          "salutation": "Frau",
          "name": "Anna Beispiel",
          "company": null,
          "address": "Probeweg 3, 22765 Hamburg"
        }
      ]
    }
  • create_contact Add a customer contact: a person or a company. write

    Creates one contact in plancraft, as the Kontakt erstellen button does. It reaches no one and you edit or correct it in plancraft, so it needs no confirmation. Put salutation, full name, the company it belongs to and the address in the contact, because documents take their recipient from it.

    MCP callplancraft_write → create_contact

    REST endpointPOST https://cotlet.dev/api/v1/plancraft/contacts

    Parameters

    Parameters: create_contact
    NameTypeDescription
    name string required string Full name of the person, or the company name.
    salutation string string Salutation as plancraft offers it, e.g. Frau or Herr.
    company string string Company the person belongs to.
    address string string Street, postcode and city on one line.

    Example input

    {
      "name": "Jane Doe"
    }

    Example response

    {
      "contact_id": "con_5a90c1",
      "salutation": "Frau",
      "name": "Anna Beispiel",
      "address": "Probeweg 3, 22765 Hamburg"
    }
  • list_projects Projects with number, name, customer and status. Filter by status or search by name. read

    Lists the projects from the Projekte menu, with the project number, name, customer and status. status takes a name from your own list under Projekte > Status verwalten, because plancraft lets every business define its statuses. A project without one shows "Kein Status". Pass project_id to get_project, list_documents or create_offer.

    MCP callplancraft_read → list_projects

    REST endpointGET https://cotlet.dev/api/v1/plancraft/projects

    Parameters

    Parameters: list_projects
    NameTypeDescription
    status string string A status name as it appears in your Projekte filter, e.g. "In Arbeit".
    query string string Part of the project name, number or customer.

    Example response

    {
      "projects": [
        {
          "project_id": "prj_8f3a21",
          "number": "P-00045",
          "name": "Fassade Muster Hausverwaltung",
          "customer": "Muster Hausverwaltung GmbH",
          "status": "In Arbeit"
        },
        {
          "project_id": "prj_41c9d0",
          "number": "P-00046",
          "name": "Bad Beispiel",
          "customer": "Anna Beispiel",
          "status": "Kein Status"
        }
      ]
    }
  • get_project One project's overview: description, assigned employees, customer, site address and hours. read

    Returns what the project overview shows: project number, description, the customer from Kontakte, the site address (Baustellenadresse), the hours booked and the employees assigned to the project. Use it before create_offer to check the recipient the documents will take by default, which is the project's customer.

    MCP callplancraft_read → get_project

    REST endpointGET https://cotlet.dev/api/v1/plancraft/projects/{project_id}

    Parameters

    Parameters: get_project
    NameTypeDescription
    project_id string required string Project ID from list_projects.

    Example input

    {
      "project_id": "project_8c41d2"
    }

    Example response

    {
      "project_id": "prj_8f3a21",
      "number": "P-00045",
      "name": "Fassade Muster Hausverwaltung",
      "status": "In Arbeit",
      "description": "Fassade Nordseite streichen, Gerüst steht bis 20.11.",
      "customer": {
        "contact_id": "con_77b2e4",
        "name": "Muster Hausverwaltung GmbH"
      },
      "site_address": "Beispielstrasse 12, 20095 Hamburg",
      "employees": [
        "Lena Muster",
        "Jonas Beispiel"
      ],
      "hours_booked": 16
    }
  • create_project Open a new project for a customer, with number, description and site address. write

    Creates a project, as Neues Projekt does. The name is required. If you give no project_number, plancraft assigns the next one from its number sequence. You are assigned to the project; add employees to assign more. It reaches no one until someone is assigned, so it needs no confirmation.

    MCP callplancraft_write → create_project

    REST endpointPOST https://cotlet.dev/api/v1/plancraft/projects

    Parameters

    Parameters: create_project
    NameTypeDescription
    name string required string Project name. Plancraft recommends the wording you use as the subject of your offers.
    contact_id string string Customer, from list_contacts or create_contact.
    project_number string string Your own number. Default: next number from plancraft.
    description string string Notes on the job.
    site_address string string Site address (Baustellenadresse), one line.
    employees array array Employee names to assign besides you.

    Example input

    {
      "name": "Jane Doe"
    }

    Example response

    {
      "project_id": "prj_41c9d0",
      "number": "P-00046",
      "name": "Bad Beispiel",
      "customer": "Anna Beispiel",
      "employees": [
        "Lena Muster"
      ]
    }

Offers and invoices4

A blank offer with positions, an invoice made from an offer or order confirmation, and every document in the project folder.

  • list_documents The documents in one project: offers, order confirmations, delivery notes, invoices and reminders. read

    Lists the documents in a project folder with type, document number, date and total. type is one of offer, order_confirmation, delivery_note, invoice, reminder. Pass document_id to create_invoice_from_document or send_document. Documents still in draft have no document number yet.

    MCP callplancraft_read → list_documents

    REST endpointGET https://cotlet.dev/api/v1/plancraft/projects/{project_id}/documents

    Parameters

    Parameters: list_documents
    NameTypeDescription
    project_id string required string Project ID from list_projects.
    type string string offer, order_confirmation, delivery_note, invoice or reminder. Default: all types.

    Example input

    {
      "project_id": "project_8c41d2"
    }

    Example response

    {
      "documents": [
        {
          "document_id": "doc_2e71a8",
          "type": "offer",
          "number": "A-2026-0112",
          "date": "2026-10-02",
          "net_total": 4250,
          "currency": "EUR"
        },
        {
          "document_id": "doc_93b0d4",
          "type": "order_confirmation",
          "number": "AB-2026-0090",
          "date": "2026-10-09",
          "net_total": 4250,
          "currency": "EUR"
        }
      ]
    }
  • create_offer Draft a blank offer in a project with positions: text, quantity, unit and unit price. write

    Creates an offer in the project as a blank document (Blanko) with the positions you give, each with a title, optional long text, quantity, unit and unit price. It returns the totals plancraft shows. The offer is only created, never sent; open it in plancraft to adjust or finish it, and use send_document to send it. It reaches no one, so it needs no confirmation.

    MCP callplancraft_write → create_offer

    REST endpointPOST https://cotlet.dev/api/v1/plancraft/projects/{project_id}/offers

    Parameters

    Parameters: create_offer
    NameTypeDescription
    project_id string required string Project ID from list_projects.
    subject string string Subject line of the offer.
    positions array required array Objects with title, quantity, unit, unit_price and optional long_text.

    Example input

    {
      "project_id": "prj_41c9d0",
      "subject": "Malerarbeiten Bad",
      "positions": [
        {
          "title": "Untergrund spachteln",
          "quantity": 85,
          "unit": "m2",
          "unit_price": 6.4
        },
        {
          "title": "Waende streichen",
          "quantity": 85,
          "unit": "m2",
          "unit_price": 7.2
        },
        {
          "title": "Decke streichen",
          "quantity": 24,
          "unit": "m2",
          "unit_price": 8.5
        }
      ]
    }

    Example response

    {
      "document_id": "doc_2e71a8",
      "type": "offer",
      "project": "P-00046",
      "subject": "Malerarbeiten Bad",
      "positions": [
        {
          "title": "Untergrund spachteln",
          "quantity": 85,
          "unit": "m2",
          "unit_price": 6.4,
          "total": 544
        },
        {
          "title": "Waende streichen",
          "quantity": 85,
          "unit": "m2",
          "unit_price": 7.2,
          "total": 612
        },
        {
          "title": "Decke streichen",
          "quantity": 24,
          "unit": "m2",
          "unit_price": 8.5,
          "total": 204
        }
      ],
      "net_total": 1360,
      "vat_total": 258.4,
      "gross_total": 1618.4,
      "currency": "EUR"
    }
  • create_invoice_from_document Create an invoice from an offer, order confirmation or delivery note in the same project. write

    Does what the Plus button next to a document does when you pick "Rechnung": it creates an invoice in the project from that document, with its positions. The invoice stays a draft (Entwurf) with no document number until you finish it in plancraft, where you check the payment due date and tax. It reaches no one, so it needs no confirmation.

    MCP callplancraft_write → create_invoice_from_document

    REST endpointPOST https://cotlet.dev/api/v1/plancraft/projects/{project_id}/invoice-from-documents

    Parameters

    Parameters: create_invoice_from_document
    NameTypeDescription
    project_id string required string Project ID from list_projects.
    document_id string required string The offer, order confirmation or delivery note, from list_documents.

    Example input

    {
      "project_id": "project_8c41d2",
      "document_id": "document_8c41d2"
    }

    Example response

    {
      "document_id": "doc_b81c05",
      "type": "invoice",
      "status": "draft",
      "project": "P-00046",
      "from_document": "doc_2e71a8",
      "net_total": 1360,
      "vat_total": 258.4,
      "gross_total": 1618.4,
      "currency": "EUR"
    }
  • send_document Send an offer, invoice or reminder from plancraft to its recipient. writeAsks first

    Sends one document from plancraft to the recipient on it, which by default is the project's customer. It works for offers, order confirmations, invoices and reminders. A draft invoice has no document number or status yet, so finish it in plancraft first. By default you confirm each call; you can switch that off for this tool.

    MCP callplancraft_write → send_document

    REST endpointPOST https://cotlet.dev/api/v1/plancraft/projects/{project_id}/documents/{document_id}

    Parameters

    Parameters: send_document
    NameTypeDescription
    project_id string required string Project ID from list_projects.
    document_id string required string Document ID from list_documents.

    Example input

    {
      "project_id": "project_8c41d2",
      "document_id": "document_8c41d2"
    }

    Example response

    {
      "document_id": "doc_d6a2f0",
      "status": "sent",
      "recipient": "verwaltung@muster-hausverwaltung.example"
    }

Payments and reminders3

The "Ausgangsrechnungen" list by status, payments with Skonto or retention, and the reminder, then the 1st and 2nd "Mahnung".

  • list_invoices Outgoing invoices for a period, with status, due date, total and open amount. read

    Lists the invoices of the Ausgangsrechnungen menu. Only invoices whose invoice date falls in the period are listed; the default is the last 90 days, as in plancraft. status is open, overdue, paid, draft, reminded (Angemahnt), cancelled or none. plancraft sets open, overdue and paid by itself once an invoice is finished, and overdue only works when the invoice shows its payment due date. Invoice corrections appear only when you ask for all statuses.

    MCP callplancraft_read → list_invoices

    REST endpointGET https://cotlet.dev/api/v1/plancraft/invoices

    Parameters

    Parameters: list_invoices
    NameTypeDescription
    status string string open, overdue, paid, draft, reminded, cancelled or none. Default: all.
    from string string Start of the period, YYYY-MM-DD, on the invoice date. Default: 90 days ago.
    to string string End of the period, YYYY-MM-DD. Default: today.

    Example response

    {
      "invoices": [
        {
          "invoice_id": "inv_c40e19",
          "number": "R-2026-0187",
          "project": "P-00045",
          "customer": "Muster Hausverwaltung GmbH",
          "status": "overdue",
          "invoice_date": "2026-10-14",
          "due_date": "2026-10-28",
          "gross_total": 5057.5,
          "open_amount": 3057.5,
          "currency": "EUR"
        },
        {
          "invoice_id": "inv_7d12f3",
          "number": "R-2026-0191",
          "project": "P-00046",
          "customer": "Anna Beispiel",
          "status": "open",
          "invoice_date": "2026-11-05",
          "due_date": "2026-11-19",
          "gross_total": 1190,
          "open_amount": 1190,
          "currency": "EUR"
        }
      ]
    }
  • record_payment Record a customer payment on an invoice and lower its open amount. writeAsks first

    Adds a payment with its date to an invoice, as the payment entry on the invoice does. plancraft lowers the open amount, and an invoice with 0.00 open becomes paid. You can record several payments on one invoice. Set cash_discount or retention first when the customer took a Skonto or a Sicherheitseinbehalt, so plancraft takes the figures from the invoice. It changes your books. By default you confirm each call; you can switch that off for this tool.

    MCP callplancraft_write → record_payment

    REST endpointPOST https://cotlet.dev/api/v1/plancraft/invoices/{invoice_id}/payments

    Parameters

    Parameters: record_payment
    NameTypeDescription
    invoice_id string required string Invoice ID from list_invoices.
    amount number number Amount paid. Default: the whole open amount.
    date string string Payment date, YYYY-MM-DD. Default: today.
    cash_discount boolean boolean The customer deducted a Skonto.
    retention boolean boolean The customer withheld a Sicherheitseinbehalt.

    Example input

    {
      "invoice_id": "invoice_8c41d2"
    }

    Example response

    {
      "invoice_id": "inv_c40e19",
      "number": "R-2026-0187",
      "payment": {
        "amount": 2000,
        "date": "2026-11-12"
      },
      "open_amount": 1057.5,
      "status": "overdue",
      "currency": "EUR"
    }
  • create_payment_reminder Create the next reminder for an overdue invoice: payment reminder, 1st or 2nd dunning letter. write

    Creates the reminder document in the invoice's project, from the overdue invoice. level is reminder (Zahlungserinnerung), first_dunning (1. Mahnung) or second_dunning (2. Mahnung); plancraft offers the dunning letters only after a reminder exists. The document is created, not sent: it appears in the project and you can edit its text in plancraft. Send it with send_document.

    MCP callplancraft_write → create_payment_reminder

    REST endpointPOST https://cotlet.dev/api/v1/plancraft/invoices/{invoice_id}/payment-reminders

    Parameters

    Parameters: create_payment_reminder
    NameTypeDescription
    invoice_id string required string Invoice ID from list_invoices.
    level string required string reminder, first_dunning or second_dunning.

    Example input

    {
      "invoice_id": "invoice_8c41d2",
      "level": "level"
    }

    Example response

    {
      "document_id": "doc_d6a2f0",
      "type": "reminder",
      "level": "reminder",
      "invoice": "R-2026-0187",
      "project": "P-00045",
      "open_amount": 3057.5,
      "currency": "EUR"
    }

Working hours2

Work and travel time for one or several employees on a project, and the "Zeiten" list by period, person or project.

  • list_time_entries Booked working hours, travel time and absences, by period, employee or project. read

    Lists the entries of the Zeiten menu: employee, date, start, end, break, project and type. type is work (Arbeitszeit), travel (Fahrtzeit) or an absence such as vacation or sick. Work and travel entries belong to a project; workshop, warehouse or office work has project "none".

    MCP callplancraft_read → list_time_entries

    REST endpointGET https://cotlet.dev/api/v1/plancraft/time-entries

    Parameters

    Parameters: list_time_entries
    NameTypeDescription
    from string string Start date, YYYY-MM-DD.
    to string string End date, YYYY-MM-DD.
    employee string string Employee name as plancraft shows it.
    project_id string string Only entries booked to this project.

    Example response

    {
      "entries": [
        {
          "entry_id": "tim_19a0c7",
          "employee": "Lena Muster",
          "date": "2026-11-13",
          "start": "07:30",
          "end": "16:00",
          "break_minutes": 30,
          "hours": 8,
          "type": "work",
          "project": "P-00045"
        },
        {
          "entry_id": "tim_19a0c8",
          "employee": "Jonas Beispiel",
          "date": "2026-11-13",
          "start": "07:30",
          "end": "16:00",
          "break_minutes": 30,
          "hours": 8,
          "type": "work",
          "project": "P-00045"
        }
      ]
    }
  • create_time_entry Book working time or travel time for one or more employees on a project. writeAsks first

    Creates a time entry as Neue Zeit does, for one or more employees, with date, start, end, break and project. Work and travel entries need a project; for workshop, warehouse or office work pass project_id "none". Entries land in your team's time lists and exports. By default you confirm each call; you can switch that off for this tool.

    MCP callplancraft_write → create_time_entry

    REST endpointPOST https://cotlet.dev/api/v1/plancraft/projects/{project_id}/time-entries

    Parameters

    Parameters: create_time_entry
    NameTypeDescription
    employees array required array Employee names as plancraft shows them.
    date string string YYYY-MM-DD. Default: today.
    start string required string Start time, HH:MM.
    end string required string End time, HH:MM.
    break_minutes integer integer Break in minutes. Default: 0.
    project_id string required string Project ID from list_projects, or "none".
    type string string work or travel. Default: work.
    description string string Short note on what was done.

    Example input

    {
      "employees": "employees",
      "start": "start",
      "end": "end",
      "project_id": "project_8c41d2"
    }

    Example response

    {
      "entries": [
        {
          "entry_id": "tim_19a0c7",
          "employee": "Lena Muster",
          "date": "2026-11-13",
          "start": "07:30",
          "end": "16:00",
          "break_minutes": 30,
          "hours": 8,
          "type": "work",
          "project": "P-00045"
        },
        {
          "entry_id": "tim_19a0c8",
          "employee": "Jonas Beispiel",
          "date": "2026-11-13",
          "start": "07:30",
          "end": "16:00",
          "break_minutes": 30,
          "hours": 8,
          "type": "work",
          "project": "P-00045"
        }
      ]
    }
Encrypted, revocable

Who can see my Plancraft session, and how do I revoke it?

  • What we store

    Your signed-in Plancraft browser profile, AES-256-GCM encrypted, in Finland. Never your password.

  • What your agent gets

    The 14 Plancraft tools. The session cookie stays in the Cloud Browser.

  • What the session sees

    The projects, documents and hours your Plancraft office user can open, and nothing more.

  • What no tool touches

    Your Plancraft plan, users and API keys, the DATEV export, incoming supplier invoices, the "Plantafel" and Porta's phone calls.

  • If Plancraft logs you out

    You log in again yourself, in the same Cloud Browser.

  • How to cut access

    Disable Plancraft for agents, reset the browser, or change your Plancraft password.

Cotlet never sees or stores your password: you type it into Plancraft yourself, and the agent works from the session that sign-in leaves. Our site scores A+ on Qualys SSL Labs, securityheaders.com and Mozilla Observatory (live results).

We keep it working

What happens when Plancraft changes? The tools use the same screens your office uses.

The tools work through the Plancraft pages you use yourself, so a new screen does not stop your offers and invoices. Cotlet watches the apps it serves and updates the Plancraft server when a page changes.

New Plancraft features become available to the agent. Project statuses are read from your own list under "Status verwalten", so renamed statuses keep working.

The agent sees only what your office user can see. If Plancraft logs you out, one click in the Cotlet console reopens the Cloud Browser so you can log in again.

3 tools ask first

Approvals, undo and mistakes Customers get nothing until you say so.

  1. 01 Find what is overdue list_invoices reads "Überfällig".
  2. 02 Create the reminder create_payment_reminder files it in the project, unsent.
  3. 03 Show you the list Invoice, customer and open amount.
  4. 04 Send on your OK send_document mails it to the customer.
Fixing a Plancraft write that went wrong
ActionHow to put it right
Offer or reminder createdStill unsent: edit or delete it in the project
Invoice made from an offerStays an "Entwurf" with no number until you finish it in Plancraft
Payment recordedCorrect the payment on the invoice in Plancraft
Hours bookedCorrect the entry under "Zeiten" before your export
Document sentAlready with your customer: follow up with them directly

3 of the 8 write tools ask first: send_document, record_payment, create_time_entry. By default you confirm each call, and you can switch that off per tool. The other writes only add contacts, projects and drafts that reach no one. The 6 read tools run at once.

MCP call
{
  "name": "create_offer",
  "arguments": {
    "project_id": "prj_41c9d0",
    "subject": "Malerarbeiten Bad",
    "positions": [
      {
        "title": "Untergrund spachteln",
        "quantity": 85,
        "unit": "m2",
        "unit_price": 6.4
      },
      {
        "title": "Waende streichen",
        "quantity": 85,
        "unit": "m2",
        "unit_price": 7.2
      },
      {
        "title": "Decke streichen",
        "quantity": 24,
        "unit": "m2",
        "unit_price": 8.5
      }
    ]
  }
}
REST
curl -X POST https://cotlet.dev/api/v1/plancraft/projects/prj_41c9d0/offers \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"subject":"Malerarbeiten Bad","positions":[{"title":"Untergrund spachteln","quantity":85,"unit":"m2","unit_price":6.4},{"title":"Waende streichen","quantity":85,"unit":"m2","unit_price":7.2},{"title":"Decke streichen","quantity":24,"unit":"m2","unit_price":8.5}]}'
Response
{
  "document_id": "doc_2e71a8",
  "type": "offer",
  "project": "P-00046",
  "subject": "Malerarbeiten Bad",
  "positions": [
    {
      "title": "Untergrund spachteln",
      "quantity": 85,
      "unit": "m2",
      "unit_price": 6.4,
      "total": 544
    },
    {
      "title": "Waende streichen",
      "quantity": 85,
      "unit": "m2",
      "unit_price": 7.2,
      "total": 612
    },
    {
      "title": "Decke streichen",
      "quantity": 24,
      "unit": "m2",
      "unit_price": 8.5,
      "total": 204
    }
  ],
  "net_total": 1360,
  "vat_total": 258.4,
  "gross_total": 1618.4,
  "currency": "EUR"
}

The example drafts a bathroom offer: 85 m2 of filling at 6.40, 85 m2 of walls at 7.20 and 24 m2 of ceiling at 8.50 make 1,360.00 EUR net, 1,618.40 EUR with 19% VAT. A cron job or n8n flow can make the same call over REST at /api/v1/plancraft with the same key and price, in JSON. Failed calls are free.

Pay per call

How much does the Plancraft MCP server cost?

About $18 a monthfor a painting business with a crew of three and about ten offers a month, 3,080 credits. Your Plancraft plan stays as it is.

Illustrative month, our assumption: successful calls for this workload
JobCallsCredits
New customers and projects3 × 6180
Offers drafted from site notes2 × 10200
Invoice drafts from accepted offers2 × 10200
Offers and invoices sent1 × 20200
Crew hours booked, every workday1 × 20200
Hours checked before invoicing2 × 8160
Bank payments recorded2 × 12240
Weekly overdue check1 × 440
Reminders created and sent2 × 8160
Cloud Browser, 30 days1,500
Total158 calls3,080

The $29 pack covers a typical month for most owners. A bigger crew or more jobs a month means more calls.

  • Free 7-day trial, no card
  • 10 credits per successful call, MCP or REST
  • 50 credits a day for the Cloud Browser
  • Your Plancraft plan applies as it is

Credit packs are one-time purchases, not a subscription. The month above is our own example, not measured customer usage.

Cotlet credit packs: price, credits and calls at 10 credits each
Credits Price, one time Calls at 10 credits Per 1,000 credits
5,000 $29 500 $5.80
15,000 $79 1,500 $5.27
32,000 $149 3,200 $4.66
60,000 $249 6,000 $4.15

Only successful calls use credits; failed calls and timeouts cost nothing. At a balance of 0 calls pause, never a surprise charge. Authenticate with the Authorization: Bearer header.

Other options

Plancraft MCP server: other ways to connect What each route does for a trade business, and where it stops.

Other ways to work with Plancraft, checked 14 Nov 2026
OptionWhat it doesWhere it stops
Porta, Plancraft's AIAnswers phone calls, records what the customer wants and adds new contacts; 60 call minutes a month free.Takes calls; it does not write offers, record payments or book hours.
Plancraft APIReads and creates contacts and projects with a key you make in Plancraft, and sends webhooks.Not on by default; no offers, invoices, payments or hours.
Make or n8nPlancraft names both for flows on its API; neither has a Plancraft app.Only what the API covers, and Plancraft gives no setup support.
ZapierNo Plancraft app in the Zapier directory.Nothing to connect.
DATEV export, GAEB and DATANORMInvoices to your tax adviser; material catalogs and bills of quantities in.Files moved, no work done in the project.
By handOpen each project, document and list in Plancraft.One screen at a time, only while you are at the desk.

If your job is keeping contacts and projects in step with another system, the Plancraft API with Make or n8n is the vendor's own route. Only Cotlet lets your agent do the daily Plancraft office work on every screen you use, reading and writing offers, invoices, payments and hours, from ChatGPT, Claude or any MCP client, with no Plancraft API key and on your current plan.

EU company, since 2019

Who runs Cotlet A company you can look up.

Cotlet belongs to Take Group sp. z o.o., a software company registered in Poland, EU (VAT PL6342984273), in business since 2019. Its founders are Bart Krawczyk (Co-founder, CTO) and Jake Slugocki (Co-founder, SEO, sales and marketing). Questions about the Plancraft tools go to contact@cotlet.dev.

Plancraft MCP server: questions

How do I get access?

Sign up free at https://cotlet.dev/signup?app=plancraft, turn on Plancraft under Integrations in the console and log in at https://plancraft.com/de-de/login in your Cloud Browser. Then connect your AI agent and ask it for this month's overdue invoices. The trial needs no card.

Which plancraft account does my agent need?

An Office account. Plancraft says documents and project planning are done in the browser application, and mobile users only get the mobile app. You sign in once with your email and password at plancraft.com/de-de/login, in your own Cloud Browser.

What if my plancraft plan lacks a feature?

The agent can only do what your plan allows. Plancraft sells Business, Pro and Premium, and Pro adds things such as the GAEB interface and post-calculation. After the 7-day trial, an account without a subscription drops to a free plan with fewer features, and your data stays.

Do I talk to the agent in German?

As you like. Plancraft's screens stay in German and the agent works on them as they are; you can ask in English or German, and offers keep the position texts you give.

Is the MCP server different from the REST API?

Only in how it is called. Both carry the same 14 tools, inputs, answers, API key and price. Agents use MCP; scripts and n8n HTTP steps use REST.

Is Cotlet affiliated with Plancraft?

No. Cotlet is independent and not affiliated with Plancraft GmbH.

Hand your next Plancraft offer to your agent.

Free 7-day trial with 2,000 credits, no card needed.