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?"
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.
| Tool | What it does |
|---|---|
| dashboard_get | Get the dashboard summary |
| usage_get | Get plan usage |
| analytics_get | Get marketplace analytics |
| bid_analytics_get | Get bid analytics |
| bid_report_get | Get a bid preparation report |
| activity_list | List recent activity |
| team_activity_list | List team activity |
| calendar_get | Get the deadline calendar |
| historical_prices_list | Browse 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.recentholds five bids, the nearest deadline first.deadlines.favoritesanddeadlines.bidshold up to five deadlines within 7 days, the soonest first (for favorites, and for bids in thereviewingandpreparingstages).notifications.unreadholds the five newest, andunread_countis the full count of unread ones. needsAttentionholds up to five bids in thepreparingorsubmittedstage 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_amountinbids.recentcomes 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.
allowedistruewhile usage is below the limit, or when the limit is-1.api_calls_per_day,exports_per_monthandemails_per_monthare counters that restart each day or month (UTC), andexports_per_monthcounts the quotations created this month.active_tenderscounts 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.
winRateis won bids as a share of won plus lost, rounded to a whole percent, andnulluntil a bid has been decided.avgBidAmountandtotalBidValueuse only bids with an amount above zero.byAgencylists the ten agencies with the most bids.- Each month in
monthlyTrendcounts the bids created in it, split by their current stage. The stage labels instatusBreakdownand 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
| Parameter | Type | Required | Description |
|---|---|---|---|
tender_id | integer | Yes | The 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_estimatedadds up the estimate of every item, whiletotal_bidadds up only the items you have priced. Sodifference_pct(your bid against the estimate, in percent) compares like with like only once every item is priced. It isnullwhen either total is zero.- The tool answers that the tender was not found when your organization cannot see it.
companycarries 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
| Parameter | Type | Required | Description |
|---|---|---|---|
limit | integer | No | The 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
limitis. - The
descriptiontexts are in Arabic. A price entry carries onlytender_id, so itstender_nameandagency_nameare 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
| Parameter | Type | Required | Description |
|---|---|---|---|
days | integer | No | The window in days, ending now, from 1 to 365. Defaults to 30. |
user_id | string | No | A 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. |
action | string | No | Narrows the event list to one kind of action: product.created, product.updated, manufacturer.created, manufacturer.updated, product.photo_uploaded, file.uploaded or tender.exported. |
page | integer | No | The page of events, starting at 1. Defaults to 1. |
page_size | integer | No | Events per page, from 1 to 100. Defaults to 50. |
{
"days": 7,
"action": "product.created",
"page_size": 25
}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
quantityand do not count events. A bulk write is one event whosequantityis the number of records, and repeats by one member on the same record within the same hour fold into one event:created_atis the first of them andlast_atthe latest. user_idandactionnarrow the event list only.membersandtotalsalways cover the whole window and name every member, including those who did nothing. Events come most recently active first (last_at).user_idintotalscan benullwhen the account that did the work was deleted from the platform.tender.exportedis 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. Itsmetadatadescribes the hour's latest file:file_name,rows,kind(tendersoritems) andchannel(apporapi).
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
| Parameter | Type | Required | Description |
|---|---|---|---|
year | integer | No | The year, from 2000 to 2100. Defaults to the current year. |
month | integer | No | The month, 1 to 12. Defaults to the current month. |
{
"year": 2026,
"month": 10
}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
tagsholdfavoriteand/or the bid's stage. dateis the deadline's day on the Saudi calendar inYYYY-MM-DDform, 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
| Parameter | Type | Required | Description |
|---|---|---|---|
q | string | No | Free-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_code | string | No | The exact NUPCO material code, up to 40 characters. |
vendor | string | No | A vendor name or part of it, up to 300 characters. |
source_tender_number | string | No | The 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. |
price | string | No | Which rows to return: with (the default) only awards that published a unit price, without only awards with no published price, all both. |
sort | string | No | The 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. |
dir | string | No | The sort direction: asc or desc. Defaults to desc. |
page | integer | No | Page number, starting at 1. |
pageSize | integer | No | Rows 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
}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_priceofnullmeans 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 (
priceset towith) comes back empty,unpriced_availableholds the number of awards matching your search that published no price. Report that number and trypriceset toallinstead 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_allowancegives thelimit, what isused, whatremainingandresets_at, and isnullon the Enterprise plan, which has no limit. - Past the allowance, rows keep coming, but a new priced row has
unit_priceset tonullandprice_hiddenset totrue: the row has a price that the plan hides, so do not report it as unpublished.prices_hiddencounts those rows on the page. Once nothing remains, sorting byunit_priceis refused, rows come newest first andprice_sort_unavailableistrue. - Until your organization's first subscription payment clears, the allowance is a smaller one and
price_allowance.unpaidistrue. Say that prices show once the subscription is paid, from the billing page in the app. - An award with
price_hiddenset totrueand noprice_hidden_reasonhas a price your organization does not see: it costs nothing of the allowance and sorts after the visible prices when you sort byunit_price. The price exists and is hidden; it is not an unpublished one. A row the allowance hides hasprice_hidden_reasonset toallowance. - Paging stops at a depth set by your organization's subscription. When a result holds more,
depth_limitedistrue,max_rowsgives how many rows paging reaches,total_pagescounts only reachable pages, and the page after them answerspage_depth_exceeded. To see other rows, narrowq,material_code,vendororsource_tender_numberrather 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_limitedwith 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_usistruewhen 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.