# lota MCP

> lota (https://lota.tools) is a set of business products (sites, menu and orders, online booking, clients and memberships, goods and warehouse, tasks, working-time tracking). Each product has a remote MCP server (streamable HTTP) so an AI assistant such as Claude or ChatGPT can read and change the person's data in lota. Human-readable page: https://lota.tools/mcp

## Documentation

- Help centre (Guide): https://lota.tools/guide ; articles of a product: https://lota.tools/guide/<product>/<article> (products: pages, menu, plans, contacts, goods, issues, atrace; general articles under global, for example https://lota.tools/guide/global/ai-overview and https://lota.tools/guide/global/ai-connect).
- MCP, human-readable: https://lota.tools/mcp ; this file: https://lota.tools/llms.txt ; the same as Markdown: https://lota.tools/mcp.md.

## Connecting

- Transport: remote MCP over streamable HTTP, one server per product (addresses below).
- Sign-in (OAuth 2.1 with PKCE, dynamic client registration): add the server address in the AI client and start the sign-in; a lota page opens where the person chooses the workspace and the rights ("read" or "read and write") and presses Allow. Metadata: `/.well-known/oauth-protected-resource/<path>/mcp` and `/.well-known/oauth-authorization-server/<path>`.
- Or a key: the person creates it in the product settings on the "AI assistant" tab (prefix `lpt_`) and the client sends it as `Authorization: Bearer <key>`.
- Rights follow the role of the person who connected: any key can read; writing needs the owner or manager role (or the role the product's own app allows for that action).

## Rules for the AI

- Show a short plan and wait for the person's yes before creating or changing anything.
- Read the details back before creating a booking or an order, before publishing a site, cancelling, rolling back or deleting.
- Never invent prices, addresses, contacts, reviews or numbers: ask the person.
- lota Pages: all edits are drafts; publish_site only after an explicit yes.

## Servers and tools

### lota Pages

- Address: https://lota.tools/api-pages/mcp
- Purpose: The website builder: builds and runs whole sites: pages, design, menus, cities and languages, blog, redirects, domains and publishing.
- Rules: Every edit goes to drafts. Publishing (publish_site), rollback, domains and deleting a site only after the person says yes. Only the workspace owner creates and deletes sites. A key can be limited to one site.
- Tools:
  - `list_sites` (read): List the websites this token can edit.
  - `get_site` (read): Get one website with its address and live version.
  - `list_pages` (read): List pages of a site (id, path, title, status).
  - `get_page` (read): Get a page as Markdown (frontmatter + content).
  - `create_page` (write): Create a page from Markdown. Saved as a draft; nothing goes live until publish_site.
  - `list_categories` (read): List the site's categories (slug, title, parent).
  - `create_category` (write): Create a category. Its listing page appears on the site after the next publish.
  - `update_page` (write): Replace a page's content from Markdown. Changes the draft only; nothing goes live until publish_site.
  - `upload_image` (write): Upload an image to the site's media library and get the URL to use in Markdown.
  - `preflight_site` (read): Check the site before publishing: titles, descriptions, broken links, noindex, duplicates.
  - `publish_site` (publish): Publish the site: pages marked ready go live.
  - `rollback_site` (publish): Make a previous published version live again.
  - `list_redirects` (read): List the site's redirects.
  - `upsert_redirect` (write): Create or change a redirect. Takes effect on the next publish.
  - `restore_page` (write): Take a deleted page out of the trash. It comes back as a draft at its old address (or with -restored added when that address is taken).
  - `purge_page` (publish): Delete a page for good, skipping the trash (it has no child pages).
  - `list_trash` (read): List the site's deleted pages (they can be restored with restore_page for 30 days).
  - `bulk_pages` (write): Apply one action to many pages: move to trash, restore, back to draft, mark ready, move under another page, or noindex / index (hide from search…
  - `list_tags` (read): List the tags used on the site's pages with how many pages each has.
  - `get_blog_settings` (read): Read the blog and search settings: blog address, posts per page, site search, RSS, date and author archives, related posts and the default layout…
  - `set_blog_settings` (write): Change the blog and search settings. Only the fields you pass change.
  - `set_cities` (write): Set the cities of the site. Each city is a section: create its front page at /<slug> (create_page with that slug and no parent) and put the city's…
  - `get_extra_menu` (read): Read the footer or sidebar menu (the header menu has get_menu).
  - `set_extra_menu` (write): Replace the footer or sidebar menu. Goes live on the next publish.
  - `get_404_log` (read): Addresses visitors and crawlers asked for that do not exist, most asked first.
  - `clear_404_log` (write): Forget one missing address (after fixing it) or the whole 404 log.
  - `get_link_report` (read): Internal linking of the pages that are ready: orphans (no incoming links), pages buried too deep, and places where a link to a related page is…
  - `get_design` (read): Read the site's design: preset, overrides, logo, favicon, footer text, custom CSS, scripts and floating contact buttons.
  - `update_design` (write): Change the site's design. Only the fields you pass change.
  - `delete_page` (write): Move a page to the trash (it must have no child pages); restore_page brings it back within 30 days.
  - `move_page` (write): Move a page under another page (or to the top level) and set its order.
  - `list_revisions` (read): List a page's saved versions (newest first).
  - `restore_revision` (write): Put a saved version's content back into the page draft (itself saved as a new version, so it can be undone).
  - `update_category` (write): Change a category's title, address, description, parent or order.
  - `delete_category` (write): Delete a category. Its pages stay, they just leave the category; its subcategories move to the top level.
  - `list_translations` (read): Show a page and the pages linked to it as its translations.
  - `create_translation` (write): Copy a page into a new DRAFT in another language and link the two.
  - `create_city_page` (write): Make this page for a city: copies it into a new DRAFT under the city's front page (/<city>/<slug>, or /<lang>/<city>/<slug> for a language section).
  - `set_home_page` (write): Make an existing ready page the site's front page (address /).
  - `link_translations` (write): Declare two existing pages of one site to be translations of each other.
  - `unlink_translation` (write): Remove a page from its translation group.
  - `list_media` (read): List the site's uploaded images.
  - `delete_media` (write): Delete an uploaded image. Pages that still use it will show a broken image after the next publish.
  - `list_versions` (read): List published versions of the site (newest first); use rollback_site with one of them.
  - `delete_redirect` (write): Delete a redirect by its source path.
  - `import_redirects` (write): Add many redirects at once from CSV lines (from,to[,code]).
  - `list_domains` (read): List the site's custom domains with their status and the DNS records still to create.
  - `add_domain` (publish): Connect a custom domain. Returns the DNS records the owner must create at their DNS provider; then call check_domain.
  - `check_domain` (read): Re-check a domain's DNS now and move it forward (verify, issue the certificate, activate).
  - `set_primary_domain` (publish): Make an active domain (or the platform address) the canonical one; the others redirect to it.
  - `remove_domain` (publish): Disconnect a custom domain. Needs the publish permission.
  - `list_global_blocks` (read): List the site's reusable blocks (a contact banner, a call to action, ...).
  - `create_global_block` (write): Create a reusable block. Pages that reference it show it after the next publish.
  - `update_global_block` (write): Change a reusable block's name, slug or content.
  - `delete_global_block` (write): Delete a reusable block. Refused while pages still use it: remove it from them first.
  - `get_menu` (read): Read the header menu of the site.
  - `set_menu` (write): Replace the header menu. Items can be pages (by path), categories (by slug), links and headings, nested up to three levels; a top-level item with…
  - `list_page_templates` (read): Ready-made page layouts (landing, about, services, contacts) built from section blocks.
  - `get_usage` (read): What the workspace uses of its plan: sites, pages and disk, with the plan's limits.
  - `create_site` (write): Create an empty website (a draft with no pages).
  - `update_site_settings` (write): Change the site name, default language, robots.txt or Google verification code.
  - `delete_site` (publish): Permanently delete a site with all its pages and take it offline.
  - `set_site_suspended` (publish): Take a published site offline (visitors get a stub) or bring it back.
  - `list_themes` (read): List the design presets and every allowed value of every design option (fonts, corners, header styles, ...).
  - `suggest_design` (read): Get a ready, unique-looking design for the site (preset + colours, fonts, corners, cards, hero, buttons) matched to the business.
  - `get_publish_overview` (read): Everything the Publish tab shows in one call: can the site go live, errors, what the next publish changes, link problems, 404s, domain status and…
- Example requests:
  - Build a website for a coffee shop: home, menu, contacts, blog
  - Translate the About page into English and Kazakh
  - Pick a new look for the site and show what changes on publishing

### lota Menu

- Address: https://lota.tools/api-menu/mcp
- Purpose: Menu and orders: categories, dishes, branches, taking orders and moving them along.
- Rules: Any key can read; owners and managers can write. An order is created only after the AI has read the details back and you said yes; prices are taken and totalled by the server, not by the AI.
- Tools:
  - `list_branches` (write): The branches (points of sale). Needed for pickup and in-house orders; if there is only one, use it without asking.
  - `list_orders` (write): Orders created in a date range (default today), optionally by status or branch.
  - `get_order` (write): One order with its items.
  - `create_order` (write): Place an order exactly like the "new order" button of the app.
  - `update_order_status` (write): Move an order along: ACCEPTED, IN_PREPARATION, READY, DELIVERING, COMPLETED or CANCELLED.
  - `get_menu` (write): The whole menu: categories and dishes.
  - `apply_preset` (write): Start the menu from a ready set of categories for a type of business (only on an empty menu).
  - `create_category` (write): Add a category (or a sub-category with parent_id).
  - `update_category` (write): Rename a category or hide it (is_active=false).
  - `create_item` (write): Add a dish to a category with a price.
  - `update_item` (write): Change a dish: name, price, description, category, or hide it (is_active=false).
- Example requests:
  - Create an order: two cappuccinos and a croissant, pickup, for Aigerim
  - What orders came today and what is their status?
  - Add a "Desserts" category with three items to the menu

### lota Plans

- Address: https://lota.tools/api-plans/mcp
- Purpose: Online booking: locations, working hours, services, specialists and client bookings.
- Rules: Any key can read; owners, managers and receptionists can write. A booking is created after confirmation; the server checks working hours and conflicts. Cancelling and no-show need a separate confirmation.
- Tools:
  - `list_bookings` (write): Bookings (appointments) in a date range, newest first limited to 100.
  - `get_booking` (write): One booking with its services.
  - `list_masters` (write): Specialists (masters) who take bookings, optionally of one location or who do one service.
  - `check_availability` (write): Free times for a service on one day, from the real working hours and existing bookings.
  - `create_booking` (write): Book a client for a service at a time, exactly like the "new booking" button of the app: working hours and conflicts with other bookings are…
  - `update_booking_status` (write): Change the status of a booking: CONFIRMED, COMPLETED, CANCELLED or NO_SHOW.
  - `cancel_booking` (write): Cancel a booking. Name the booking (client, date, time) to the person first and set confirmed=true only after they agree.
  - `get_setup` (write): The whole booking setup: locations, service categories and services.
  - `create_location` (write): Add a place where clients are served.
  - `set_working_hours` (write): Set the weekly working hours of a location.
  - `create_service_category` (write): Add a service category (e.g. Haircuts).
  - `create_service` (write): Add a bookable service with a duration and a price.
  - `update_service` (write): Change a service: name, duration, price, description, category, or hide it (is_active=false).
- Example requests:
  - Book Aigerim for a haircut tomorrow at 3 pm
  - What is booked this week and what slots are free on Tuesday?
  - Add a "Manicure" service, 60 minutes, 8000 KZT

### lota Contacts

- Address: https://lota.tools/api-contacts/mcp
- Purpose: Client base and memberships: clients, membership plans, issued memberships, visits and bonuses.
- Rules: Rights are the same as in the app (owner, admin, editor, viewer); the viewer does not see phones and e-mails. A membership visit is marked only on a direct request. Membership plans are never deleted, only switched off.
- Tools:
  - `list_clients` (write): Find clients (people and companies) of this Contacts, by name, phone or e-mail.
  - `get_client` (write): One client with tags and contact details (phones and e-mail are hidden from the read-only role).
  - `create_client` (write): Add a person to the client base, with a phone and/or e-mail if given.
  - `list_membership_plans` (write): Membership plans (абонементы) sold by this business: price, validity, visits.
  - `create_membership_plan` (write): Create a membership plan (visit pack with a validity period).
  - `update_membership_plan` (write): Change a membership plan. Only the fields you pass change.
  - `list_memberships` (write): Issued memberships (what clients bought), filtered by client, plan or status.
  - `list_membership_visits` (write): The visits marked on one issued membership.
  - `record_membership_visit` (write): Mark one visit on a client's membership (uses up one visit).
  - `get_bonus_balance` (write): The loyalty bonus balance of a client.
- Example requests:
  - Find the client Ivanov and show his memberships
  - Create a "10 sessions" membership, 30 days, 25,000 KZT
  - Mark a visit on Ivanova's membership

### lota Goods

- Address: https://lota.tools/api-goods/mcp
- Purpose: Goods and warehouse: catalog, categories, stock, till sales and goods receipts.
- Rules: Prices are whole numbers in the smallest currency unit. Sales are visible to owners, managers and cashiers; receipts to owners, managers and stock keepers. Owners and managers can write; there is no deleting.
- Tools:
  - `list_units` (write): Units of measure (pcs, kg, l...). Their ids are needed to create goods.
  - `list_warehouses` (write): Shops and storage rooms.
  - `list_categories` (write): Categories of goods.
  - `create_category` (write): Add a category (or a sub-category with parent_id).
  - `update_category` (write): Rename a category, reorder it or hide it (is_active=false).
  - `list_goods` (write): Goods of the catalog with prices, found by name or SKU, optionally in one category.
  - `get_good` (write): One good with its barcodes.
  - `create_good` (write): Add a good to the catalog with a price. Prices are whole numbers in the smallest currency unit.
  - `update_good` (write): Change a good: name, SKU, selling price, category, or hide it (is_active=false).
  - `list_stock` (write): How much of each good is in stock, per warehouse.
  - `list_sales` (write): Sales (receipts from the cash register): number, status and totals.
  - `list_goods_receipts` (write): Goods receipts (deliveries into a warehouse).
- Example requests:
  - How much coffee beans are left in each warehouse?
  - Add a "Croissant" good, SKU CR-01, price 900
  - Show yesterday's sales

### lota Issues

- Address: https://lota.tools/api-tasks/mcp
- Purpose: Tasks and boards: personal tasks and reminders, team tasks, moving between statuses, comments.
- Rules: There is no separate reminder field: the due date and time is the reminder. Owners and managers create and change tasks. A personal task needs only a title: it goes to you, on the first board and into the first open column.
- Tools:
  - `list_boards` (write): All boards with their columns (statuses).
  - `list_task_types` (write): Task types of a board (every task has one).
  - `list_tasks` (write): Tasks, newest first, filtered by board, column, assignee or text.
  - `get_task` (write): One task with its comments.
  - `list_my_tasks` (write): The connected person's own tasks (assigned to them): use it for "what do I have to do", "what is due this week".
  - `create_my_task` (write): Create a task or reminder FOR THE CONNECTED PERSON ("add a task for me", "remind me tomorrow at 10 to call the supplier").
  - `create_task` (write): Create a task for the team or for someone else.
  - `update_task` (write): Change a task: title, description, priority, due date / reminder time (due_at), type.
  - `move_task` (write): Move a task to another column of its board (status key from list_boards).
  - `add_comment` (write): Write a comment on a task.
  - `create_task_type` (write): Add a task type to a board.
- Example requests:
  - Remind me tomorrow at 10:00 to call the supplier
  - What tasks do I have this week?
  - Create a task "Prepare the promo" for the team and move it to "In progress"

### lota Atrace

- Address: https://lota.tools/api-atrace/mcp
- Purpose: Working-time tracking: employees, work places, schedules and shifts, attendance and lateness.
- Rules: Atrace itself checks rights: a key stops working when its creator is no longer an active member. Schedules and assignments can be written; there is no deleting.
- Tools:
  - `list_members` (write): Employees of this Atrace (user ids and whether they are active).
  - `list_posts` (write): Posts (work places) with their address.
  - `list_shift_patterns` (write): Work schedules (shift patterns): weekdays or rotation, start and end of the shift.
  - `list_schedule_assignments` (write): Which employee works by which schedule, and since when.
  - `get_attendance_stats` (write): Attendance of every employee for a period: worked days, lateness, absences, hours.
  - `create_shift_pattern` (write): Create a work schedule (weekdays or a rotation like 2 on / 2 off).
  - `update_shift_pattern` (write): Change a work schedule: pass the whole schedule again (as in create_shift_pattern) with its id.
  - `assign_schedule` (write): Put an employee on a work schedule from a date.
  - `end_schedule_assignment` (write): End an employee's schedule assignment on a date (the last working day of it).
- Example requests:
  - Show lateness and absences for October
  - Create a 2-on/2-off schedule from 08:00 to 20:00
  - Put Askhat on the 2/2 schedule from Monday
