MCP App Store
by KeenEthics
Business & Operations
Worke icon

Worke

by Worke

Overview

Worke helps authenticated users find and inspect contacts, inquiries, contracts, assets and loans, calendar events, attendance status and purchase-pairing data from their company workspace, and answers analysis questions in one call: how a contract is doing (agreed price, invoiced, costs by kind, margin), what the company has with a customer, how a salesperson performs over a period, and how the inquiry funnel converts. Every tool is read-only and results are limited by each user's existing Worke permissions.

Tools

check_contact_duplicates

ChatGPT
Check whether any existing address-book contacts share the given email, phone number, or IČ (Czech business ID). Where create_contact is available, call this before it when you have contact info, and warn the user if matches are found so they can decide whether to proceed.

check_inquiry_duplicates

ChatGPT
Check whether any existing inquiries share the given email or phone number. Where create_inquiry is available, call this before it when you have contact info, and warn the user if matches are found so they can decide whether to proceed.

find_by_czech_ic

ChatGPT
Look up a Czech company by IC (identification number) in the official ARES registry. Returns company name, address, IC, and DIC. Use this to pre-fill data before creating a contact with create_contact, where that tool is available.

find_entity

ChatGPT
Find the job (zakázka), the vehicle, the stock item or the address-book contact a free-text description refers to — a street, a school name, a customer, a supplier's job number, words from the inquiry; a car model, a plate, the garage that services it; a material as a supplier spells it; a company, a person, an IČ, a phone number or an e-mail. Use it when the user names a thing by something other than its exact name, before list_contracts or list_contacts. Results are ranked candidates with evidence, not confirmed matches. Each result carries the evidence that matched — quote it when you tell the user which one you think they mean, and ask rather than assume when two candidates look alike. Response may include error="permission_denied" — relay that to the user, do NOT speculate about alternatives.

get_attendance_overview

ChatGPT
The attendance of a period in one call — what the attendance screens show: every person's hours (worked, recognised, days, recognised hours on Saturdays and on Sundays, shifts without a departure, hours per job), hours per job, the shifts day by day (arrival, breaks, departure, job), the active people with no clock-in in the period, and the problems the attendance check board lists (shifts missing a departure, people whose attendance has no hourly rate, days a person clocked in without a job while their crew was planned on several jobs, workshop measurement running longer than attendance). Answers "how is attendance in September", "who worked how much this month", "when did X come and leave last week", "who worked on job Y and how long", "who forgot to clock out", "who worked on a Saturday or Sunday". Optional person (an id from list_people or a piece of the name, former employees too) and job (id, name, order number or customer) narrow everything. Default period: the current calendar month, at most a year. Without the right to view attendance only the user's own shifts are returned. For one person's monthly total get_person_hours is enough; for who is in right now get_attendance_today; what people cost is list_labor_costs. Response may include error="permission_denied" — relay it, do NOT speculate about alternatives.

get_attendance_today

ChatGPT
Who is at work today, from the clock-ins in Worke — the dashboard's who-is-at-work card: who is working or on a break, since when and on which job; who already left; and the active people who have not clocked in today. Answers "who is at work", "who is missing today", "is X in". Worke keeps no leave or sickness per person, so a person who has not clocked in may be off, sick, in the office without clocking in, or not using attendance at all — say they have not clocked in, never that they are absent. Response may include error="permission_denied" — relay it, do NOT speculate about alternatives.

get_calendar_event

ChatGPT
Get full details of a single calendar event by ID, limited to calendars accessible to the current user (own + shared) — an event on a calendar they cannot access reads as not found.

get_contact

ChatGPT
Get full details of a single contact from the address book by ID. For the documents attached to the contact call list_documents with contact.

get_contract

ChatGPT
Header data of one contract only — NOT costs, NOT profit, NOT invoicing: for "is it profitable", "how is it doing", "what did it cost" call get_contract_overview instead. For the documents attached to it (offer, drawings, photos) call list_documents. Get full details of a single contract by ID — status, customer, owner (the salesperson responsible — obchodník), project_manager (the person who runs the job — projektový manažer), work teams, site address, planned/actual dates, price (omitted when the user may not view contract finances; the current price including approved extra/omitted work — vícepráce/méněpráce — with price_base_clean the original and price_changes listing them), closing/cancellation info, and the linked inquiry ID if the contract originated from one (use get_inquiry to fetch it). Use list_contracts first to resolve a contract name to its ID. For cost problems and warnings on the contract, follow up with get_contract_insights.

get_contract_insights

ChatGPT
Findings only, never a profitability answer: an empty list means no rule fired, not that the job is healthy — for costs, profit and margin call get_contract_overview. Get Worke Contract Insight findings for a given contract — issues the engine detected (cost over plan, unaccepted outbounds, overdue milestones, dormant contract, etc.). Each finding has a rule_code, severity (info/warning/critical), a translated title and message, source_type/source_id pointing at the offending row, and a payload with rule-specific context. Findings disappear automatically when the underlying condition is fixed — there is no separate "resolved" state. Response may include error="permission_denied" — relay that to the user, do NOT speculate about alternatives.

get_contract_overview

ChatGPT
One call, one answer about a contract (zakázka): header (status, customer, responsible salesperson, project manager, teams, site, dates), money (current price incl. approved extra/omitted work, original price, invoiced split into the original price and the changes, remaining of the original price, approved changes not yet invoiced), costs by kind (material, labor, subcontract, overhead) with labor hours and the biggest cost items, profit and margin. Pass the contract id, or the words the user used (a customer, a street, "Lipová 2. etapa") and it resolves them through the index. This is THE answer to "is it profitable", "how is it doing", "what did it cost" — prefer it over get_contract and get_contract_insights. Figures the user may not see are listed in caveats, not omitted silently. Response may include error="permission_denied" — relay it, do NOT speculate about alternatives. For the documents attached to the job (offer, drawings, photos) call list_documents; for the material itself, item by item with quantities and units, call list_contract_material.

get_customer_overview

ChatGPT
One call, one answer about a customer or supplier from the address book: the contact card, their contracts (status, salesperson, project manager, price), their inquiries (status, salesperson, converted or not), totals across their contracts (price, costs, profit, invoiced) and — when they also supply us — their documents of the last 12 months. Pass the contact id, or the name as the user said it (a surname, a company, an IČ, a phone) and it resolves it; when several contacts fit, the response carries disambiguation instead of guessing. Prefer this over list_contacts + list_contracts for any "what do we have with customer Y" question.

get_inquiry

ChatGPT
Get full details of a single inquiry by ID: text, status and type (with labels), address, the responsible salesperson (owner), the subscribed colleagues, the contract it became, if any, and — when rejected — why, when and by whom. For its documents and survey photos call list_documents with inquiry.

get_inquiry_funnel

ChatGPT
The inquiry (poptávka) funnel over a period: how many were created in it, how many of those now sit in each status type by their current status (opened, confirmed, in_process, closed, rejected; "other" for a status of no known type), how many became contracts (counted apart from any status), and the same by month — for the whole company or for one salesperson. Answer "how many leads did we get / convert" from this, never by paging list_inquiries.

get_issued_invoice

ChatGPT
One issued invoice or other paper the company issued to a customer, with its lines — what was invoiced ("co jsme fakturovali na faktuře 2026-0034", "jaké položky má faktura pro Nováka"), the quantities and prices as printed, and which job or inquiry each line is for. invoice takes the paper's number, the customer's name (with more words to narrow it) or its id from list_issued_invoices / list_invoices_for_payment; when it answers with disambiguation, ask the user which paper and call again with its id — for "the last one" or a paper of a given month, find its id with list_issued_invoices (period and query) first. A user who sees only their own papers finds those only. invoice: number, kind, customer (with contact_id), the dates, currency (the one printed on the paper), exchange_rate (a paper in another currency: the company's currency per one unit of the paper's; null for a paper in the company's own), net, gross (as printed, in the paper's currency), net_in_books and gross_in_books (in the company's currency; null for a foreign paper without a rate — it counts in no revenue), state (paid / partially_paid / unpaid / overdue), collection_stopped, paid_on (the day it was paid in full), paid_amount and remaining in the paper's currency, source (the name of the connected accounting app the paper is loaded from and kept in step with — its number, customer, dates, lines and amounts and its payments change in that app, not in Worke, and a payment cannot be recorded on it here; which job or inquiry each line is for stays Worke's; null = a paper of the company's own in Worke), payments [{date, amount, source, connector}] — each payment recorded, source manual (entered by a person), integration (loaded from the connected accounting app named in connector) or advance (settled by a paid advance). lines in the order printed (at most 200, lines_total says how many): description, quantity, unit_price, net, vat_rate, vat, gross — in the paper's currency — settles_advance (a line deducting an advance billed earlier) and bound_to [{contract_id, contract, inquiry_id, inquiry, purpose, amount}] — the net of the line bound to each job, inquiry or purpose (a line may be split); an empty list = bound to nothing. To read the paper itself call list_documents with customer_document and its id.

get_my_attendance_status

ChatGPT
The user's own clock-in state only — for "what should I do today" call list_waiting_for_me first. Get the current attendance status for the logged-in user — which event types are allowed next based on their last event (e.g. if last event was arrival, only break_start or departure are allowed). Where record_my_attendance is available, always call this before it to avoid recording an invalid event.

get_pairing_candidates

ChatGPT
For ONE supplier-document material line, get the pairing engine's scored stock-inbound candidates (best-first); delivery-note lines it may pair to are in get_purchase_pairing_overview (delivery_notes[]). Use as a SECOND OPINION when a line is ambiguous and you want to cross-check your own judgement — not as the decision-maker. Returns candidates[] with stock_item_id, property_name, quantity, purchased_at, score (0..1; name 70% + quantity 30%) and supplier_matches (true when the candidate inbound shares the document's supplier). High score + supplier_matches + matching quantity is a strong signal; trust your reading of names/quantities over the raw score when they disagree.

get_person_hours

ChatGPT
One person's hour totals for a period — for everyone at once, the shifts day by day or hours per job call get_attendance_overview. How many hours one person worked in a period, from attendance: worked hours (arrival to departure minus breaks), recognised hours (what payroll counts after the firm's recognition rules — equal to worked when the firm uses none; the person's attendance page shows this figure), days with a closed shift, and shifts still open (not counted). Answers "how many hours did X work in September", "my hours this month". Pass the person as an id from list_people or as a piece of the name; without a person it answers for the user asking. Former employees count too. Default period: the current calendar month. No wages or rates — hours only; what a person cost is list_labor_costs. Response may include error="permission_denied" — relay it, do NOT speculate about alternatives.

get_property

ChatGPT
Get full details of a property including category, unit, available quantity (the company total; with more than one warehouse also by_warehouse and minimums_by_warehouse, and stock is then null), unit price, and type-specific fields (lifetime, insurance, service date, license expiry). For its documents and photos (manuals, certificates) call list_documents with property.

get_property_category

ChatGPT
Get details of a single property category by its ID.

get_purchase_pairing_overview

ChatGPT
For "what should I do first" call list_waiting_for_me, not this. Load BOTH sides of the purchase-pairing queue (Párování nákupů) in one call: supplier-document material lines awaiting pairing, and the targets they pair to — stock-inbound items awaiting a price and delivery-note lines awaiting their invoice (delivery notes pair in every company, with a warehouse or without). Use this FIRST for any pairing request ("spáruj faktury s příjemkami", "co mám nespárováno", "ke kterému dodacímu listu patří tahle faktura"). Returns documents[] (each with lines[]: paper_item_id, description, quantity, unit_price, amount, settled_quantity — what a delivery note already settled of the line; a line with settled_quantity > 0 waits for another delivery note for the rest — and held — true when the line waits for a person to say whether it is the same delivery as a delivery note's line: never pair it on your own, ask the user), inbounds[] (each with items[]: stock_item_id, property_name, quantity, note) and delivery_notes[] (each with supplier_name, document_number, issued_on and lines[]: delivery_note_line_id, description, quantity, awaiting_quantity, unit). All are pre-filtered to the pairing-eligible scope (material / minor equipment, last 180 days, supplier documents already submitted for approval). paper_item_id, stock_item_id and delivery_note_line_id are internal handles (for pair_purchase_items, where that tool is available) — NEVER show them to the user; refer to lines by material name, supplier, quantity and date. May return error="permission_denied".

get_received_invoice

ChatGPT
One received invoice or other supplier paper with its lines — what was bought ("co je na faktuře 2026-0153", "jaké položky má faktura od Stavebnin XY"), the quantities and prices as printed, and where each line's cost went. invoice takes the paper's number, the supplier's name (with more words to narrow it) or its id from list_received_invoices / list_invoices_for_payment; when it answers with disambiguation, ask the user which paper and call again with its id — for "the last one" or a paper of a given week, find its id with list_received_invoices (period and query) first. invoice: number, kind, supplier (with contact_id), the dates, currency (the one printed on the paper), exchange_rate, net / gross as printed (a receipt for an advance paid earlier keeps that line out of them — it was billed by the advance invoice) and gross_in_books in the company's currency, cost_in_books (the booked cost on the company's VAT basis), confirmed, kept_out_of_costs, paid_on (the day it was paid in full), state (the payment state, as in list_received_invoices), paid_amount and remaining in the paper's currency — state, paid_amount and remaining are null where payments are not tracked (a delivery note or credit note, a paper from before tracking or put away as history, a scan not read yet, or a company that does not track payments of received invoices) — never read that as unpaid — and payments [{date, amount, source, connector}]: each payment recorded, source manual (entered by a person) or integration (loaded from the connected accounting app named in connector). A user without access to Finance sees the paper but not its payments: paid_on, state, paid_amount, remaining and payments are left out and a caveat says so — never read that as unpaid. lines in the order printed (at most 200, lines_total says how many): description, goods (true = goods or material, false = work or a service), quantity, unit_price, net, vat_rate, vat, gross — in the paper's currency — is_advance (a line about an advance: on a final invoice the deduction of an advance billed earlier), counts_as_cost, booked_to {purpose, label, contract_id} (purpose as in list_received_invoices; null = not placed yet, a settled advance — money paid earlier, not a place — or a line of an advance invoice, whose goods are placed on the final paper) and cost_in_books (null for a line kept out of costs). A paper not confirmed yet shows where its lines are proposed to go. To read the scanned paper itself call list_documents with supplier_document and its id.

get_salesperson_performance

ChatGPT
How a salesperson (obchodník) — or, with role="project_manager", a project manager (projektový manažer) — is doing over a period: the contracts they are responsible for (count, by status, agreed price, costs, invoiced, profit, margin, labor hours, the top ten contracts by price), the inquiries a salesperson handled (received, converted, win rate; none for a project manager), and both by month. Pass the person's name as the user said it (first name, surname or both) or their id from list_people. For a salesperson, contracts count into the period and into a month by the day they were created (the sale); for a project manager, by their start (actual, else planned, else creation) — when the work runs. Answer "how good / how busy is X" from this, never from a count of list_contracts. Response may include error="permission_denied" — relay it.

get_step_calibration

ChatGPT
Compare production-step time plans (expected_minutes) against measured reality from kiosk work journal. Returns one row per step measured in the period: current expected_minutes (null = step has NO plan and is invisible to performance KPIs), units_measured (work units = contract+step+identifier, the fair comparison grain), avg/min/max actual minutes per unit, sessions_total. Use when the user asks to review/calibrate step time estimates against real data ("revize odhadů podle skutečných dat"). When proposing new values, base them on avg_unit_minutes, flag steps with high max/min spread as unreliable, and flag steps with expected_minutes=null as uncalibrated. A high max usually means forgotten-to-stop sessions — use get_work_journal_outliers to list them FIRST (and fix them, where fix_work_journal_entries is available), then re-read calibration for clean averages. Response may include error="permission_denied" — relay that to the user, do NOT speculate about alternatives.

get_task

ChatGPT
Everything known about one task: what it is about, its kind (standalone, or raised on a job, an inquiry, a complaint or a field note), status, priority and deadline day, when it was created and when it was closed, who raised it, who solves it and who follows it, the job / inquiry / complaint it belongs to, the field note it was raised from, the comments (latest thread first, replies inside), the visits planned for it in the calendar and the attached files. Use it when the user asks about a task's state, history or context. Who closed a task is not recorded — only when. Find the id with list_my_tasks (state done for a closed task). To read its attachments call list_documents with task.

get_work_journal_outliers

ChatGPT
List INDIVIDUAL runaway work-journal sessions — entries whose measured duration exceeds the step/identifier plan at least min_ratio times (typically someone forgot to stop the kiosk timer, e.g. 1000 minutes on a 30-minute step). Returns one page of up to 50 entries ordered by the sort parameter (worst overrun ratio first by default, or by how long the task actually took) with id_work_journal, employee, step, identifier, date, actual vs expected minutes and the ratio. The response carries has_more and a note with the next offset — when has_more is true, page through the rest by calling again with offset increased by 50 and the SAME months_back/min_ratio/id_steps/sort. Use this when the user wants to clean up obviously wrong measurements, asks why averages look inflated, or wants the longest/shortest task durations; where fix_work_journal_entries is available, pair with it to normalize them. Response may include error="permission_denied" — relay that to the user.

list_available_widget_types

ChatGPT
List widget types the current user is allowed to add to their dashboard, filtered by their ACL roles. Each entry has a numeric type_id and translated name. Answers "which widgets can I have". Where add_widget is available, use these IDs as its type_id and call this first so you know which types the user can actually add.

list_calendar_events

ChatGPT
For "what should I do (first) today" call list_waiting_for_me first — it holds overdue invoices, approvals and tasks besides the calendar. List calendar events within a date range. By default shows events from all accessible calendars. An event planned from an inquiry is a CONTACT with a customer: it carries a contact type (call / email / meeting / other), the customer's name and phone, and belongs to the calendar of the user who handled it. Use type "call" for "s kým jsem volal / komu jsem volal / kdo mi volal". First person ("já", "mi", "jsem") = owner "me" — without it a user who sees every calendar gets the whole company's calls. Owner set to a name = that colleague's calendar; only calendars the current user may see are searched, and the result says when no accessible calendar matched. Only contacts PLANNED on an inquiry carry a type — an empty result means no planned call is recorded, never that nobody called.

list_calendars

ChatGPT
List all calendars accessible to the current user (own + shared). Returns calendar ID, name, and owner. Use calendar IDs to filter events.

list_complaints

ChatGPT
Lists complaints (warranty claims, defects the customer reported) with what they say: subject, description, kind, status, priority, when and by whom reported, the deadline, who handles it, how it was resolved, its photos and the tasks raised from it. Use it for "what complaints does the X job have", "open complaints", "what was the defect at Novák and how did we fix it". Pass contract for one job or leave it out for every job the user can see; status open (new or in progress), closed (resolved or rejected) or leave it out for all; date_from / date_to narrow by the day it was reported. Name a complaint by its subject, a task by its name — ids are for you. status and priority are codes; say them in the user's words. When handling_withheld is true, who handles the complaints and how they were resolved is not available to the user — say so, never that nobody handles them. Open a photo with read_document using its document_id. Remediation costs are not here.

list_contacts

ChatGPT
List contacts from the address book. Returns id, full_name, email, tel, company, IC. Optionally filter with search (matches name, company, IČ, email or phone). Returns one page of at most 50, newest first — the response carries has_more, offset and a note with the next offset; when has_more is true, page further by calling list_contacts again with offset increased by 50, and do NOT claim a total.

list_contract_material

ChatGPT
Lists the material that went onto one job, line by line with its quantity and unit — the input for "how much material went to the X job", "what was issued to Novák's job and when", "did they use more than the work needs". Two sections, never added together: from_stock = items issued from a warehouse on a stock outbound, each with what became of it since (returned_to_stock, consumed, disposed, on_the_way = reserved or being driven, on_site; net_on_job = what stayed with the job; taken_back_by_driver = taken off the site, or never delivered, by a driver — back on a driver's load, in the warehouse or on another job; outbound.route stock = reserved and driven or handed over, direct_consumption = straight to the job, transport = from a driver's load); bought_direct = goods lines of supplier invoices and delivery notes whose cost books straight to the job without passing through a warehouse, with the description as printed on the paper. totals_by_material sums from_stock per material and unit. Pass contract; date_from / date_to narrow by the day of issue (from_stock) and the paper's booking day (bought_direct). Material entered on the job as a manual cost is not here (get_contract_overview counts it in costs). Compare against the work with list_field_notes and list_diary_entries; this tool only reports the amounts. A unit null means the paper did not say — never assume one, and never add quantities whose units differ or are unknown. Amounts are withheld when prices_withheld is true; a section named in sections_withheld is not available to the user — say so, never that the job has none.

list_contracts

ChatGPT
List contracts (zakázky) with name, customer, status, owner (the salesperson responsible — obchodník), project_manager (the person who runs the job — projektový manažer), work teams, planned dates, and price (price is omitted when the user may not view contract finances). For one job's health, costs or margin call get_contract_overview; for a salesperson's numbers get_salesperson_performance; for a customer's history get_customer_overview. Optionally filter by status and/or search by name. Statuses: "opened" = running, "pending_close" = close requested and being verified, "closed" = finished, "cancelled" = stornovaná. Filter by owner (salesperson) or project_manager to answer questions like "how many open contracts does Jan Novák have" — combine it with status="opened". The response ALWAYS carries total_matching — the exact number of contracts matching the filters, independent of paging. Answer every counting question from total_matching, never by counting the rows in front of you. Returns one page of at most 50 matches, newest first; has_more only means you have not SEEN them all, never that the total is unknown. To read further rows call list_contracts again with offset increased by 50 and the SAME filters. Each result includes contract_url — when citing a contract in your reply, render it as a markdown link like [name](url) so the user can click through. Response may include error="permission_denied" — relay that to the user, do NOT speculate about alternatives.

list_diary_entries

ChatGPT
Lists construction-diary entries — one per job and day: the weather and its impact on work, the work done, where, notes, the plan for the next day, safety incidents, the people on site with their hours, delays, who wrote and who signed it, and its photos. Use it for "what is in the diary for the X job", "what was done there yesterday", "who was on site last week", "were there any delays". Pass contract for one job or leave it out for every job the user can see; date_from / date_to narrow by the entry's day. Name an entry by its day and job — entry_id is for you. Weather, impact and delay values are codes; say them in the user's words. When only_jobs_worked_on is true, the user sees only the diaries of jobs they work on — say so, never that other jobs have no entries. Open a photo with read_document using its document_id.

list_documents

ChatGPT
Lists documents and photos attached in Worke — pass exactly ONE of: contract (a job: its own documents, and as SEPARATE sections the documents of the inquiry it came from, the photos of its complaints, site notes, construction diary and stock outbounds), inquiry (an inquiry on its own, also one that has not become a job yet: the customer's papers, the survey photos taken on site, the e-mail attachments), task (a task's attachments), vehicle (its papers and photo, the photos of its service requests and loans), property (a tool, machine or material: its documents and photos), contact (an address-book contact's documents), supplier_document or customer_document (a received or issued invoice / paper — the file it was read from, generated as, or loaded from a connected accounting app) or stock_inbound (a goods receipt's delivery notes). A vehicle also lists its service-record documents and fuel receipts, a property its service-record documents. Always say which section a document comes from. For the records themselves call list_field_notes (field notes: text, author, which photos belong to which note), list_complaints (complaints: subject, status, how they were resolved) or list_diary_entries (diary: the day's work, people, weather, delays) instead. The accepted offer of a job is among the job's documents with origin_label "offer". Open a document with read_document using its document_id. A section the user may not see comes back as {withheld: true} with a caveat — tell the user it is not available to them, never that there are no documents.

list_field_notes

ChatGPT
Lists field notes — the records the crew writes from the site on the phone (a text, photos, or both), the job page's field-notes tab. Use it for "what came from the site", "today's field notes on the X job", "what did Novák report". Pass contract for one job, or leave it out for every job the user can see; narrow with date_from / date_to. Each note is its own record even when several were written the same day: present them one by one with when, who, the text and its photos, and name a note by its time and author — note_id is for you, never show it; name a task by its name. A note with text null is photos only. Open a photo with read_document using its document_id. When only_own_notes is true, the user sees only the notes they wrote themselves — say so, never that the job has no other notes.

list_inquiries

ChatGPT
List inquiries (poptávky) with the responsible salesperson (owner) and the contract each one became, if any. Returns id, name, email, phone, status, type, owner, contract_id/contract_name, creation date and — for rejected ones — rejection_reason (answer "why do we lose inquiries" from it, filtered by status_type "rejected"). Filter by owner to answer "which leads is Karel handling" and combine with created_from/created_to for a period; an inquiry with contract_id set has converted. The response ALWAYS carries total_matching — the exact number of inquiries matching the filters, independent of paging; answer counting questions from it, never by counting rows. One page of at most 50, newest first; page further with offset increased by 50 and the SAME filters.

list_inquiry_statuses

ChatGPT
List available inquiry statuses with their types (opened, confirmed, in_process, closed, rejected).

list_inquiry_types

ChatGPT
List available inquiry types (e.g., "Rekonstrukce koupelny", "Montáž klimatizace"). Use these IDs when creating inquiries.

list_intake_addresses

ChatGPT
The firm's own Worke e-mail addresses that turn a forwarded e-mail into a record: the inquiries address (an e-mail sent or forwarded there becomes a new inquiry) and the invoices address (a supplier invoice or receipt attached to an e-mail sent there becomes a received invoice). Answers "where do I forward an invoice", "what is our address for inquiries". Only the addresses the user may see are returned. Response may include error="permission_denied" — relay it, do NOT speculate about alternatives.

list_invoices_for_payment

ChatGPT
Invoices waiting for payment, or paid ones, on one side — for how much was bought or invoiced in a month call list_received_invoices / list_issued_invoices instead: issued to customers or received from suppliers. Each comes with its number, the customer or supplier, the total and its currency, the due day, the payment state, paid_amount (paid so far) and remaining (still to pay) in the invoice's currency, and the day it was paid in full — every amount is in the currency printed on the invoice, so never add up amounts of different currencies; an issued one the company stopped chasing carries collection_stopped (it stays unpaid, off every overdue list), a received one waiting for confirmation or approval cannot be paid yet; source names the connected accounting app an invoice is loaded from — its payments are recorded in that app and show up here by themselves, never recorded here. Narrow it with query — words from the customer's or supplier's name or from the number, diacritics and letter case ignored. Open ones by default — waiting, payable, partially paid or overdue — the longest due first; state "paid" lists the ones paid in full, the latest payment first — paid_from / paid_to narrow it to days, omit them for every paid invoice. Where recording payments is offered (mark_invoice_paid), call this first when the user says a customer paid ("Novák zaplatil fakturu") or that the company paid a supplier — it gives the invoice id that recording needs. To read the invoice itself (the file it was read from, generated as, or loaded from a connected accounting app) call list_documents with supplier_document or customer_document and that invoice's id.

list_issued_invoices

ChatGPT
Issued invoices and other papers the company issued to customers in a month or period — how much it invoiced ("kolik jsme vyfakturovali v září"), to whom, whether it was paid, and which job or inquiry each paper is for. A paper belongs to the month of its taxable supply date, or of its issue date when it has none. summary: net and gross (a final invoice deducts the advances billed before it, so an advance counts where it was billed; a tax receipt restates its advance and is in by_kind only), by_kind, paid / partially_paid / unpaid / overdue gross (a partly paid paper counts whole under partially_paid), and bound_to — the net summed per job (contract_id) or inquiry (a binding to neither by its purpose), what is bound to nothing as unassigned; they add up to net. Every summary figure is in the company's currency: a paper in another currency counts through the exchange rate it carries; one without a rate is listed with its currency and left out of the totals — a caveat says how many. A user who sees only their own papers gets those only — a caveat says so. invoices lists them newest first (at most 30, total_matching says how many): number, kind, customer, the dates, net, gross (as printed, in the paper's currency), currency, exchange_rate (a paper in another currency: the company's currency per one unit of the paper's; null for a paper in the company's own), net_in_books and gross_in_books (in the company's currency; null for a foreign paper without a rate), state (paid / partially_paid / unpaid / overdue), collection_stopped, paid_on (the day it was paid in full), paid_amount and remaining in the paper's currency, source (the name of the connected accounting app the paper is loaded from and kept in step with — its facts and its payments change in that app, not in Worke; null = a paper of the company's own in Worke), and its own bound_to in the paper's currency. For the lines of one paper — what was invoiced, the quantities and prices, and which job or inquiry each line is for — call get_issued_invoice with its id; for what customers still owe call list_invoices_for_payment (side issued); for a job's invoicing against its price call get_contract_overview; to open the paper's file call list_documents with customer_document and its id.

list_labor_costs

ChatGPT
What the company's people cost in a month or period, person by person — employees and invoicing workers (fakturanti, people who invoice their work) side by side ("kolik nás stáli lidi / fakturanti v září", "kdo ještě nevyfakturoval září", "kolik stojí hodina Jana Nováka"). Read from the payroll Worke works out once a month after it ends, so a month not worked out yet has no figures (months_not_generated + a caveat say when it will be). Per person: cost_source (attendance = an employee priced by hourly rate × recognised hours; invoice = an invoicing worker, whose cost is what he invoiced for that month, by the month set on the invoice line; mixed = both within the period), hours (recognised), pay_from_hours, office_wage (pay of someone who does not clock in, from the work schedule), invoiced, total (= pay_from_hours + office_wage + invoiced) and cost_per_hour; on_jobs — the part booked straight on jobs (the largest jobs named), not_on_jobs — the rest, in company overhead; both only for a user who may see job costs (otherwise null, and a caveat says so). invoicing_without_paper names invoicing workers who sent a paper in the months before but none for a month of the period, with their last paper. A month with no paper costs nothing, so they are not in the totals — say so when asked what people cost, and never add a guess of the missing paper to a total. Whether an invoice was paid is not here (list_invoices_for_payment). Pass person to narrow to one person, cost_source to one kind. Response may include error="permission_denied" — relay it, do NOT speculate about alternatives.

list_loans

ChatGPT
List property and vehicle loans (zápůjčky) — who currently has which tool, machine, material, or vehicle borrowed. Covers both property loans (tools, machinery, materials) and vehicle loans in one call. By default returns only currently active loans (not yet returned). Set include_returned=true to also include past/returned loans (historical view) — only do this when the user explicitly asks about past or historical loans. Optionally filter by user_id to see what a specific person has (or had) borrowed. Each result includes item_url (item detail page) and borrower_url (user detail page) — when citing items or borrowers in your reply, render them as markdown links like [name](url) so the user can click through. Response may include error="permission_denied" if user lacks ACL on loans — relay that to the user, do NOT speculate about alternatives. Response includes accessible_sections (subset of ["property","vehicle"]) — if a section is missing, it was filtered by ACL, not absent; tell the user that part is not visible to them rather than claiming nothing exists. For the photos taken at vehicle loans call list_documents with vehicle; for where a vehicle is or went call list_vehicle_movements.

list_my_contracts

ChatGPT
List contracts the logged-in user is subscribed to or assigned via a work team. Use this to offer a contract picker when the user wants to attribute attendance (especially arrival) to a specific contract.

list_my_tasks

ChatGPT
For "what should I do (first)" call list_waiting_for_me first — it holds overdue invoices, approvals and more besides tasks. Tasks where the current user is the solver or a follower: name, status, priority, deadline day, the job it belongs to, and whether the user is the solver. Open tasks by default — "what are my tasks". state "done" lists the closed tasks, the latest first, with the moment each was closed — "what did I finish", and to find a closed task to check (or to reopen, where set_task_status is available); done_from / done_to narrow it to days (e.g. today for "what did I finish today"), omit them for every closed task, and a long list comes in pages: offset continues where truncated cut it. query narrows either list to words of the task's name. A task missing from the open list may simply be done: look among the done ones before saying it does not exist. get_task tells the whole story of one task. Find a task's id here before set_task_status, where that tool is available.

list_my_widgets

ChatGPT
List widgets currently placed on the user's own dashboard. Returns each widget with its widget_id, type_id, translated type name, custom name, size, and height — "what is on my dashboard". Where update_widget / delete_widget are available, call this first so you reference the right widget_id.

list_offers

ChatGPT
Price offers (nabídky) the user may see, newest first — what was offered to whom and for how much, what is still open, sent and waiting for an answer, accepted or rejected. state narrows it: open = ready or sent (not decided yet), or one of draft, ready, sent, accepted, rejected; expired marks a ready or sent offer past its valid_until. month / period_from / period_to narrow it to offers created in that period; without them every offer counts. summary counts them per state with the net total of those in the company's currency (an offer in another currency is counted, not summed). offers (at most 30, total_matching says how many): number, name, state, expired, customer, total_clean (net), total (gross) and currency, valid_until, created_on, sent_on, decided_on, owner (who handles it), inquiry_id / inquiry and converted_to_contract_id when a job was made from it. inquiry_id is the inquiry it was made for (get_inquiry tells about it); converted_to_contract_id is the job made from it (get_contract_overview tells how it is doing). A user who sees only their own offers gets only those — a caveat says so.

list_people

ChatGPT
The company's people: id, full name, position, whether active, whether counted as overhead (office) rather than field, whether they may lead a site. Use it to resolve a name to an id for get_salesperson_performance, get_person_hours or list_loans, and to answer "who works here". Complete unless truncated is true (200 at most — narrow with search). No rates, no pay.

list_planner_events

ChatGPT
For who is at work today — people, not crews — call get_attendance_today. The planner board for a period: which crew (work team) is planned on which contract, which inquiry it holds a reservation for, and which crew is unavailable when — an absence belongs to a crew, not to a person, and its reason is never given (it may be health data). Answers "where is crew B this week", "who works on contract X next week", "which crew is unavailable on Friday". Filter by a team (id or a piece of its name) and/or a contract (id or the words the user used); without filters it returns the whole board. Default period: the current week, Monday to Sunday. Response may include error="permission_denied" — relay it, do NOT speculate about alternatives.

list_properties

ChatGPT
List properties (assets, materials, tools, software). Returns name, type, available quantity (the company total; with more than one warehouse also by_warehouse), category. Returns one page of at most 50, newest first — the response carries has_more, offset and a note with the next offset; when has_more is true, page further by calling list_properties again with offset increased by 50 and the same type/search, and do NOT claim a total.

list_property_categories

ChatGPT
List all property categories. Optional filter by property type. Each category returns: id, name, id_properties_type, default_lifetime_months.

list_received_invoices

ChatGPT
Received invoices and other supplier papers of a month or period — how much the company bought ("jaký objem faktur přijatých je za září"), from whom, and where each paper's cost went: to which job, to company overhead, to stock, to a car or machine, or kept out of costs. A paper belongs to the month of its taxable supply date, or of its issue date when it has none — the same month its cost is booked in. summary covers confirmed papers only, in the company's currency: net and gross (a final invoice already deducts an advance billed earlier, so advances count where they were billed, and a supplier's receipt for an advance payment adds nothing; delivery notes are in by_kind but out of net / gross — their invoice bills them again), by_kind, cost (the booked cost on the company's VAT basis) and booked_to — that cost summed per place, adding up to cost (purpose: contract = a job, named, with contract_id; overhead = company overhead, by category; material = goods taken into stock; asset / vehicle = a long-term asset or a car bought; vehicle_cost / machine_cost = running cost of a car or machine; worker_capacity = a person's work bought for a month — what invoicing workers cost, by the month of their work, is list_labor_costs; excluded = kept out of costs, listed with its amount but not part of cost; null = not placed yet). Papers still waiting for confirmation are counted apart in drafts. invoices lists the papers newest first (at most 30, total_matching says how many): number, kind, supplier, the dates, net / gross in the currency printed on the paper and gross_in_books in the company's currency, confirmed, paid_on (the day it was paid in full), state (the payment state as list_invoices_for_payment gives it, e.g. payable, partially_paid, overdue, paid), paid_amount and remaining (what the payments recorded so far leave to pay) in the paper's currency — state, paid_amount and remaining are null where payments are not tracked (a delivery note or credit note, a paper from before tracking or put away as history, a scan not read yet, or a company that does not track payments of received invoices) — never read that as unpaid — and its own booked_to. A user without access to Finance sees the papers but not their payments: paid_on, state, paid_amount and remaining are left out of every row and a caveat says so — never read that as unpaid either. A user who sees only the papers they uploaded gets those only — a caveat says so. For the lines of one paper — what was bought, the quantities and prices, and where each line's cost went — call get_received_invoice with its id; for a job's whole cost picture call get_contract_overview; for what is still to be paid call list_invoices_for_payment; to open the paper's file call list_documents with supplier_document and its id.

list_recent_pairings

ChatGPT
List recently committed invoice↔receipt pairings, newest first — for REVIEW ("zkontroluj párování", "nespároval jsem něco blbě?"). Each entry has the paper line (paper_description, amount, document_supplier_name, document_number) and the paired stock side (property_name, inbound_supplier_name, inbound_purchased_at), plus paper_item_id (internal handle for unpair_purchase_items, where that tool is available). Look for anomalies: document supplier ≠ inbound supplier, material name vs line description divergence, implausible amount/quantity. Flag suspicious ones and offer to unpair. Paged, newest first: the response carries has_more, offset and a note with the next offset — to review older pairings, call again with offset increased by the page size (limit).

list_stocks

ChatGPT
List available stock/warehouse locations.

list_units

ChatGPT
List available measurement units for properties. Returns id, name, and decimal precision.

list_vehicle_movements

ChatGPT
Where the company's vehicles went and where they stood, from the cars' GPS: the trips of a period (left when, from where, arrived when, where, km, purpose, private or not, the job the trip was booked to), the stops — where a car stood still, from its first still position until it was next seen moving (a stop is there even when the trip list misses a leg), each with who most likely drove it then and what that person uploaded while the car stood there (uploaded_here: the inquiry or job a photo was added to, how many, when) — and each car's last known position. Use it for "where was Novák today", "who went to Lipová 12", "where is the van now", "was anybody at the customer's". Narrow with vehicle, person (only the stops and trips they drove) and place (a piece of an address); date_from / date_to default to today. A driver comes from the trip (driver_basis "logged" when entered by hand) or from who had the car borrowed that day (driver_basis "loan") — say "most likely", never that it is proven. To tell whether someone was at an inquiry or a job, compare the stops with its address (get_inquiry, get_contract) — an address one street off is still the same visit when the times fit — and read uploaded_here; say it is read from the car's GPS. For what was recorded there call list_documents or list_field_notes. Stops, positions and borrowers the user may not see come back withheld with a caveat — say they are not available to them, never that the car stood nowhere.

list_waiting_for_me

ChatGPT
The current user's to-do list in Worke. Call it FIRST for "what should I do (first) today", "co na mě čeká", "co mám po termínu", "what is late" and any question about the user's own day or priorities — never answer those from the calendar, attendance or an analysis tool alone. It is the "Čeká na tebe" strip of their dashboard: customers who have not paid overdue invoices, costs waiting for their approval, received documents to confirm, payables, their complaints, their open tasks, unread mentions, vehicle papers and services, certifications, attendance discrepancies. Each item says what it is, how many, how pressing (overdue first, then today, then waiting) and, for a customer, a vehicle or a person, the records it is about. The items come ordered by urgency, so lead with the first one, then add the user's tasks and today's calendar events for detail. A task past its deadline is late ("po termínu"); "due" ("po splatnosti") belongs to invoices only. Only what is assigned to the user or what they watch, and only what they may open.

read_document

ChatGPT
Opens one document returned by list_documents. A PDF, a photo or a scan comes back as the file itself for you to read; a spreadsheet or a Word file comes back as its text. Quote what the document says; never guess what it does not show. When the file could not be attached, say so and send the user to open it in Worke.

search_docs

ChatGPT
Search the user manual for how-to and conceptual answers. Use this FIRST whenever the user asks HOW to do something, WHY something behaves a certain way, or asks about ERP concepts / workflows / features. Returns top matching sections with links: help_url is a path that opens only inside the Worke app; public_url is the same page on the public site and opens anywhere. Do NOT improvise from general ERP knowledge — rely on what this tool returns, and cite a link in your answer: public_url whenever the conversation is not inside the Worke app (for example in ChatGPT), help_url only inside it. If no relevant chunks come back, say so explicitly instead of guessing.

Example Prompts

Click any prompt to copy it.

App Stats

60

Tools

3

Prompts

ChatGPT

Platforms

Category

CRM Records

Works with

ChatGPT

Data refreshed daily