Sandooq product
Server Details
Sandooq product facts: plans, prices, MENA market tax and currency, and site pages as Markdown.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 4 tools
Each tool has a clear primary job: structured country facts, a single page as Markdown, pricing plans, and keyword search. There is mild overlap because get_page can also fetch country and pricing pages, making get_country_info and get_pricing convenience views over the same content, but the descriptions make the intended use of each clear.
All four tools follow a predictable verb_noun pattern (get_*, search_*), with get_country_info simply adding a qualifier to the same get_<resource> shape. No mixed conventions or vague verbs.
Four tools is well matched to a small read-only content server: fetch by page, fetch structured country data, fetch pricing, and search. No tool looks redundant enough to remove.
The surface covers reading and discovery, but lacks any enumeration operation such as listing supported countries or available pages, so an agent must guess a country name or rely on keyword search to discover coverage. Search provides a partial workaround, but there is a notable gap for a market-info server whose main entry point is 'which markets do you cover?'.
Available Tools
4 toolsget_country_infoGet Country InfoARead-onlyInspect
What Sandooq publishes about one MENA market: VAT rate, e-invoicing posture, currency, how tenders are handled, the regulator, and the market notes shown on that country's page.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | Response language: 'en' (default) or 'ar'. Arabic returns the Arabic copy the site publishes, not a translation of the English. | |
| country | Yes | Country to describe, as a lowercase ISO 3166-1 alpha-2 code. One of: sa, qa, ae, bh, om, sy, lb. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=false, destructiveHint=false, so the safety profile is covered. The description adds genuinely useful context the annotations cannot: that the payload is a fixed set of published fields drawn from a static, closed dataset rather than live lookups. It does not describe failure behavior for unsupported inputs, but the enum largely forecloses that.
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; the field enumeration is the useful payload rather than padding. It is slightly list-dense, reading more as a field manifest than a directive, but nothing is wasted.
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 carries the return-shape burden and does so by enumerating the six field groups an agent will receive. Combined with 100%-covered input schema and closed-world annotations, an agent has enough to call this correctly; only the get_page boundary remains unstated.
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 both the country enum and the locale enum (including the important 'Arabic is published copy, not a translation' nuance) are already fully documented in the schema. The description adds only the notion of 'one MENA market' and says nothing about locale, so baseline 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?
The description names a specific resource (one MENA market's Sandooq-published data) and enumerates the concrete fields returned: VAT rate, e-invoicing posture, currency, tenders, regulator, market notes. It is clearly distinct from get_pricing and search_docs, though it never explicitly contrasts itself with get_page, which could plausibly surface the same country page.
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 'call this to get structured per-country facts.' There is no statement of when to prefer it over get_page (the sibling whose territory — 'that country's page' — most overlaps) and no note about what happens for a country outside the seven-market enum.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pageGet PageARead-onlyInspect
One Sandooq page as Markdown — the same representation the site serves at /agent and via Accept: text/markdown, with no HTML or navigation chrome.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Site-relative path, no leading slash and no language prefix — e.g. 'pricing', 'about', 'pos-system/saudi-arabia', 'blog/<slug>'. Use '' for the home page. Choose the language with `locale`, not with a '/ar' prefix. | |
| locale | No | Response language: 'en' (default) or 'ar'. Arabic returns the Arabic copy the site publishes, not a translation of the English. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly, non-destructive and closed-world, so the safety burden is light; the description still adds real value by specifying what comes back (clean Markdown with no HTML or navigation chrome) and pinning it to a known site behavior. It does not cover error behavior for invalid paths or size/truncation limits for very long pages.
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 sentence with no filler, and the resource identity plus output format are front-loaded. Every clause (Markdown, /agent parity, no chrome) carries information an agent needs to decide between this tool and a search.
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 correctly takes on the job of characterizing the return payload as Markdown without chrome, which is the main thing an agent needs. What remains unspecified — 404/missing-page behavior and whether large pages are truncated — is minor for a two-parameter read tool with full schema coverage.
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 path and locale parameters are thoroughly documented there, including the leading-slash, language-prefix and empty-string-for-home rules. The description adds nothing 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 concrete resource (one Sandooq page) and the exact delivery format (Markdown, the same bytes served at /agent and via Accept: text/markdown, no HTML or navigation chrome). That output-format specificity distinguishes it from search_docs and get_country_info. It stops short of explicitly contrasting with get_pricing, which overlaps with the 'pricing' path example given in the schema.
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 'one ... page' implies this is the single-resource fetch versus a search or an aggregate lookup, so usage is inferable. But there is no explicit 'use search_docs if you don't know the path' or 'use get_pricing for pricing data' routing, and nothing about when not to call it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pricingGet PricingARead-onlyInspect
Sandooq's subscription plans, prices and per-plan limits, read from the same source the pricing page renders.
| Name | Required | Description | Default |
|---|---|---|---|
| country | No | Optional ISO 3166-1 alpha-2 country code, lowercase. One of: sa, qa, ae, bh, om, sy, lb. Pricing is identical in every country; the code is echoed back so the answer can name it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=false, and destructiveHint=false, so the safety profile is fully covered without description help. The description adds a real behavioral guarantee beyond that: the data comes from the same source the pricing page renders, telling the agent the answer is authoritative and consistent with the public site. It stops short of describing freshness, caching, or response shape.
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 sentence that front-loads the resource (plans, prices, limits) and closes with the source-of-truth guarantee. Every clause earns its place with no filler.
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 zero-required-parameter read tool with full schema coverage and annotations, the description covers both what is returned and where the data comes from. The absence of an output schema means the agent still doesn't know the response structure or currency formatting, but nothing essential to invoking it correctly is missing.
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?
With only one optional parameter and 100% schema description coverage, the schema carries the full explanation, including the surprising fact that pricing is identical in every country and the code is merely echoed back. The description adds nothing about the country parameter, so the baseline 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?
The description names a specific resource (subscription plans, prices, per-plan limits) and a clear read action, so an agent knows exactly what it returns. It does not explicitly contrast itself with siblings like get_country_info or get_page, though the naming is distinct enough to avoid confusion.
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 pricing questions because it returns plans and prices. There is no explicit when-to-use statement, no exclusion of alternatives, and no mention of prerequisites or how it relates to get_country_info.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_docsSearch DocsARead-onlyInspect
Search Sandooq's public pages and blog articles by keyword, returning ranked titles, URLs and excerpts. Follow a result with get_page to read it in full.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many results to return. Default 5, maximum 20. `matchCount` reports the total number of matching pages regardless. | |
| query | Yes | Words to search for. Matched case-insensitively against page titles and body text in the chosen language; there is no stemming, so the words a reader would use work best. | |
| locale | No | Response language: 'en' (default) or 'ar'. Arabic returns the Arabic copy the site publishes, not a translation of the English. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so safety is covered. The description adds real value by disclosing that results are ranked and what fields come back (titles, URLs, excerpts), which the schema does not state, though it omits that matchCount reports total hits independent of limit.
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?
Two sentences, zero waste: the primary behavior and return fields come first, with the follow-up hint last. Nothing redundant with the schema or annotations.
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 correctly takes on the burden of describing return values (ranked titles, URLs, excerpts) and the natural follow-up call. It is nearly complete; only result-count behavior (matchCount) is left solely to the schema.
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% – query matching, locale semantics, and limit/matchCount behavior are all documented in the schema. The description adds no parameter guidance beyond what is already structured, so baseline 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 (search), resource (Sandooq's public pages and blog articles), mechanism (keyword), and return shape (ranked titles, URLs, excerpts). It also names get_page as the follow-up, which separates search from retrieval among the siblings.
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?
"Follow a result with get_page to read it in full" gives an explicit next-step rule and implicitly scopes this tool to discovery rather than full-text reading. No explicit when-not condition or note about the closed corpus, but the routing intent is clear.
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.
4 tool updates
- First observed
get_country_info - First observed
get_page - First observed
get_pricing - First observed
search_docs
Related MCP Connectors
Audited indie product business cases with source-backed pricing, revenue and pricing benchmarks.
Subscription pricing, trade costs, and financial data for AI agents across 5 countries.
Competitor Meta ads intelligence reports. List plans, create orders, Stripe checkout for humans.
Live SaaS pricing: current plans, verified price changes, and comparisons for 33,000+ products.
Related MCP Servers
- AlicenseAqualityAmaintenanceMerchant of record MCP server: create products, payment links, checkouts, subscriptions, invoices and discount codes, with VAT and sales tax handled in 135+ jurisdictions.431341 npm4Apache 2.0
- FlicenseNot gradedqualityDmaintenanceProvides verified pricing data for SaaS, AI tools, and LLMs across 490+ tools. No API key required, returns sourced records with attribution links.3-
- AlicenseNot gradedqualityAmaintenanceSearch and retrieve researched indie product cases, published pricing and revenue disclosures, acquisition notes, and source links. Compute pricing benchmarks from the available dataset. Undisclosed revenue is returned as unknown; research and translation coverage vary by case.Apache 2.0
- AlicenseNot gradedqualityDmaintenanceProvides GCC regulatory intelligence including ZATCA e-invoicing, Arabic NLP, UAE Corporate Tax, and compliance tools for AI agents via the Model Context Protocol.26 npmMIT
Glama MCP Gateway
Add one secure layer between your agents and this server.