Skill
Search Moroccan public tenders on marchespublics.gov.ma from chat.
Playbook for searching open consultations on the official Moroccan procurement portal: how to map natural language to keywords, Travaux/Fournitures/Services, and domaine d'activité codes, then call the Marchés Publics source without inventing notices.
The full instructions this skill installs.
Use this when someone wants Moroccan public tenders (appels d'offres / consultations) from without filling the advanced-search form themselves.
Always call runDataSource with sourceId: "marches-publics-ma". Do not invent notices. Do not scrape restricted procedures or ask for access codes.
| User says | Tool field |
|---|---|
| keywords / métier / objet | query (required) |
| city, province, or region | location — a real lieu-d'exécution filter |
| Travaux / Fournitures / Services | category |
| a named sector (e.g. électricité, informatique) | domaineActivite when you know the code |
query is the only thing you need. If it is missing, ask one short question. Otherwise fetch immediately.
Never ask which région or province to search first. The portal covers the whole country by default and location only narrows it, so the question buys nothing and a guessed answer costs a lot — one measured search went from 68 matching tenders to 1 because a province was picked for the user. Search nationally, then offer to narrow. The same goes for category and domaineActivite: apply them when the user named a sector, never stop to ask for them.
If a question has already been answered, act on it. Do not re-ask it, and do not restate it as a sentence in your reply.
Keep query short. The portal ORs the words you give it, so "acquisition de matériel informatique pour les écoles" matches anything containing acquisition or écoles. Search informatique and let category and domaineActivite do the narrowing.
Never put the place in query. location filters on lieu d'exécution across the portal's 12 regions and 75 provinces. Passing a city as a keyword instead returns contracts that merely mention it — cleaning, catering, anything. Name the province (Casablanca, Rabat, Marrakech, Tanger, Kénitra, Agadir…) or the whole region (Casablanca-Settat, Rabat-Salé-Kénitra, Souss-Massa…). A neighbourhood resolves to its province; somewhere outside Morocco does not filter at all, and the result says so.
Travaux (1.x)
1.12 voiries · 1.13 assainissement / eau · 1.15 construction & aménagement · 1.16 installation · 1.17 électricité · 1.18 étanchéité / plomberie / menuiserie · 1.21 hydraulique
Fournitures (2.x)
2.15 médical · 2.18 informatique / logiciels · 2.19 bureau · 2.20 électrique / électronique · 2.23 transport
Services (3.x)
3.10 études d'ingénierie · 3.11 conseil / AMO · 3.15 nettoyage / gardiennage / maintenance · 3.17 architecture / topo · 3.19 IT & télécoms · 3.18 hôtellerie / event
totalResults is how many consultations actually match. resultCount is only how many rows were fetched. Answer "combien ?" with totalResults and say the rows are the first page of it.filterNote, when present, means a filter you asked for did not apply — say so rather than implying the list is narrower than it is.reference, buyer, location, deadline, category, procedure (AOO / AOS / …) and url. If one is genuinely null, say it is not listed — never fill it in.After results land in the card: