Local services & SaaS
Faire
Orders, inventory, reorders and messages for wholesale brands.
12 endpoints
Purchase orders, par levels, counts and food cost for your restaurant. Use it in ChatGPT, Claude or any AI agent over MCP, or in n8n, Make and scripts over REST.
11 tools Read and write
MarketMan has a REST API (V3) and no official MCP server (checked 28 Oct 2026). Restaurants buy it as the API Access add-on, which the pricing page lists as read-only with 5,000 calls a month, and the API Partner key and password come from MarketMan support. Cotlet runs 11 MarketMan tools hosted in your own login, over MCP for agents and REST for scripts.
| What you need | API add-on | GitHub client | Cotlet |
|---|---|---|---|
| Read orders, items, counts, AvT, margins | Yes | Some, with the add-on key | Yes |
| Create a purchase order, set a par level | Sold read-only | No | Yes, orders after your OK |
| How you get access | Ask support for a partner key | Same key | Your own MarketMan login |
| Monthly cap | 5,000 calls | 5,000 calls | Pay per call |
| Works in Claude or ChatGPT | You build it | Not an MCP server | Yes |
| Allowed by MarketMan's terms | Yes, official | Yes, official API | Uses the web app |
Checked 28 Oct 2026. Sources: MarketMan API V3 documentation · MarketMan pricing and plans · MarketMan restaurant purchasing and order management · MarketMan inventory management software · MarketMan SaaS Subscription Agreement
Use your own account in its Cotlet Cloud Browser.
Connect your agent or create a Cotlet API key.
Ask your agent or send an HTTP request.
We never keep your MarketMan password, and no order goes to a supplier until you approve it. Who can see your session
Use MCP with your AI agent, or HTTP requests in n8n, Make, Zapier and scripts. Follow the MCP setup below or jump to the REST guide.
Sign in to MarketMan in a Cloud Browser. Make a Cotlet account, open MarketMan in its Cloud Browser, log in with your usual MarketMan user and press Enable for agents.
Add the Cotlet address. Enter https://cotlet.dev/mcp/v1 where your agent takes an MCP server or a connector.
Finish the sign-in. Claude and ChatGPT open a Cotlet sign-in page. Cursor, Codex, n8n and scripts use an API key from the console.
One address, https://cotlet.dev/mcp/v1, serves MarketMan and the other apps you enable. Enabled MarketMan after you connected? Refresh the connector so the new tools load.
Settings > Connectors > Add custom connector
URL: https://cotlet.dev/mcp/v1/connect
Claude Code:
claude mcp add --transport http cotlet-marketman \
https://cotlet.dev/mcp/v1 \
--header "Authorization: Bearer $COTLET_API_KEY" Settings > Apps & Connectors > Create
MCP server URL: https://cotlet.dev/mcp/v1/connect
Authentication: OAuth // ~/.cursor/mcp.json
{
"mcpServers": {
"cotlet-marketman": {
"url": "https://cotlet.dev/mcp/v1",
"headers": { "Authorization": "Bearer ${env:COTLET_API_KEY}" }
}
}
} # ~/.codex/config.toml
[mcp_servers.cotlet-marketman]
url = "https://cotlet.dev/mcp/v1"
bearer_token_env_var = "COTLET_API_KEY" MCP Client Tool (inside an AI Agent)
Transport: HTTP Streamable
URL: https://cotlet.dev/mcp/v1
Auth: Bearer, <your key>
Tool: marketman_read Make: MCP Client > Call a tool
Zapier: MCP Client by Zapier > Run Tool
Server URL: https://cotlet.dev/mcp/v1
Token: <your key>
Tool: marketman_write Create a Cotlet API key with access to MarketMan and its read operations. Store it as COTLET_API_KEY in your environment or automation platform's credential store.
Connect MarketMan in Cotlet and enable it for agents. Account access: Your own MarketMan user (a role that can see and place orders for the location).
curl "https://cotlet.dev/api/v1/marketman/inventory-items?location=Harbor+Grill" \
-H "Authorization: Bearer $COTLET_API_KEY" A successful REST call puts the tool output in result. This illustrative response excerpt omits call IDs, messages and credit details.
{
"status": "success",
"app": "marketman",
"tool": "list_inventory_items",
"result": {
"items": [
{
"item_id": "inv_2210",
"name": "Whole milk",
"category": "Dairy",
"unit": "case",
"par_level": 8,
"on_hand": 3,
"supplier": "Lakeside Dairy"
},
{
"item_id": "inv_2214",
"name": "Butter, unsalted",
"category": "Dairy",
"unit": "case",
"par_level": 4,
"on_hand": 1,
"supplier": "Lakeside Dairy"
}
]
}
} Returns each item with its category, unit, par level, quantity from the last count and usual supplier. Items without a par level are left out when below_par is true.
Replace Harbor Grill with a location available to your account.
Keep the same selection when continuing a list. Compare changed record values as well as identifiers when refreshing your destination.
| Tool | Connect through | Example workflow |
|---|---|---|
| n8n | HTTP Request | Lists the suppliers a location orders from. Use list_suppliers in your configured business report. |
| Make | HTTP > Make a request | Compares what you used (from counts) with what sales say you should have used. Use get_actual_vs_theoretical in your configured business report. |
| Python or Node.js | REST API | Lists past inventory counts of a location. Use list_inventory_counts in your configured business report. |
Send Authorization: Bearer <your Cotlet API key> in request headers. You configure the schedule, destination and record comparisons.
Cotlet reads MarketMan; your workflow steps write to your chosen destination. These HTTP workflows do not require a native Cotlet connector or a prebuilt template.
Python and Node.js can use the same HTTP requests without an AI agent. Keep access keys in credentials, outside shared workflow exports.
The API and MCP reference lists operations and inputs. The REST API guide explains authentication, errors and approvals.
MarketMan order statuses: sent (to the supplier), pending (received by the supplier), approved (by the supplier). A new order goes to the supplier, so it asks first.
Returns one row per order with the supplier, status, delivery date, number of items and total. Orders come in delivery date order, oldest first. Your role decides which locations you see.
MCP callmarketman_read → list_purchase_orders
REST endpointGET https://cotlet.dev/api/v1/marketman/purchase-orders
| Name | Type | Description |
|---|---|---|
| location string required | string | Location name as shown in MarketMan. |
| date_from string required | string | First day, YYYY-MM-DD. |
| date_to string required | string | Last day, YYYY-MM-DD. |
| date_type string | string | delivery or sent. Default delivery. |
| status string | string | Filter by sent, pending or approved. Sent means sent to the supplier, pending means received by the supplier, approved means approved by the supplier. |
{
"location": "location",
"date_from": "date from",
"date_to": "date to"
} {
"orders": [
{
"order_id": "po_41872",
"supplier": "Fresh Fields Produce",
"status": "sent",
"delivery_date": "2026-10-30",
"items": 12,
"total": 486.2
},
{
"order_id": "po_41873",
"supplier": "Lakeside Dairy",
"status": "approved",
"delivery_date": "2026-10-31",
"items": 8,
"total": 212.4
}
]
} Returns the supplier, status, delivery date and every line with item, quantity, unit and price. It does not change the order.
MCP callmarketman_read → get_purchase_order
REST endpointGET https://cotlet.dev/api/v1/marketman/orders/{order_id}/purchase-order
| Name | Type | Description |
|---|---|---|
| order_id string required | string | Order id from list_purchase_orders. |
{
"order_id": "order_8c41d2"
} {
"order_id": "po_41873",
"supplier": "Lakeside Dairy",
"status": "approved",
"delivery_date": "2026-10-31",
"lines": [
{
"item": "Whole milk",
"quantity": 6,
"unit": "case",
"price": 28.5
},
{
"item": "Butter, unsalted",
"quantity": 2,
"unit": "case",
"price": 20.7
}
],
"total": 212.4
} Returns each supplier with its name and contact email as saved in MarketMan. Use it to group items before you create orders.
MCP callmarketman_read → list_suppliers
REST endpointGET https://cotlet.dev/api/v1/marketman/suppliers
| Name | Type | Description |
|---|---|---|
| location string required | string | Location name as shown in MarketMan. |
{
"location": "location"
} {
"suppliers": [
{
"supplier_id": "sup_118",
"name": "Lakeside Dairy",
"email": "orders@lakesidedairy.example"
},
{
"supplier_id": "sup_121",
"name": "Fresh Fields Produce",
"email": "orders@freshfields.example"
}
]
} Creates the order and sends it to the supplier the way MarketMan does when you approve an order. The supplier and your money are affected, and you cannot recall it through Cotlet. It returns the order id, status and total. By default you confirm each call; you can switch that off for this tool.
MCP callmarketman_write → create_purchase_order
REST endpointPOST https://cotlet.dev/api/v1/marketman/suppliers/{supplier_id}/purchase-orders
| Name | Type | Description |
|---|---|---|
| location string required | string | Location name as shown in MarketMan. |
| supplier_id string required | string | Supplier id from list_suppliers. |
| delivery_date string required | string | Delivery day, YYYY-MM-DD. |
| lines array required | array | Items to order: item_id and quantity in the item unit. |
| note string | string | Note for the supplier. |
{
"location": "location",
"supplier_id": "supplier_8c41d2",
"delivery_date": "delivery date",
"lines": "lines"
} {
"order_id": "po_41901",
"supplier": "Lakeside Dairy",
"status": "sent",
"delivery_date": "2026-11-02",
"items": 2,
"total": 49.2
} On-hand quantity comes from the last count. Every call names a location, and your MarketMan role decides which locations you see.
Returns each item with its category, unit, par level, quantity from the last count and usual supplier. Items without a par level are left out when below_par is true.
MCP callmarketman_read → list_inventory_items
REST endpointGET https://cotlet.dev/api/v1/marketman/inventory-items
| Name | Type | Description |
|---|---|---|
| location string required | string | Location name as shown in MarketMan. |
| category string | string | Only items in this category. |
| below_par boolean | boolean | Only items whose on-hand quantity is under the par level. |
{
"location": "location"
} {
"items": [
{
"item_id": "inv_2210",
"name": "Whole milk",
"category": "Dairy",
"unit": "case",
"par_level": 8,
"on_hand": 3,
"supplier": "Lakeside Dairy"
},
{
"item_id": "inv_2214",
"name": "Butter, unsalted",
"category": "Dairy",
"unit": "case",
"par_level": 4,
"on_hand": 1,
"supplier": "Lakeside Dairy"
}
]
} Returns one row per count with its date, whether it was a full or partial count and the number of items counted. Newest first.
MCP callmarketman_read → list_inventory_counts
REST endpointGET https://cotlet.dev/api/v1/marketman/inventory-counts
| Name | Type | Description |
|---|---|---|
| location string required | string | Location name as shown in MarketMan. |
| date_from string | string | First day, YYYY-MM-DD. |
| date_to string | string | Last day, YYYY-MM-DD. |
{
"location": "location"
} {
"counts": [
{
"count_id": "cnt_903",
"date": "2026-10-26",
"type": "full",
"items_counted": 214
},
{
"count_id": "cnt_897",
"date": "2026-10-19",
"type": "partial",
"items_counted": 58
}
]
} Changes the par level of one item and returns the old and new value. It reaches no one and you undo it by setting the old value, so it does not wait for your OK. A lower par level changes what MarketMan suggests next time you order.
MCP callmarketman_write → set_par_level
REST endpointPUT https://cotlet.dev/api/v1/marketman/items/{item_id}/par-level
| Name | Type | Description |
|---|---|---|
| location string required | string | Location name as shown in MarketMan. |
| item_id string required | string | Item id from list_inventory_items. |
| par_level number required | number | New par level in the item unit. |
{
"location": "Harbor Grill",
"item_id": "inv_2210",
"par_level": 10
} {
"item_id": "inv_2210",
"name": "Whole milk",
"old_par_level": 8,
"par_level": 10
} Actual vs theoretical needs two dates that each had a count. Invoices are read only; nothing is uploaded or edited.
Returns each item with actual usage, theoretical usage and the difference. The dates must be days with a count, so call list_inventory_counts first. Sorted by the largest gap.
MCP callmarketman_read → get_actual_vs_theoretical
REST endpointGET https://cotlet.dev/api/v1/marketman/actual-vs-theoretical
| Name | Type | Description |
|---|---|---|
| location string required | string | Location name as shown in MarketMan. |
| date_from string required | string | Start count date, YYYY-MM-DD. |
| date_to string required | string | End count date, YYYY-MM-DD. |
{
"location": "location",
"date_from": "date from",
"date_to": "date to"
} {
"period": {
"from": "2026-10-19",
"to": "2026-10-26"
},
"items": [
{
"name": "Whole milk",
"unit": "case",
"actual": 9,
"theoretical": 7.5,
"difference": 1.5
},
{
"name": "Butter, unsalted",
"unit": "case",
"actual": 3.5,
"theoretical": 3.2,
"difference": 0.3
}
]
} Returns each recipe with its ingredients, quantities and the cost of one portion. It does not change recipes.
MCP callmarketman_read → list_recipes
REST endpointGET https://cotlet.dev/api/v1/marketman/recipes
| Name | Type | Description |
|---|---|---|
| location string required | string | Location name as shown in MarketMan. |
| search string | string | Part of a recipe name. |
{
"location": "location"
} {
"recipes": [
{
"name": "House burger",
"portion_cost": 4.1,
"ingredients": [
{
"item": "Ground beef",
"quantity": 0.25,
"unit": "lb"
},
{
"item": "Brioche bun",
"quantity": 1,
"unit": "each"
}
]
}
]
} Returns each invoice with its supplier, date and total. Newest first. It reads invoices only; it does not upload or edit one.
MCP callmarketman_read → list_invoices
REST endpointGET https://cotlet.dev/api/v1/marketman/invoices
| Name | Type | Description |
|---|---|---|
| location string required | string | Location name as shown in MarketMan. |
| date_from string required | string | First day, YYYY-MM-DD. |
| date_to string required | string | Last day, YYYY-MM-DD. |
{
"location": "location",
"date_from": "date from",
"date_to": "date to"
} {
"invoices": [
{
"invoice_id": "inv_77120",
"supplier": "Fresh Fields Produce",
"date": "2026-10-27",
"total": 486.2
},
{
"invoice_id": "inv_77094",
"supplier": "Lakeside Dairy",
"date": "2026-10-24",
"total": 198
}
]
} Your signed-in MarketMan profile, AES-256-GCM, in Finland. Not your password.
The 11 MarketMan tools. No cookie, no API Partner key.
The locations, orders, costs and invoices your MarketMan role opens.
Users, billing, POS and accounting settings, recipe edits.
Your agent gets a link and you log in again. We never log in for you.
Disable MarketMan for agents, reset the browser or delete the API key.
Use a MarketMan user your company bought a seat for: the agreement allows only Permitted Users the customer authorized. Our site scores A+ on Qualys SSL Labs, securityheaders.com and Mozilla Observatory (live results); no SOC 2 report or third-party pentest yet.
"Customer must not, and shall not allow any Permitted User or any other third party to: ... use any automated means to access the SaaS Services and/or the MarketMan App"
The same agreement lets MarketMan suspend access "at any time in its sole discretion, with or without notice". The API add-on is the route the terms leave clear, for reads. We found no public case of a MarketMan account closed for automation (checked 28 Oct 2026); public complaints are about cancelling a contract. A group that cares should ask its MarketMan account manager first.
The Terms of Use also ban "a disproportionately large load". Pull a year of reports for 30 locations over several nights, not in one run.
If MarketMan moves a report or renames a column in Purchasing, we change the tool and the same prompt keeps working. status.cotlet.dev watches the site, console and API every 3 minutes.
| Action | Undo |
|---|---|
| Create and send a purchase order | Not through Cotlet; call or email the supplier |
| Set a par level | Yes, set the old value; the tool returns it |
| Every read | Nothing to undo; reads change nothing |
1 of 11 tools asks first: create_purchase_order. set_par_level runs at once and returns the old value; it reaches no one but changes what MarketMan suggests on the next order. Turn the wait off per tool for a scheduled run.
Check the delivery date before you approve: a supplier with a cutoff may have closed that day already.
{
"name": "set_par_level",
"arguments": {
"location": "Harbor Grill",
"item_id": "inv_2210",
"par_level": 10
}
} curl -X PUT https://cotlet.dev/api/v1/marketman/items/inv_2210/par-level \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"location":"Harbor Grill","par_level":10}' {
"item_id": "inv_2210",
"name": "Whole milk",
"old_par_level": 8,
"par_level": 10
} Scripts and cron jobs reach the same tools over REST at /api/v1/marketman, with one key and one price. A call for a location your role cannot open fails with a permission error and costs nothing. The tools table lists the REST path of each tool.
About $20 a monthfor one independent restaurant, 3,480 credits. Your MarketMan plan stays as it is.
| Job | Calls | Credits |
|---|---|---|
| Items below par with their supplier, daily | 2 × 30 | 600 |
| Open orders and supplier status, daily | 3 × 30 | 900 |
| Draft 4 supplier orders, weekly | 6 × 4 | 240 |
| Actual vs theoretical after the count, weekly | 2 × 4 | 80 |
| Lowest-margin dishes, weekly | 2 × 4 | 80 |
| Invoices against orders, weekly | 2 × 4 | 80 |
| Cloud Browser, 30 days | 1,500 | |
| Total | 3,480 |
The month is our example: one location on Starter, 100 to 200 items, a full count each week and 4 supplier orders a week. For comparison, MarketMan's read-only API add-on is $25 a month for 1 to 3 locations, before the code you write (pricing page, 28 Oct 2026). Dollars at the $29 pack rate.
| 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.
| Option | What it does | Where it stops |
|---|---|---|
| LukasKlement/python-marketman | A basic Python client for the V3 API, Apache-2.0. | Needs the add-on key; 0 stars, last commit 25 Apr 2021; not an MCP server. |
| Mashey/tap-marketman | A Singer tap that exports API data to a warehouse. | Export only; last commit 5 Mar 2021. |
| zirinisp/marketman_google_apps_script | Pulls API data into Google Sheets. | Read only; last commit 13 Nov 2021. |
| Tenzo | Restaurant analytics that reads MarketMan next to POS and labor data. | Dashboards for people, not an agent tool. |
If you have the add-on and a developer, the API gives the reads directly. Nothing on GitHub or in Zapier and n8n speaks MCP to MarketMan, and nothing outside the web app creates orders for a restaurant. Cotlet covers both in your own login.
Cotlet belongs to Take Group sp. z o.o., a software company registered in Poland, EU (VAT PL6342984273) and trading since 2019. Bart Krawczyk (Co-founder, CTO) and Jake Slugocki (Co-founder, SEO, sales and marketing) founded it. Write to contact@cotlet.dev with questions about the MarketMan tools.
Sign up free at https://cotlet.dev, open MarketMan under Integrations in the console and log in to MarketMan in its Cloud Browser. The trial starts with your first app and needs no card.
Sign up at cotlet.dev, log in to MarketMan once in its Cloud Browser and add Cotlet to ChatGPT or Claude, following the steps in your console. No API key is needed. ChatGPT and Claude then work in your MarketMan account through Cotlet, in their phone apps too.
With Cotlet, ChatGPT, Claude and other AI agents handle jobs like these in MarketMan: draft the weekly supplier order; flag items below par; weekly food cost variance report. You ask in plain words, and anything that reaches other people waits for your OK first.
No. Cotlet works in your own MarketMan login, so it does not use the API Partner key. MarketMan sells Open API Access as an add-on on Starter and Growth and includes it in Enterprise (pricing page, checked 28 Oct 2026). Your user role still decides which locations and orders you can see.
Only if you switch confirmation off. create_purchase_order reaches a supplier, so by default you confirm each call. Reading orders, counts and reports changes nothing.
Yes, inside the API: API Partners can register webhooks for order events. They need the same partner key. Without it, run your agent on a schedule, for example a daily list_purchase_orders.
Yes. Every tool takes a location by its MarketMan name, and you see the locations your MarketMan role sees. Run a report per location, or ask the agent to loop over them.
Only the way in. Both carry the same 11 tools, inputs and answers, with one API key and one price. Agents use MCP; scripts and HTTP steps use REST.
No. Cotlet is independent and not affiliated with MarketMan or Meal Ticket.
Yes. Call Cotlet's REST API from a script or an HTTP step in n8n, Make or Zapier with your Cotlet key. MCP is the alternative for AI agents; you do not need to connect an agent to use REST.
Free 7-day trial with 2,000 credits, no card needed.
May we use Google Analytics to see which pages help people? It sets cookies only if you accept. No ads, and we never sell data. Cookie policy