Soumit MCP Server
Supports verifying SHA-256 integrity of consultation artifacts archived in Backblaze B2 sovereign storage.
Supports verifying SHA-256 integrity of consultation artifacts archived in Cloudflare R2 sovereign storage.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Soumit MCP Serverfind open tender notices for road construction in Casablanca"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Soumit Public API & Model Context Protocol (MCP) Server
Official Public API, Model Context Protocol (MCP) server, and Autonomous Agent toolkits for Soumit — Morocco's Public Procurement & Tender Intelligence Engine, built and operated by VEXT AI.
Soumit connects Large Language Models (Claude 3.7 / Opus 3.5, ChatGPT / GPT-4o, Gemini 2.0 / 3.8, Cursor, Windsurf, and Autonomous Agents) directly to Morocco's public procurement corpus (Marchés Publics Maroc), statutory compliance calculators under Décret n° 2-22-431, and buyer payment delay telemetry under Loi n° 69-21.
📦 What is in this Repository
Asset | Description | Path |
MCP Server (14 Tools) | Stdio JSON-RPC 2.0 & Streamable HTTP Model Context Protocol server | |
OpenAPI 3.1 Contract | Full REST contract for all 24 Soumit public endpoints | |
ChatGPT OpenAPI Spec | OpenAPI 3.0 specification optimized for ChatGPT Custom GPT Actions | |
OpenAPI v3.0 Spec | Lightweight OpenAPI 3.0 contract | |
Postman Collection v2.1 | Ready-to-import Postman test collection with sample payloads | |
Claude Code Skill | Skill definition for Anthropic's Claude Code CLI | |
Claude Desktop Config | Plug-and-play desktop configuration for Claude Desktop | |
Custom GPT Instructions | Master system prompt, instructions, and conversation starters | |
Antigravity / Gemini Skill | Skill file for Antigravity & Google Gemini workflows | |
Cursor MCP Config | Stdio MCP configuration for Cursor IDE | |
Windsurf MCP Config | Stdio MCP configuration for Windsurf IDE | |
Smithery 1-Click Install | Registry configuration for Smithery.ai |
Related MCP server: chile-procurement
⚖️ Moroccan Legal Framework (Décret n° 2-22-431 & Loi n° 69-21)
Every tool and calculation strictly adheres to the statutory provisions published in the Bulletin Officiel du Royaume du Maroc (BO n° 7176):
Rule / Subject | Statutory Article | Formula / Criteria | Legal Consequence |
Offre Excessive | Article 44 § 4 | $\text{Offre} > 1.20 \times \text{Estimation Administrative}$ | Rejet d'office immédiat |
Offre Anormalement Basse (Travaux) | Article 44 § 1 & 45 | $\text{Offre} < 0.80 \times \text{Estimation Administrative}$ (-20%) | Justifications écrites obligatoires sous peine de rejet |
Offre Anormalement Basse (Fournitures & Services) | Article 44 § 2 & 45 | $\text{Offre} < 0.75 \times \text{Estimation Administrative}$ (-25%) | Justifications écrites obligatoires sous peine de rejet |
Cautionnement Provisoire (Caution bancaire) | Articles 23 & 27 | Exigé par le Règlement de Consultation (RC) | Rejet d'office si manquant ou non conforme |
Modèle Déclaration sur l'Honneur | Article 27 § A | Conforme au Décret 2-22-431 (post-01/09/2023) | Rejet immédiat si utilisation des anciens modèles |
Plafond Délais de Paiement | Loi n° 69-21 | Maximum légal : 60 jours | Suivi ODP et pénalités de retard |
Quota TPME Marocaines | Article 148 | 30% minimum réservé aux TPME / coopératives | Obligation nationale pour les acheteurs publics |
🚀 Quick Setup & Integrations
1. Claude Desktop
Add @vext-ma/soumit-public-api (or soumit-mcp) to your claude_desktop_config.json:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"soumit-procurement": {
"command": "npx",
"args": ["-y", "@vext-ma/soumit-public-api"],
"env": {
"SOUMIT_API_URL": "https://soumit.ma",
"SOUMIT_API_KEY": ""
}
}
}
}Or connect directly over Streamable HTTP:
{
"mcpServers": {
"soumit-direct": {
"url": "https://soumit.ma/api/mcp",
"transport": "streamable-http"
}
}
}2. Claude Code CLI
Link the Soumit skill into Claude Code:
mkdir -p ~/.claude/skills
cp -r .claude/skills/soumit-tenders ~/.claude/skills/Test it in Claude Code:
"Audit the compliance of an offer of 850,000 MAD HT for a supplies tender estimated at 1,200,000 MAD HT under Décret 2-22-431."
3. Cursor IDE
Place .cursor/mcp.json in your project root or configure in Cursor Settings → Features → MCP:
{
"mcpServers": {
"soumit": {
"command": "npx",
"args": ["-y", "@vext-ma/soumit-public-api"],
"env": {
"SOUMIT_API_URL": "https://soumit.ma",
"SOUMIT_API_KEY": ""
}
}
}
}4. Windsurf IDE
Place .codeium/windsurf/mcp_config.json in your workspace:
{
"mcpServers": {
"soumit": {
"command": "node",
"args": ["dist/index.js"],
"env": {
"SOUMIT_API_URL": "https://soumit.ma",
"SOUMIT_API_KEY": ""
}
}
}
}5. ChatGPT Custom GPT
Create a Custom GPT in OpenAI GPT Builder.
Copy the system prompt and conversation starters from
docs/chatgpt/CUSTOM_GPT_INSTRUCTIONS.md.Under Actions, click Import from URL or paste
chatgpt-openapi.json.Save and publish.
6. Smithery 1-Click Install
Install automatically via Smithery.ai:
npx -y @smithery/cli install @vext-ma/soumit-public-api --client claude🛠️ Complete Catalog of 14 MCP Tools
1. search_tenders
Search active Moroccan public procurement notices by keyword, sector (travaux, fournitures, services, sante, it), and estimated budget.
Parameters:
query(string),sector(string),min_amount(number),limit(number).
2. get_tender_details
Retrieve comprehensive consultation package summary (DCE), estimated budget, required provisional guarantee (Art. 23), eliminatory criteria, and Go/No-Go score.
Parameters:
tender_id(string, required).
3. check_regulatory_compliance
Compute statutory price corridors under Décret n° 2-22-431 (Articles 44 & 45). Automatically evaluates whether a proposed bid is compliant, abnormally low, or excessive.
Parameters:
estimated_amount_ht(number, required),proposed_amount_ht(number, required),sector_type("travaux"|"fournitures"|"services").
4. search_competitor_awards
Competitive intelligence on Moroccan suppliers: historical wins, winning amounts, public buyer partners, and disqualification reasons.
Parameters:
competitor_name(string, required),limit(number).
5. get_company_profile
360° company lookup combining official Moroccan corporate registry identity (15-digit ICE, RC, IF, CNSS, legal form, capital) with public procurement award history.
Parameters:
company_query(string),ice(string).
6. search_bpu_articles
Search tenders by specific line items or materials in unit price schedules (BPU / CPS), including technical standards, medical equipment, and specifications.
Parameters:
article_query(string, required),limit(number).
7. audit_submission_checklist
Crash-test administrative submission packages before bid opening to eliminate immediate disqualification risks under Articles 27 & 28.
Parameters:
tender_reference(string, required),has_provisional_guarantee(boolean),provisional_guarantee_amount(number),has_declaration_on_honor(boolean),has_site_visit_certificate(boolean).
8. execute_procurement_intent
Agentic execution framework: converts business intent into a typed contract, verifies regulatory authority, extracts grounded evidence anchors, and returns a governance portal URL.
Parameters:
raw_prompt(string, required),caller_role(enum),proposed_amount_mad(number),tender_reference(string).
9. verify_evidence_chain
Cryptographically verify SHA-256 integrity of consultation artifacts (CPS, RC, PV) archived in sovereign storage (Backblaze B2 / Cloudflare R2).
Parameters:
storage_uri(string, required),expected_sha256(string, required).
10. submit_portal_recourse
Action a recourse on the portal: human verdict override, ambiguity alert, or Article 22 clarification request with audit logging.
Parameters:
contract_id(string, required),action(enum, required),rationale(string, required),actor_identity(string, required).
11. get_execution_audit_trail
Inspect tamper-evident execution audit log for compliance and corporate governance.
Parameters:
contract_id(string, required).
12. search_market_mentions
Social and market signal detection: monitor disputes, legal jurisprudence, delayed payment allegations, and regulatory updates.
Parameters:
query(string),topic(enum),min_risk(enum),limit(number).
13. get_buyer_intelligence
Public buyer profile: historical purchasing volume, payment delay track record under Loi n° 69-21, 60-day legal ceiling compliance, and cashflow risk score from the Observatoire des Délais de Paiement (ODP).
Parameters:
buyer_query(string, required).
14. get_market_barometer
Macroeconomic barometer of public procurement in Morocco: total active budget volume in MAD, regional breakdown, and Article 148 TPME 30% quota compliance.
Parameters:
period(string).
💻 Programmatic TypeScript / Node.js SDK Usage
You can also import the regulatory compliance engine directly into your code:
import { computeDecreeCompliance } from "@vext-ma/soumit-public-api";
// 1. Test a supplies offer (-15% discount)
const result = computeDecreeCompliance({
estimatedAmountHt: 2_000_000,
proposedAmountHt: 1_700_000,
sectorType: "fournitures"
});
console.log(result.status);
// "CONFORME"
console.log(result.floorAmount);
// 1500000 MAD (-25%)
console.log(result.ceilingAmount);
// 2400000 MAD (+20%)
// 2. Test a construction / works offer (-24% discount)
const lowWorks = computeDecreeCompliance({
estimatedAmountHt: 5_000_000,
proposedAmountHt: 3_800_000,
sectorType: "travaux"
});
console.log(lowWorks.status);
// "OFFRE_ANORMALEMENT_BASSE"
console.log(lowWorks.advisory);
// "⚠️ Votre offre est inférieure de 24.0% à l'estimation administrative (seuil de tolérance: -20%)..."🔒 Tenancy, Privacy & Data Sovereignty
Moroccan Law n° 09-08 (CNDP) Compliance: Sourced exclusively from lawful administrative notices, gazettes, and official procurement records.
Zero Raw Document Egress: Third-party consultation files (DCE) are processed and indexed within secure, sovereign edge boundaries.
Fail-Closed Privacy: Prompts, catalogue items, and internal pricing strategies are never logged, cached, or used for model training.
🧪 Testing & CI
Run the automated test suite locally:
npm install
npm testAll 7 test suites validate tool schemas, Décret 2-22-431 corridor calculations, checklist crash tests, and evidence verification.
🏢 Company & Resources
Official Platform: https://soumit.ma
VEXT AI: https://vext.ma
GitHub Organization: https://github.com/vext-ma
Email Inquiries: contact@vext.ma
📄 License
This repository and all associated toolkits are released under the MIT License.
Copyright © 2026 VEXT AI. Casablanca, Morocco.
Available Tools
14 toolsaudit_submission_checklistB
Crash-test administratif : vérifier la liste des pièces obligatoires pour éviter l'élimination d'office à l'ouverture des plis (Articles 27 & 28 du Décret 2-22-431).
| Name | Required | Description | Default |
|---|---|---|---|
| tender_reference | Yes | Référence de l'appel d'offres. | |
| has_declaration_on_honor | No | La déclaration sur l'honneur est-elle conforme au modèle Décret 2-22-431 Article 27 ? | |
| has_provisional_guarantee | No | Le cautionnement provisoire original ou récépissé de caution bancaire est-il prêt ? | |
| has_site_visit_certificate | No | Le certificat de visite des lieux est-il requis et obtenu ? | |
| provisional_guarantee_amount | No | Montant de la caution bancaire préparée. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 'Crash-test' hints at a read-only diagnostic, but the description does not say whether anything is persisted, what a verdict looks like, or how missing items are reported — and with no output schema that gap is material.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence with the purpose and legal basis front-loaded and no filler. The 'Crash-test administratif' framing is informal but functional and does not cost clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a five-parameter audit tool with no annotations and no output schema, the definition is thin: it never indicates what the check returns (pass/fail list, missing documents, compliance verdict) or whether the boolean inputs are evaluated against the guarantee amount.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and all five parameters are individually documented, including their link to Article 27. The description adds only the decree reference (Articles 27 & 28), which loosely frames the booleans but gives no extra semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb and resource: verifying the list of mandatory documents ('vérifier la liste des pièces obligatoires') to avoid automatic elimination at bid opening, with the governing decree cited. It is clearly distinguishable from most siblings, though it does not explicitly separate itself from check_regulatory_compliance, which sounds adjacent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'pour éviter l'élimination d'office à l'ouverture des plis' implies the moment of use (pre-submission sanity check) but never states it as a condition, and names no alternatives or exclusions versus check_regulatory_compliance or submit_portal_recourse.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_regulatory_complianceA
Calculer la conformité d'une offre financière avec le Décret n° 2-22-431 : détection d'offre anormalement basse ou excessive (Articles 44 & 45), et vérification des délais d'affichage (Article 23).
| Name | Required | Description | Default |
|---|---|---|---|
| tender_id | No | Identifiant du marché ou référence. | |
| sector_type | No | Nature de la prestation pour appliquer le bon corridor légal (ex: -20% travaux vs -25% fournitures/services). | |
| proposed_amount_ht | Yes | Montant de l'offre proposée par le soumissionnaire en Dirhams HT. | |
| estimated_amount_ht | Yes | Estimation administrative du marché en Dirhams HT. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the behavioral burden. It does disclose the analytical basis (sector-dependent corridors, the specific articles applied) but says nothing about whether the operation is read-only, what the verdict/output shape is, or how ties or boundary cases near a threshold are handled. Notably, it advertises a display-deadline check under Article 23 while the schema exposes no date parameters, leaving that behavior unexplained.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with the legal reference up front and the two checks enumerated after a colon. No filler, no repetition of the tool name, and every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a four-parameter calculation tool with no annotations and no output schema, the description should say more about what a caller receives (a boolean verdict, a threshold percentage, flag details) and about the Article 23 deadline check that no parameter appears to support. The legal grounding is solid but the operational picture is incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters, including the sector enum and its -20% / -25% corridor rationale. The description adds no parameter-level meaning beyond what the schema provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource combination ('Calculer la conformité d'une offre financière') and anchors it to a named legal instrument (Décret n° 2-22-431) with the exact articles covered. The two checks performed (abnormal low/excess offer detection under Articles 44 & 45, display-deadline verification under Article 23) make the scope concrete. It does not explicitly distinguish itself from the closest sibling, audit_submission_checklist, which is why this is not a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent can infer this is the tool for evaluating a bid amount against the administrative estimate. There is no explicit statement of when to call this versus alternatives such as audit_submission_checklist or execute_procurement_intent, and no stated prerequisites (e.g. that both amounts must be known in advance).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_procurement_intentB
Cadre d'exécution agentique (Soumit Execution Framework) : transforme une intention métier en contrat typé, vérifie l'autorité (Décret 2-22-431), extrait les preuves textuelles (Backblaze B2/R2) et fournit le lien de gouvernance portail.
| Name | Required | Description | Default |
|---|---|---|---|
| raw_prompt | Yes | Intention métier exprimée par l'utilisateur ou l'agent (ex: 'Qualifier le marché de scanner au CHU Fès 14/CHU/2026'). | |
| caller_role | No | Rôle de l'appelant pour le contrôle d'autorité (défaut: 'bid_analyst'). | |
| tender_reference | No | Référence explicite de l'appel d'offres si connue. | |
| proposed_amount_mad | No | Montant envisagé de l'offre en MAD HT pour le test de conformité aux couloirs légaux (Arts. 44 & 45). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the full behavioral burden. It helpfully discloses the internal steps (contract typing, authority check, evidence extraction from external storage) and implies external reads, but it never says whether the typed contract is persisted, whether anything is submitted to the portal, or what permissions the caller_role enforces. For a tool whose name implies execution, the side-effect profile remains ambiguous.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence packs in the whole pipeline, but it opens with the branding parenthetical 'Cadre d'exécution agentique (Soumit Execution Framework)', which does little for tool selection, and closes with the vague phrase 'lien de gouvernance portail'. The substantive steps are present but buried in jargon.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter tool with no annotations and no output schema, the description outlines the conceptual flow but omits what the typed contract looks like, whether execution has persistent effects, and how failures are surfaced. It is adequate to identify the tool but not complete enough to predict its consequences.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter including caller_role and the amount compliance test is already documented in the schema. The description adds no additional parameter-level meaning, which is acceptable at this coverage level but earns only the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names specific operations: converting a business intention into a typed contract, verifying authority under Decree 2-22-431, extracting textual evidence from Backblaze B2/R2, and returning a portal governance link. That is far more concrete than a restated name. It does not, however, distinguish this composite pipeline from overlapping siblings like check_regulatory_compliance or verify_evidence_chain.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool versus alternatives, no prerequisites, and no exclusions. Given that at least three sibling tools (check_regulatory_compliance, verify_evidence_chain, submit_portal_recourse) cover parts of the same pipeline, the absence of routing guidance is a real gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_buyer_intelligenceB
Intelligence acheteur public au Maroc : historique de commande publique, profil de paiement sous la Loi n° 69-21 (délai moyen de paiement en jours, conformité légale au plafond de 60 jours, niveau de risque trésorerie ODP) et derniers appels d'offres émis.
| Name | Required | Description | Default |
|---|---|---|---|
| buyer_query | Yes | Nom de l'acheteur public, ministère, collectivité territoriale ou acronyme (ex: 'ONEE', 'CHU Ibn Sina', 'Ministère de la Santé', 'Région Casablanca'). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses the returned data categories and legal metrics such as average payment days, 60-day compliance, and treasury risk, but it omits whether the operation is read-only, data freshness, source, authentication needs, rate limits, and response behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler, and every listed element contributes to scope. It is somewhat dense because of the parenthetical legal metrics, but it remains efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description should explain enough about the returned intelligence and operational behavior. It lists the main returned components, but it lacks details on recency or time horizon, data source, response shape, and when to use it over sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the buyer_query parameter already explains acceptable buyer names, ministries, local authorities, and acronyms with examples. The description adds no additional meaning about how the query is matched or interpreted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource, public buyer intelligence in Morocco, and enumerates its outputs: public procurement history, payment profile under Law 69-21, and latest issued tenders. It is clear what the tool retrieves, but it does not explicitly distinguish itself from siblings such as search_tenders or get_company_profile.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus alternatives, and no prerequisites or exclusions are stated. The data categories imply a buyer-profile use case, but the agent must infer when this is preferable to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_company_profileA
Obtenir la fiche 360° complète d'une entreprise ou fournisseur au Maroc : identité légale officielle (ICE 15 chiffres, RC, IF, CNSS, forme juridique, capital MAD, adresse, ville, activité, conformité fiscale) croisée avec son historique de la commande publique (volume total remporté en MAD, nombre d'attributions aux PV, rabais moyen consenti vs budget administratif, top acheteurs publics clients, dernières attributions remportées).
| Name | Required | Description | Default |
|---|---|---|---|
| ice | No | Numéro ICE marocain à 15 chiffres si connu (ex: '001588990000012') pour une identification exacte au registre des sociétés. | |
| company_query | No | Nom de l'entreprise, raison sociale, acronyme ou marque (ex: 'LPEE', 'Promamec', 'Perfect Industry', 'Diamond Diagnostics'). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full behavioral burden. It does disclose the substantive payload (two joined datasets, MAD-denominated metrics), which is valuable, but it says nothing about behavior when no record matches, whether both parameters are optional or one is required, which parameter wins if both are supplied, or whether the lookup is cached/rate-limited. 'Obtenir' implies a read, but that is inference rather than disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single front-loaded sentence with the purpose stated first and the payload details in a compact parenthetical. It is dense but every clause enumerates a distinct returned field; the only cost is that the long nested list is somewhat harder to scan than a short bulleted structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully compensates by enumerating the returned fields in detail, which is exactly what an agent needs to judge relevance. The remaining gap is operational: no result-miss behavior and no indication of how the two optional parameters combine.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters (ice, company_query) are already documented with examples and formats, making 3 the baseline. The description adds only that the target may be an 'entreprise ou fournisseur' (i.e., suppliers are in scope too), but gives no guidance on precedence between ICE and name lookup or on ambiguity handling for names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource ('Obtenir la fiche 360° complète d'une entreprise ou fournisseur au Maroc') and enumerates the exact contents: legal identity fields (ICE, RC, IF, CNSS, capital MAD) cross-referenced with public-procurement history (total volume won, award count, average discount, top buyers). This makes it immediately distinguishable from siblings like search_tenders, get_buyer_intelligence, or check_regulatory_compliance.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the header suggests a full-entity lookup rather than an event search. There is no explicit statement of when to prefer this over check_regulatory_compliance (which likely covers the tax-compliance portion) or get_buyer_intelligence, and no exclusions or prerequisites are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_execution_audit_trailB
Consulter le journal d'audit infalsifiable (hash-chain) d'un contrat d'exécution pour la gouvernance et le contrôle.
| Name | Required | Description | Default |
|---|---|---|---|
| contract_id | Yes | Identifiant du contrat d'exécution. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description must carry the behavioral burden. 'Consulter' implies a read-only operation and 'infalsifiable (hash-chain)' usefully signals immutability, but nothing is said about access permissions, whether audit reads are themselves logged, ordering/pagination of entries, or what the trail contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence with the resource and its key property early; the trailing 'pour la gouvernance et le contrôle' is somewhat filler and, being untranslated while siblings are English, slightly hurts skimmability, but there is no verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read tool this is close to adequate, but with no output schema the description should indicate what the trail returns (entries, hash linkage, timestamps) and it does not; the relationship to verify_evidence_chain is also unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single required parameter with 100% schema description coverage, so the schema already defines contract_id. The description adds no meaning about identifier format, accepted source of the ID, or behavior for unknown IDs, leaving it at the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: consult the tamper-proof hash-chain audit trail of an execution contract. The hash-chain/immutability qualifier makes it recognizable, but the description never differentiates it from the adjacent sibling verify_evidence_chain, which plausibly overlaps.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The trailing phrase 'pour la gouvernance et le contrôle' gestures at a purpose but gives no when-to-use condition, no prerequisite (e.g., an authenticated caller or an existing contract), and no guidance on choosing this over verify_evidence_chain or audit_submission_checklist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_market_barometerC
Baromètre macroéconomique de la commande publique au Maroc (Soumit Barometer) : volume budgétaire global engagé en Dirhams (MAD), nombre d'opportunités actives, ventilation par pôle régional et conformité au quota TPME de 30% (Article 148 du Décret 2-22-431).
| Name | Required | Description | Default |
|---|---|---|---|
| period | No | Période d'analyse souhaitée (ex: 'current', 'quarterly', '2026'). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full burden, and it only describes content, not behavior. It never states that the tool is read-only, how fresh the aggregates are, whether figures are cached or recomputed per call, the scope of data covered, or the unit/format of the returned structure. The reference to Article 148 of Decree 2-22-431 signals regulatory framing but no operational behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One compact sentence, front-loaded with the tool's identity and followed by the concrete metrics. It is essentially a field enumeration, but nothing is redundant or padded. Slight deduction for reading as an output list rather than a purpose statement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description must convey the return content, and enumerating the four metrics does that adequately for a zero-required-parameter aggregate tool. However, it omits freshness, data scope, and the absence of any guidance on the optional 'period' argument's effect, leaving gaps an agent would notice when interpreting results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single 'period' parameter is documented with examples ('current', 'quarterly', '2026'), so the schema does the work. The description adds no meaning beyond the schema — it does not say how period affects the aggregation or what the default is when omitted (the parameter is not required).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource specifically (macroeconomic barometer of Moroccan public procurement, 'Soumit Barometer') and enumerates what it reports: committed budget volume in MAD, active opportunity count, regional-pole breakdown, and TPME 30% quota compliance. An agent can tell it is an aggregate-indicator tool. It stops short of explicitly distinguishing itself from siblings such as get_buyer_intelligence or check_regulatory_compliance, which also touch compliance and market data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool, when not to, or which sibling to prefer for a narrower question (e.g. search_tenders for individual opportunities vs. this tool for aggregate volume). Usage must be inferred entirely from the list of returned metrics.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tender_detailsB
Obtenir la fiche complète, la synthèse du DCE, les critères éliminatoires et le statut Go/No-Go d'un appel d'offres.
| Name | Required | Description | Default |
|---|---|---|---|
| tender_id | Yes | Identifiant unique de l'appel d'offres (ID Soumit ou référence marché). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full behavioral burden. It implies a read operation but does not confirm it is read-only, does not state what happens when the ID is unknown or the DCE is unavailable, and says nothing about response shape beyond a list of content types. For a tool with zero annotation coverage this is a notable gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that enumerates exactly what is returned. No filler or repetition, though the list of content types could be tightened slightly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter lookup the description covers what is returned reasonably well, but with no annotations and no output schema it should disclose read-only behavior and failure modes. The tool's value proposition is clear; the operational context is thin.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter's description already explains the ID formats accepted (Soumit ID or market reference). The description adds nothing param-specific, but with one fully documented parameter the baseline of 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource: it retrieves the complete record ('fiche complète') for a tender, plus the DCE synthesis, eliminatory criteria and Go/No-Go status. This is clearly a detail-fetch tool, distinguishable from the sibling search_tenders which lists/searches. It stops short of naming the sibling alternative explicitly, keeping it at 4.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use or when-not-to-use guidance, no mention of prerequisites such as needing a tender_id from search_tenders first, and no routing to alternatives like search_tenders or get_buyer_intelligence. Usage is only implied by the fact that a single ID is required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_bpu_articlesB
Rechercher des marchés publics par article ou spécification ligne par ligne dans les bordereaux des prix (BPU / CPS) : références matérielles, normes, désignations techniques.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Nombre de résultats (défaut: 10). | |
| article_query | Yes | Désignation de l'article, marque, norme ou référence équipement (ex: 'Cathéter double J', 'Pompe immergée 15kW', 'Switch PoE 24 ports'). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It states only what corpus is searched; it does not disclose result ordering, pagination, whether results are read-only, or how partial/multi-word matches behave. For a search tool with zero annotation coverage this is a notable gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with the search target stated immediately and no wasted clauses. Dense but readable; the parenthetical BPU/CPS abbreviation is useful rather than redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter search with full schema coverage and no output schema, the description is adequate on intent but does not describe what a result represents (a BPU line, its parent tender, matched text) or how to follow up. An agent could call it, but not confidently interpret the output.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are already documented with examples in the schema. The description adds modest value by enumerating query types (hardware references, standards, technical designations), but adds nothing about the 'limit' parameter or matching syntax beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb ('Rechercher') and a well-defined resource: line-item articles/specifications inside BPU/CPS price schedules. The scope ('ligne par ligne', 'références matérielles, normes, désignations techniques') clearly separates it from tender-level siblings like search_tenders, although no sibling is named.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent can infer this is for item/specification-level lookup rather than whole-tender search, but the description never says when to prefer it over search_tenders or what to do when no BPU article exists. No explicit exclusions or alternatives are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_competitor_awardsB
Intelligence concurrentielle : rechercher l'historique d'un concurrent ou d'un attributaire au Maroc (marchés gagnés, montants, acheteurs clients, motifs d'éviction).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Nombre de résultats (défaut: 15). | |
| competitor_name | Yes | Raison sociale ou mot-clé du concurrent (ex: 'SOCIETE MAROCAINE DE...', 'IBT', 'MEDTRONIC', 'SOMADIR'). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full burden. It implies a read-only lookup and lists the data categories returned, but never states that it is non-mutating, says nothing about result volume/pagination behavior, matching semantics (exact vs keyword), or what happens when the name yields no match — all material for a search tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with a categorizing prefix that orients the agent immediately; the parenthetical enumerates outputs without waste. Slightly dense, but nothing is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter search with no output schema and no annotations, the description does the key work of naming what comes back (awards, amounts, buyers, eviction grounds) and scoping to Morocco. Remaining gaps — matching behavior and result limits beyond the default — are minor for a read-only lookup.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters are documented in-schema (competitor_name with examples, limit with a default of 15). The description adds no syntax, matching, or truncation guidance beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (rechercher) and resource (historique d'un concurrent ou attributaire au Maroc), and enumerates the returned content (marchés gagnés, montants, acheteurs clients, motifs d'éviction). It does not name a distinguishing sibling such as get_company_profile or search_market_mentions, so sibling differentiation is left implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The framing 'Intelligence concurrentielle' implies the use case (profiling a competitor's award history), but there is no explicit statement of when to prefer this over get_company_profile, search_market_mentions, or search_tenders, and no exclusions or prerequisites are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_market_mentionsB
Rechercher les conversations, articles de presse et signaux sociaux récents sur les marchés publics marocains (controverses, litiges, réformes, acheteurs, retards de paiement, allégations).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Nombre maximum de résultats (défaut 10). | |
| query | No | Mots-clés de recherche (nom d'acheteur, fournisseur, référence d'AO ou terme juridique). | |
| topic | No | Filtrer par catégorie thématique. | |
| min_risk | No | Filtrer par niveau de risque réglementaire. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It adds useful context by naming source types (conversations, press, social signals) and saying results are recent, but it does not disclose time windows, source coverage, ranking, permissions or whether the operation is read-only.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler. The parenthetical example list is slightly dense but every element is relevant to the search scope.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
It is adequate for a search tool with fully described optional parameters. However, with no output schema and no annotations, it should say more about result format, recency horizon or source coverage to be fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are already well documented in the schema. The description does not add syntax, format guidance or meaning beyond what query, topic, min_risk and limit already convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource: searching conversations, press articles and social signals about Moroccan public procurement, with concrete themes such as controversies, disputes and payment delays. It is clear what the tool does, though it does not explicitly distinguish itself from siblings like search_tenders or search_bpu_articles.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the source types and themes: this is for informal mentions rather than official tender or legal records. However, there is no explicit statement of when to choose this tool over search_tenders, search_bpu_articles or get_market_barometer, and no exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_tendersB
Rechercher des appels d'offres publics marocains récents et actifs par mot-clé, secteur ou montant minimum.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Nombre maximum de résultats (par défaut 10, max 50). | |
| query | No | Mots-clés de recherche (ex: 'scanner médical', 'fibre optique', 'travaux assainissement', 'gardiennage'). | |
| sector | No | Secteur d'activité optionnel (ex: 'travaux', 'fournitures', 'services', 'sante', 'it'). | |
| min_amount | No | Montant estimé minimum en Dirhams (MAD). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the full behavioral burden and mostly does not meet it. It discloses only the data scope (recent, active, Moroccan public tenders); it says nothing about authentication, result ordering, pagination beyond the schema's limit, or what happens when no tender matches.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler, and the resource and scope appear before the filters. It is perhaps too terse for a four-parameter tool, but every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a search tool with four optional parameters and no output schema, the definition is minimally sufficient: an agent can form a call. It is missing the shape of the results (which tender fields are returned) and the ordering, which the agent would need to use the output sensibly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents limit, query, sector, and min_amount with examples and units. The description merely lists the same three filter dimensions (mot-clé, secteur, montant minimum) and adds no extra semantics such as matching behavior or whether filters combine with AND.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Rechercher) and a precise resource (appels d'offres publics marocains) with scope qualifiers (récents et actifs) and the filter dimensions. It is clearly distinguishable from a details-fetching sibling like get_tender_details, though it never names any sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: 'récents et actifs' signals that archived/closed tenders are out of scope, which is a useful implicit boundary. However, there is no statement of when to choose this over search_competitor_awards or search_bpu_articles, and no prerequisites or exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
submit_portal_recourseB
Actionner un recours sur le portail : override humain de verdict, signalement d'ambiguïté, ou demande d'éclaircissement Art. 22.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Action de recours à effectuer. | |
| rationale | Yes | Justification obligatoire de la décision humaine. | |
| actor_role | No | Rôle du signataire. | |
| contract_id | Yes | Identifiant du contrat d'exécution généré par execute_procurement_intent. | |
| actor_identity | Yes | Nom ou identifiant du collaborateur humain. | |
| override_verdict | No | Nouveau verdict (requis pour OVERRIDE_VERDICT). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full behavioral burden for a mutating, legally significant action (Art. 22 human intervention). It never states whether an override is reversible, whether the recourse is logged/auditable, whether actor_role must be consistent with the chosen action, or what state changes result. The only added signal is that the override is performed by a human, which is useful but far short of what an unannotated mutation tool needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that names the resource first and then the actionable cases; there is no filler. It is slightly compressed at the cost of precision (one enum action omitted), but structurally clean.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The schema is rich (six parameters, three enums, 100% description coverage) and no output schema exists, so the description need not explain return values. Still, for a six-parameter mutation with no annotations and legal stakes, the definition leaves open who is authorized, what happens after submission, and whether the call can be undone — gaps an agent would want closed before invoking it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and every parameter is documented inline, including the conditional requirement that override_verdict is needed for OVERRIDE_VERDICT. The description merely restates the action categories already embedded in the enum and adds no format, constraint, or cross-parameter semantics beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Actionner un recours sur le portail') and enumerates three of the recourse scenarios, so an agent knows this is a human-override/appeal submission tool rather than a read or execution tool. However, the description lists only three scenarios while the enum has four actions (EXECUTIVE_SIGN_OFF is never mentioned), and it draws no boundary against related siblings such as execute_procurement_intent or get_execution_audit_trail.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the enumeration of the three recourse cases (override verdict, flag ambiguity, Art. 22 clarification request), which hints at when the tool applies. There is no explicit mapping of scenario to the action enum, no statement of prerequisites (e.g. an existing contract_id from execute_procurement_intent), and no guidance on when not to use it or which sibling to prefer instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_evidence_chainC
Vérifier la chaîne de preuve cryptographique (SHA-256) d'un extrait de CPS, RC ou PV stocké sous Backblaze B2 ou Cloudflare R2.
| Name | Required | Description | Default |
|---|---|---|---|
| storage_uri | Yes | URI de l'artefact (ex: 'b2://soumit-dce/...' ou 'r2://...'). | |
| expected_sha256 | Yes | Somme de contrôle SHA-256 attendue. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full burden. It implies a read-only verification and names the storage backends, but says nothing about what a match versus a mismatch produces, whether a missing object errors out, or whether any credentials/ACLs are required for the B2/R2 bucket.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler or repetition. It is appropriately sized, though the same sentence length could have been spent on outcome semantics instead of enumerating document types.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a verification tool with no annotations and no output schema, the description omits exactly what an agent needs: the shape of the verification result and the failure modes. It is complete enough to identify the action but not enough to interpret its outcome.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description reinforces the meaning by tying storage_uri to the B2/R2 backends and expected_sha256 to the cryptographic check, but it adds no format, encoding, or case-sensitivity details beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and object: verify the SHA-256 cryptographic proof chain of a CPS/RC/PV extract stored on Backblaze B2 or Cloudflare R2. It is far more specific than a restatement of the name, but it never contrasts itself with adjacent siblings such as get_execution_audit_trail or audit_submission_checklist, which an agent could plausibly confuse with an integrity check.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use or when-not-to-use guidance is given, and no alternative tool is named. The agent must infer from the name alone that this is an integrity pre-check on a stored artefact rather than an audit or checklist operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
14 tool updates
v1.3.0- First observed
audit_submission_checklist - First observed
check_regulatory_compliance - First observed
execute_procurement_intent - First observed
get_buyer_intelligence - First observed
get_company_profile - First observed
get_execution_audit_trail - First observed
get_market_barometer - First observed
get_tender_details - First observed
search_bpu_articles - First observed
search_competitor_awards - First observed
search_market_mentions - First observed
search_tenders - First observed
submit_portal_recourse - First observed
verify_evidence_chain
TDQS
Scored across 14 tools
Most tools target clearly distinct resources/actions (tender search vs. details vs. compliance vs. checklist). A few pairs are close — search_competitor_awards vs. get_company_profile both return award history, and get_execution_audit_trail vs. verify_evidence_chain both deal with proof/audit — but descriptions distinguish micro (company/contract) from macro and verification from logging.
All names are snake_case and verb-first (search_, get_, check_, submit_, verify_, execute_, audit_), giving a predictable pattern. VERB selection varies meaningfully with action; audit_submission_checklist is a minor noun-phrase deviation but still verb_noun readable.
14 tools sit comfortably in the well-scoped 3-15 range. Each tool maps to a distinct procurement workflow stage (search, analyze, comply, verify, execute), so none feel padded.
The surface covers the full lifecycle: discovery, tender details, competitor/buyer/company intelligence, compliance, submission checklist, execution, recourse, and audit/evidence verification. Minor gaps like deadline/alert monitoring or direct bid submission exist but core agent workflows are covered.
Maintenance
Related MCP Connectors
Government tenders, awards and pre-tender pipelines from 21 official sources as MCP tools.
100+ MCP tools for AI agents: content metadata, trade intelligence, business-expertise analysis.
Pay-per-use tool marketplace for AI agents. Search, price-check, and call APIs via MCP.
Hosted MCP with 91 agent tools: X, domains, SEO, Maps, Trends, Search, YouTube, TikTok, and more.
Related MCP Servers
- AlicenseAqualityCmaintenanceExposes French and EU public procurement data (BOAMP + TED) as MCP tools for AI agents, enabling search for tenders, awards, and winner intelligence via typed filters.4MIT
- AlicenseNot gradedqualityCmaintenanceEnables access to Chile's government procurement data (Mercado Público / ChileCompra) via MCP, allowing AI agents to query public procurement information.388 npmMIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to query Colombian government procurement data via MCP tools or natural language questions.428 npmMIT
- FlicenseNot gradedqualityBmaintenanceEnables AI assistants to query and analyze Costa Rica's public procurement (SICOP) data, including supplier profiles, market trends, product price histories, and bid comparisons, through a suite of MCP tools.-