Browse the documentation

MCP tools

Alerts, notifications, tags and billing

MCP tools for keyword alerts and the notifications they raise, tender tags and the billing summary.

A keyword alert is a saved tender search query. The platform checks it three times a day, and every open tender it newly matches becomes a notification that your whole organization sees. These tools manage the alerts, read and clear the notifications, create the tags you label tenders with, and read the billing summary. The alert pages of the app are explained in Keyword alerts.

Tip:Ask Claude "notify me when a tender with ventilators appears" and it creates a keyword alert: that is what the request means. A match always reaches the in-app notifications, and the email and WhatsApp copies go to the member who created the alert, as their settings allow. Delivery to your own WhatsApp numbers is switched with whatsapp_alerts_set.
ToolWhat it does
alerts_listList keyword alerts
alerts_createCreate a keyword alert
alerts_updateUpdate a keyword alert
alerts_deleteDelete a keyword alert
notifications_listList notifications
notifications_mark_readMark notifications read
notifications_clearClear all notifications
tags_listList tags
tags_createCreate a tag
tags_updateUpdate a tag
tags_deleteDelete a tag
billing_getGet the billing summary

Keyword alerts

Alerts are shared by the whole organization: what a colleague creates, you can see, change and delete.

alerts_list

Lists your organization's keyword alerts, newest first. Use it to see what is already being watched before you add another, or to find the ID of an alert to pause or delete.

Read-only · scope alerts.read · all roles · Pro and Enterprise plans

No parameters.

Returns: An alerts list with no paging, each alert carrying id, keyword, is_active, last_triggered_at and created_at.

  • Paused alerts are listed too; is_active tells them apart.

alerts_create

Creates a keyword alert from a tender search query. The alert starts active unless you say otherwise, and each new open tender that the same search would find raises a notification.

Changes data · scope alerts.write · roles: owner, admin, sales, purchasing · Pro and Enterprise plans

ParameterTypeRequiredDescription
keywordstringYesThe tender search query to watch, 1 to 200 characters. It takes the same syntax as q in tenders_list: plain words, OR, item:(gauze AND sterile), agency:, a leading - to exclude a word, and quoted phrases. An invalid query is refused.
is_activebooleanNoWhether the alert starts active. Defaults to true.
{
  "keyword": "item:(gauze AND sterile)",
  "is_active": true
}
Example arguments

Returns: The new alert, with its ID, query and state.

  • A query that could never match is refused when you save it: an unknown search field, a query made only of exclusions, or a syntax error such as an unclosed parenthesis. Fix the query and call again.
  • Your plan limits how many alerts can be active at once: 10 on Starter, 100 on Pro, unlimited on Enterprise. At the limit the tool answers plan_limit_reached with limit and current. A paused alert does not count.
  • An alert fires only on open tenders (one with no closing date counts as open), and once per tender. A plain word is matched against the tender's name, numbers and items, not its agency name: write agency: to follow an agency.
  • The alert is credited to the member who connected, and the email and WhatsApp copies of its matches go to that member.

alerts_update

Changes an alert's query, or pauses and resumes it. Only what you send changes, and at least one of keyword and is_active is needed.

Changes data · scope alerts.write · roles: owner, admin, sales, purchasing · Pro and Enterprise plans

ParameterTypeRequiredDescription
idintegerYesThe alert's ID, from alerts_list.
keywordstringNoThe new query, 1 to 200 characters, checked by the same rules as in alerts_create.
is_activebooleanNofalse pauses the alert and true resumes it. A paused alert fires nothing and does not count toward your plan limit.
{
  "id": 27,
  "keyword": "item:(gauze AND sterile)",
  "is_active": true
}
Example arguments

Returns: The alert after the change.

  • Sending the ID without keyword or is_active answers 400. An ID that is not one of your organization's alerts answers 404.

alerts_delete

Deletes a keyword alert for good; the notifications it already raised stay in the list. To stop it only for a while, use alerts_update with is_active set to false.

Deletes or overwrites data · scope alerts.write · roles: owner, admin, sales, purchasing · Pro and Enterprise plans

ParameterTypeRequiredDescription
idintegerYesThe alert's ID, from alerts_list.

Returns: A confirmation, success: true.

  • An ID that is not one of your organization's alerts answers 404.

Notifications

Notifications are shared by the organization. They come from keyword alerts, from product alerts built on your catalog, and from deadline reminders for the tenders your team has starred or is working on.

notifications_list

Lists your organization's notifications, newest first, each with the tender that raised it, plus the total unread count. Use unread_only to see just what is new, or count_only when only the number matters.

Read-only · scope notifications.read · all roles · Pro and Enterprise plans

ParameterTypeRequiredDescription
unread_onlybooleanNotrue lists only notifications not yet marked read.
count_onlybooleanNotrue returns only unread_count and no list, and ignores paging and unread_only.
pageintegerNoPage number, starting at 1.
page_sizeintegerNoResults per page: 20 by default, 100 at most.

Returns: A page of notifications in data, with total, page, page_size, total_pages and unread_count. Each notification carries id, match_type (keyword, product or deadline), match_text, is_read, created_at, tender_id and a tenders object with tender_name, agency_name and source. With count_only, only unread_count comes back.

  • Cleared notifications and those older than 30 days are not listed. unread_count counts every visible unread notification in the organization, not only those on the page.

notifications_mark_read

Marks one notification as read, or every unread one at once. Send exactly one of id and all.

Changes data · scope notifications.write · roles: owner, admin, sales, purchasing · Pro and Enterprise plans

ParameterTypeRequiredDescription
idintegerNoThe ID of the notification to mark, from notifications_list.
allbooleanNotrue marks every unread notification in the organization as read. If id is sent too, all wins.

Returns: A confirmation, success: true.

  • Sending neither id nor all answers 400. An ID that is not one of your organization's notifications changes nothing, and the call still reports success.

notifications_clear

Clears the whole notification list for your organization, for every member at once. The notifications disappear from every screen and cannot be brought back.

Deletes or overwrites data · scope notifications.write · roles: owner, admin, sales, purchasing · Pro and Enterprise plans

No parameters.

Returns: success: true and cleared, the number of notifications removed from the list.

  • Matching itself is unaffected: a tender that already notified you does not notify you again after a clear.
  • Without a clear, notifications leave the list on their own after 30 days.

Tags

Tags are labels your organization puts on tenders, such as a product line or a customer, and every member shares them. These tools manage the tags themselves; putting a tag on a tender is done from the tender page in the app, as described in The tender page.

tags_list

Lists your organization's tags in alphabetical order. Send a tender's ID to see which of them are on that tender.

Read-only · scope tags.read · all roles · Pro and Enterprise plans

ParameterTypeRequiredDescription
tender_idintegerNoA tender's ID. When sent, each tag also carries assigned: true if the tender has that tag.

Returns: A tags list, each with id, name and color, plus assigned when tender_id was sent.

  • A tender_id that is not a positive integer answers 400.

tags_create

Creates a new tag for labelling tenders. A tag's name is unique within the organization.

Changes data · scope tags.write · roles: owner, admin, sales, purchasing · Pro and Enterprise plans

ParameterTypeRequiredDescription
namestringYesThe tag's name, 1 to 100 characters. Spaces at either end are trimmed.
colorstringNoA hex colour such as #16a34a, up to 20 characters. Blue (#3b82f6) when omitted.
{
  "name": "Syringes lot",
  "color": "#16a34a"
}
Example arguments

Returns: The new tag.

  • A repeated name answers 409 with the message Tag already exists.

tags_update

Renames a tag or changes its colour. The change shows on every tender that carries the tag, since it is one tag.

Changes data · scope tags.write · roles: owner, admin, sales, purchasing · Pro and Enterprise plans

ParameterTypeRequiredDescription
idintegerYesThe tag's ID, from tags_list.
namestringNoThe new name, 1 to 100 characters.
colorstringNoThe new hex colour, up to 20 characters.
{
  "id": 14,
  "name": "Syringes 2026",
  "color": "#16a34a"
}
Example arguments

Returns: The tag after the change.

  • Send name or color, or the tool answers 400. A name already taken answers 409, and an unknown ID answers 404.

tags_delete

Deletes a tag and removes it from every tender that carries it. This cannot be undone.

Deletes or overwrites data · scope tags.write · roles: owner, admin, sales, purchasing · Pro and Enterprise plans

ParameterTypeRequiredDescription
idintegerYesThe tag's ID, from tags_list.

Returns: A confirmation, success: true.

  • An ID that is not one of your organization's tags answers 404.

Billing

Read-only. Paying, changing the plan or the number of seats and managing payment methods happen in the app only.

billing_get

Reads your organization's plan and subscription: which plan it is on, the subscription status, when the current period ends, and whether custom limits apply. It changes nothing, and only the owner may call it.

Read-only · scope billing.read · roles: owner · Pro and Enterprise plans

No parameters.

Returns: plan_tier (starter, pro or enterprise), subscription_status, current_period_end (an ISO 8601 date, or null when there is no period), has_stripe (whether the organization has a card billing account), has_subscription (whether it has a subscription recorded), has_custom_limits (whether the plan's limits were adjusted for this organization), billing_interval (month or year), and seats: seat_quantity (paid seats of a per-user subscription, or null when the plan is not billed per user), seats_in_use (members plus pending invitations) and user_limit (the most users the organization may hold, -1 for no limit).

  • plan_tier reads starter and subscription_status reads active when the organization has no subscription recorded. Card details are never returned.
  • For the limits themselves and how much of each you have used, use usage_get.