Browse the documentation

MCP tools

Dashboard, analytics and award prices

MCP tools for reading the dashboard, analytics, the bid report, usage, activity, the calendar and award prices.

Every tool on this page is read-only and changes nothing in your data. They give an assistant the same picture the dashboard, analytics, calendar and price history screens give you, so it can answer questions such as "which bids need attention this week?" or "who won this code in the last award?"

Note:The analytics tools (analytics_get, bid_analytics_get, bid_report_get) and the award prices tool (historical_prices_list) need the Pro or Enterprise plan. The tools that carry bid amounts or prices (bid analytics, the bid report and award prices) are closed to the technical and viewer (no pricing) roles. The dashboard and the activity feed stay open to every role but leave the money out for those two.

The matching screens are explained in Dashboard, Calendar and Price History. Writing a bid's item prices is done with the tools in Bids and bid pricing.

ToolWhat it does
dashboard_getGet the dashboard summary
usage_getGet plan usage
analytics_getGet marketplace analytics
bid_analytics_getGet bid analytics
bid_report_getGet a bid preparation report
activity_listList recent activity
team_activity_listList team activity
calendar_getGet the deadline calendar
historical_prices_listBrowse historical award prices

Dashboard and plan usage

dashboard_get

Returns what the dashboard shows: your bids by stage, deadlines coming up within 7 days, unread alert notifications, a few headline counts and the bids that need attention. Use it for a quick picture of where the team stands.

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

No parameters.

Returns: bids (with total, active, stages holding a count per stage, and recent), deadlines (favorites and bids), notifications (unread and unread_count), counts (alerts, products, favorites and newTendersThisWeek) and needsAttention.

  • Each list is short: bids.recent holds five bids, the nearest deadline first. deadlines.favorites and deadlines.bids hold up to five deadlines within 7 days, the soonest first (for favorites, and for bids in the reviewing and preparing stages). notifications.unread holds the five newest, and unread_count is the full count of unread ones.
  • needsAttention holds up to five bids in the preparing or submitted stage where no item of the tender has a price yet. It is the same list as the bids needing attention card on the dashboard.
  • bid_amount in bids.recent comes back empty for the technical and viewer (no pricing) roles.

usage_get

Shows your plan, its limits and the features it includes, how much of each limit you have used and whether you can still add more. A limit of -1 means unlimited. Check it before a large job that might reach a limit.

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

No parameters.

Returns: tier (starter, pro or enterprise), hasOverride (true when your organization has custom limits), and limits, current and allowed under the same keys: team_members, products, active_tenders, keyword_alerts, api_calls_per_day, exports_per_month, emails_per_month, whatsapp_groups and priced_history_rows_per_month. features maps each plan feature to true or false.

  • allowed is true while usage is below the limit, or when the limit is -1.
  • api_calls_per_day, exports_per_month and emails_per_month are counters that restart each day or month (UTC), and exports_per_month counts the quotations created this month. active_tenders counts the distinct tenders you follow as a favorite or a bid.

Analytics and the bid report

Two tools for the big picture, one about the whole market and one about your bids, and one for the preparation report of a single tender.

analytics_get

Describes the whole tender market, not only your bids: how many tenders Etimad and NUPCO hold, how many arrived this week and this month, the most common tender types and agencies, the tenders closing within 7 days, and counts of your own records.

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

No parameters.

Returns: overview (total_tenders, etimad_count, nupco_count, total_items, new_this_week and new_this_month), type_breakdown (the 6 most common tender types, each with name and count), top_agencies (the top 10), closing_soon (up to 10 tenders whose deadline falls within 7 days, the soonest first) and user_stats (favorites, alerts, products and unread_notifications).

  • The counts cover only what your organization can see: the tenders collected from the sources and your own manual tenders, never another organization's.

bid_analytics_get

Summarizes your organization's bid pipeline: win rate, total and average bid value, results by stage, agency and source, how many tenders have priced items, the trend over the last six months and the latest bids.

Read-only · scope analytics.read · roles: owner, admin, sales, purchasing, viewer · Pro and Enterprise plans

No parameters.

Returns: overview (totalBids, wonCount, lostCount, winRate, avgBidAmount, totalBidValue and tendersWithPricing), statusBreakdown with the number of bids in each stage, byAgency and bySource with bids, wins and losses per agency and source, monthlyTrend for the last six months, and recentBids for the five latest bids.

  • winRate is won bids as a share of won plus lost, rounded to a whole percent, and null until a bid has been decided. avgBidAmount and totalBidValue use only bids with an amount above zero. byAgency lists the ten agencies with the most bids.
  • Each month in monthlyTrend counts the bids created in it, split by their current stage. The stage labels in statusBreakdown and the month names are in Arabic.

bid_report_get

Builds the full preparation report for one tender: its details, your bid on it, every item with its quantity, the buyer's estimate, your unit price and your line total, and your bid total against the estimate. Use it to review a bid before you submit it.

Read-only · scope analytics.read · roles: owner, admin, sales, purchasing, viewer · Pro and Enterprise plans

ParameterTypeRequiredDescription
tender_idintegerYesThe tender's ID, from the tender tools. It must be a tender your organization can see.

Returns: tender (details such as tender_name, agency_name, reference_number, last_offer_date, remaining_days and the purchase fees), bid (your bid record, or null when you have none), items, summary, company and generated_at. Each item has quantity, unit, estimated_price, unit_price and line_total, the last two null until the item is priced. summary has total_items, priced_items, total_bid, total_estimated and difference_pct.

  • total_estimated adds up the estimate of every item, while total_bid adds up only the items you have priced. So difference_pct (your bid against the estimate, in percent) compares like with like only once every item is priced. It is null when either total is zero.
  • The tool answers that the tender was not found when your organization cannot see it.
  • company carries the name and email of the member who connected the client, and your organization's name stands in when that member has no company name.

Activity and the calendar

activity_list

Shows what has just happened in your organization: bid changes, items added to favorites, item prices and alert notifications, newest first. It tells you what changed lately without opening every screen.

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

ParameterTypeRequiredDescription
limitintegerNoThe most entries to return, from 1 to 50. Defaults to 30.

Returns: activities, each with id, type (bid_update, favorite, pricing or alert), tender_id, tender_name, agency_name, description and timestamp, plus total, the number of entries before limit cuts the list.

  • The feed combines the 10 latest bid changes, 10 latest favorites, 8 latest item prices and 10 latest alert notifications, so it never holds more than 38 entries however high limit is.
  • The description texts are in Arabic. A price entry carries only tender_id, so its tender_name and agency_name are empty.
  • Price entries and bid amounts are left out for the technical and viewer (no pricing) roles.

team_activity_list

The owner's log of each member's work: who created and edited products and manufacturers, who uploaded photos and files, and who exported tender data. It returns totals per member and per kind of action over a window, plus a paged list of events.

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

ParameterTypeRequiredDescription
daysintegerNoThe window in days, ending now, from 1 to 365. Defaults to 30.
user_idstringNoA member's ID as a UUID, from members in this tool's own reply or from team_list. It narrows the event list to that member; the totals still cover the whole window.
actionstringNoNarrows the event list to one kind of action: product.created, product.updated, manufacturer.created, manufacturer.updated, product.photo_uploaded, file.uploaded or tender.exported.
pageintegerNoThe page of events, starting at 1. Defaults to 1.
page_sizeintegerNoEvents per page, from 1 to 100. Defaults to 50.
{
  "days": 7,
  "action": "product.created",
  "page_size": 25
}
Example arguments

Returns: days and from (the start of the window), members (every member of the organization with user_id, full_name, email and role), totals (user_id, action and total per member and action), data (the events), and total, page, page_size and total_pages. Each event has action, entity_name, quantity, created_at and last_at.

  • Totals add up quantity and do not count events. A bulk write is one event whose quantity is the number of records, and repeats by one member on the same record within the same hour fold into one event: created_at is the first of them and last_at the latest.
  • user_id and action narrow the event list only. members and totals always cover the whole window and name every member, including those who did nothing. Events come most recently active first (last_at).
  • user_id in totals can be null when the account that did the work was deleted from the platform.
  • tender.exported is one event per CSV of tenders or their items, from the app or through the API, export_tenders_csv and the assistant included; a key's export is attributed to the member who created the key. Its metadata describes the hour's latest file: file_name, rows, kind (tenders or items) and channel (app or api).

calendar_get

Returns the submission deadlines of the tenders your organization follows in one month, from your favorites and your bids. Each event carries the tender's name, agency, reference number and deadline day.

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

ParameterTypeRequiredDescription
yearintegerNoThe year, from 2000 to 2100. Defaults to the current year.
monthintegerNoThe month, 1 to 12. Defaults to the current month.
{
  "year": 2026,
  "month": 10
}
Example arguments

Returns: year, month and events, sorted by date. Each event has tender_id, tender_name, agency_name, reference_number, tender_number, date, source, source_url, remaining_days and tags.

  • An event is a tender you follow: a favorite, a bid in any stage, or both. A tender gets one event, and its tags hold favorite and/or the bid's stage.
  • date is the deadline's day on the Saudi calendar in YYYY-MM-DD form, and a tender with no deadline never appears.
  • The month is padded to full weeks, Sunday to Saturday, so the days of the neighbouring months shown in a calendar grid carry their events too. The screen is explained in Calendar.

Historical award prices

The record of past NUPCO award results, where each row is one award: a material code awarded to a vendor in a tender. Some rows come from result sheets that carry prices, and most come from award announcements that publish no price.

historical_prices_list

Browses past NUPCO award results with free-text search, exact filters, sorting and paging. By default it returns only rows that published a price, and price reaches the rest. Use it to learn who won an item and at what price before you price it yourself.

Read-only · scope historical.read · roles: owner, admin, sales, purchasing, viewer · Pro and Enterprise plans

ParameterTypeRequiredDescription
qstringNoFree-text search over the material code, item description, vendor and manufacturer, up to 200 characters. Plain text matches as one literal substring. The structured syntax of price history also works: AND, OR and NOT in capitals, - before a word to exclude it, quoted phrases, and the fields description: (or item:), vendor:, manufacturer:, country:, catalog:, unit:, tender: (any spelling of the number) and code: (the exact material code). Quote a value that contains / or other punctuation, as in tender:"NPT0064/25". Invalid syntax returns a 400 that says why.
material_codestringNoThe exact NUPCO material code, up to 40 characters.
vendorstringNoA vendor name or part of it, up to 300 characters.
source_tender_numberstringNoThe number of the tender the award came from, up to 100 characters. The match ignores case and spelling, so NPT0064/25, npt0064-25 and NPT0064 25 find the same tender.
pricestringNoWhich rows to return: with (the default) only awards that published a unit price, without only awards with no published price, all both.
sortstringNoThe column to sort by: award_date (the default), unit_price or material_code. When sorting by price, rows without a price always come last, in either direction.
dirstringNoThe sort direction: asc or desc. Defaults to desc.
pageintegerNoPage number, starting at 1.
pageSizeintegerNoRows per page: 25 by default, 50 at most in this tool. Before your organization's first subscription payment, a page comes back with 25 rows whatever you ask for. Note the capital letter in the middle of the name.
{
  "q": "item:(syringe AND luer)",
  "vendor": "Acme Medical Supplies",
  "price": "all",
  "sort": "award_date",
  "dir": "desc",
  "pageSize": 25
}
Example arguments

Returns: data (the awards), total, page, page_size, total_pages, depth_limited, max_rows, unpriced_available, price_allowance, prices_hidden and price_sort_unavailable. Each award has material_code, item_description, unit_price, currency, uom, vendor_name, manufacturer, country, country_code, catalog_no, source_tender_number, source_tender_name, award_date, awarded_to_us and price_hidden, plus price_hidden_reason on an award the allowance hid.

  • A unit_price of null means no price was published for that award. It does not mean the item was free or cost zero.
  • When the first page of a default search (price set to with) comes back empty, unpriced_available holds the number of awards matching your search that published no price. Report that number and try price set to all instead of saying the item was never awarded. In every other case it is 0.
  • On the Pro plan, each new priced row the tool returns counts once against a monthly allowance shared with the price history page; a row your organization has seen before comes back priced without counting, in any month. price_allowance gives the limit, what is used, what remaining and resets_at, and is null on the Enterprise plan, which has no limit.
  • Past the allowance, rows keep coming, but a new priced row has unit_price set to null and price_hidden set to true: the row has a price that the plan hides, so do not report it as unpublished. prices_hidden counts those rows on the page. Once nothing remains, sorting by unit_price is refused, rows come newest first and price_sort_unavailable is true.
  • Until your organization's first subscription payment clears, the allowance is a smaller one and price_allowance.unpaid is true. Say that prices show once the subscription is paid, from the billing page in the app.
  • An award with price_hidden set to true and no price_hidden_reason has a price your organization does not see: it costs nothing of the allowance and sorts after the visible prices when you sort by unit_price. The price exists and is hidden; it is not an unpublished one. A row the allowance hides has price_hidden_reason set to allowance.
  • Paging stops at a depth set by your organization's subscription. When a result holds more, depth_limited is true, max_rows gives how many rows paging reaches, total_pages counts only reachable pages, and the page after them answers page_depth_exceeded. To see other rows, narrow q, material_code, vendor or source_tender_number rather than paging further.
  • Price-history and tender searches share a per-minute budget across the whole organization, and a smaller one per connection. When either is reached, the tool answers rate_limited with the seconds to wait. Walking one search page after page quickly, or reading many rows in an hour, slows responses to one every few seconds for a while (slowed_down). Wait the stated time once, then narrow the search; do not retry in a loop.
  • awarded_to_us is true when the vendor name matches your organization's registered name.
  • This record is shared by every organization and holds none of your own quotes. The prices you set on a bid's items are read with bid_pricing_list.