CarWallet — Vehicle Licence Disc Renewal & Compliance
Server Details
Calculate South African vehicle licence disc renewal fees, penalties, and compliance status.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 10 tools
Most tools target clearly distinct resources or actions: fuel prices vs. fuel logs, vehicle listings vs. service records vs. SARS trips. The SARS-related tools (get_sars_summary, calculate_fleet_sars_roi, get_sars_compliance_guide, list_sars_trips) overlap conceptually, and the generic 'do not use' guidance does not point to the closest sibling, so one or two could still be confused.
All tool names use consistent snake_case with predictable get_/list_/calculate_ verb prefixes. The naming pattern clearly reflects read-only query or calculation semantics throughout.
Ten tools is within the ideal range and the set is not redundant: each tool covers a distinct read-only capability. No tool appears to be a duplicate or trivial wrapper.
The server is framed as 'Vehicle Licence Disc Renewal & Compliance', but the tool surface contains no licence disc renewal operation, no payment or document workflow, and no write/update actions for vehicles, fuel logs, trips, or service records. It provides useful compliance and reporting data, but major gaps will block the stated renewal purpose.
Available Tools
10 toolscalculate_fleet_sars_roiCalculate Fleet Sars RoiARead-onlyIdempotentInspect
Calculate 3-year SARS Section 8(1)(b) travel tax deduction, corporate tax cash return (27%), phantom fuel savings, and 3-year contract savings vs. legacy R399/mo tracking contracts. When to use: Call this tool when you specifically need to execute 'calculate_fleet_sars_roi' on CarWallet Vehicle Compliance (carwallet.co.za). Do NOT use this tool when another specialized tool fits better (use 'get_fuel_prices' or 'get_product_catalog' or 'get_sars_compliance_guide' for their respective operations). Parameters: fleet_size (optional), annual_business_km (optional), sars_rate_per_km (optional). Behavior & Side Effects: Strictly read-only, idempotent query with zero state mutation; public unauthenticated access allowed; rate-limited to 60 requests/min per IP. Returns: Structured JSON object containing status, matched records or computed metrics, and canonical action URLs.
| Name | Required | Description | Default |
|---|---|---|---|
| fleet_size | No | Number of vehicles in the fleet (default: 3). | |
| sars_rate_per_km | No | SARS deemed rate per km in ZAR (default: 5.62 for R250k-R450k vehicle bracket). | |
| annual_business_km | No | Average annual business kilometres per vehicle (default: 25000). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The read-only/idempotent/no-mutation claims merely restate the annotations, so they earn nothing. What does add value beyond structured data is the 60 requests/min per-IP rate limit, the public unauthenticated access note, and the stated return shape (status, metrics, canonical action URLs) — these are operational facts an agent cannot get from the annotations or an absent output schema.
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?
Wait — recalibrating: the payload is front-loaded with the tax/ROI content, which is correct, but the middle 'When to use' and trailing 'Returns: Structured JSON object containing status, matched records...' segments are template filler that would read the same on any tool in this server. Efficient in density, not perfectly trimmed. Score 4.
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 stateless calculator with zero required params and full schema coverage, the description covers what is computed, the assumptions baked into defaults, and the return shape. Missing but not critical: whether the calculation assumes a single tax year and what happens if an agent supplies only some of the optional inputs.
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 each property already documents its default (3 vehicles, 5.62 ZAR/km, 25000 km). The description only lists the parameter names with '(optional)' and adds no semantics — not even the default values or the vehicle-bracket assumption behind sars_rate_per_km. Baseline 3 is appropriate when the schema does all the work.
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 first sentence names a specific verb (calculate) and enumerates the exact outputs: 3-year SARS Section 8(1)(b) deduction, 27% corporate tax cash return, phantom fuel savings, and contract savings vs R399/mo legacy contracts. That is far more specific than any sibling (get_fuel_prices, get_sars_summary) and lets an agent identify it without opening 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?
It does provide a 'Do NOT use' block naming three siblings, which is more than most tools offer, but the routing condition is pure boilerplate ('when another specialized tool fits better') and the 'when to use' half is a tautology ('call this tool when you specifically need to execute calculate_fleet_sars_roi'). No concrete scenario distinguishes it from get_sars_summary or get_sars_compliance_guide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_fuel_pricesGet Fuel PricesARead-onlyIdempotentInspect
Get official South African regulated fuel prices (95 ULP, 93 ULP, 50ppm Diesel) from the Central Energy Fund (CEF), including next price adjustment date and projected change. When to use: Call this tool when you specifically need to execute 'get_fuel_prices' on CarWallet Vehicle Compliance (carwallet.co.za). Do NOT use this tool when another specialized tool fits better (use 'get_product_catalog' or 'calculate_fleet_sars_roi' or 'get_sars_compliance_guide' for their respective operations). Parameters: fuel_grade (optional), region (optional). Behavior & Side Effects: Strictly read-only, idempotent query with zero state mutation; public unauthenticated access allowed; rate-limited to 60 requests/min per IP. Returns: Structured JSON object containing status, matched records or computed metrics, and canonical action URLs.
| Name | Required | Description | Default |
|---|---|---|---|
| region | No | South African price zone (Inland or Coastal). [Optional: omit to use server default filter]. | |
| fuel_grade | No | Fuel grade to query (default: Petrol 95). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the repeated 'strictly read-only, idempotent' phrasing earns no extra credit. What does add value is the disclosure of public unauthenticated access and a concrete rate limit of 60 requests/min per IP, which an agent cannot get from structured fields.
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 purpose sentence is well front-loaded and information-dense, but the usage section is templated filler ('for their respective operations') and the return line ('matched records or computed metrics, and canonical action URLs') is generic boilerplate that does not fit a fuel-price lookup.
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?
This is a simple two-optional-parameter read tool with no output schema, and the description covers the resource, data source, and the extra fields returned. The return-format line is generic rather than specific to fuel prices, which is the only real gap.
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 optional parameters and their enums are already fully documented. The description adds only a restatement of the optional parameter names and an alternative naming of grades (ULP/50ppm) versus the schema's enum labels, which is marginal and slightly inconsistent with the enum values.
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 opening sentence names a specific verb and resource (official South African regulated fuel prices from the Central Energy Fund) and enumerates the exact grades plus the extra payload (next adjustment date, projected change). An agent can tell immediately that this is a market-data lookup and not a logging or compliance tool like list_fuel_logs or get_sars_summary.
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 'when to use' clause is tautological ('call this tool when you specifically need to execute get_fuel_prices'), offering no real condition. The exclusion clause lists siblings but gives no discriminating criteria, and it omits the genuinely confusable neighbour list_fuel_logs (logged fill-ups vs. official prices), so the agent still has to infer the choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_platform_metricsGet Platform MetricsARead-onlyIdempotentInspect
Inspect live CarWallet platform telemetry (registered drivers, vehicles, fuel logs, and SARS travel trips). When to use: Call this tool when you specifically need to execute 'get_platform_metrics' on CarWallet Vehicle Compliance (carwallet.co.za). Do NOT use this tool when another specialized tool fits better (use 'get_fuel_prices' or 'get_product_catalog' or 'calculate_fleet_sars_roi' for their respective operations). Parameters: none required (zero-argument query). Behavior & Side Effects: Strictly read-only, idempotent query with zero state mutation; public unauthenticated access allowed; rate-limited to 60 requests/min per IP. Returns: Structured JSON object containing status, matched records or computed metrics, and canonical action URLs.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint, so the description is not obligated to restate that the tool is safe to call. It does, however, add genuinely new context: public, unauthenticated access is allowed and the operation is rate-limited to 60 requests per minute per IP, both of which matter for retry and throttling decisions. Saying 'zero state mutation' and being read-only is redundant with the annotations, but the auth and rate-limit disclosures are real additions.
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 purpose statement is well front-loaded, but one full sentence is pure filler ('Call this tool when you specifically need to execute get_platform_metrics on CarWallet Vehicle Compliance') and adds nothing beyond the name. The labeled sections make the description scannable, but the tautological usage line should have been cut.
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-argument read-only tool, the description covers purpose, exclusions, auth, rate limits, and a summary of the return shape (status, matched records or metrics, action URLs), which compensates for the missing output schema. No critical information needed to call 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?
The tool has zero parameters and the description correctly states that it is a 'zero-argument query', so there is no param semantics to explain. A baseline of 4 is appropriate for a no-parameter tool.
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 uses the specific verb 'inspect' with the resource 'live CarWallet platform telemetry' and lists the data domains it covers (drivers, vehicles, fuel logs, SARS trips). It does not fully distinguish this tool from siblings such as get_sars_summary or list_vehicles, which return overlapping data. The purpose is still clear enough to understand without opening 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 description gives an explicit 'Do NOT use' section and names three alternative tools, which is more than most descriptions provide. However, the usage rule ('use get_fuel_prices or get_product_catalog for their respective operations') never states the actual condition that should route an agent to a sibling, and the positive guidance ('call this tool when you specifically need to execute get_platform_metrics') only restates the name and adds no detail. The guidance is therefore present but partly circular.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_product_catalogGet Product CatalogARead-onlyIdempotentInspect
Get CarWallet 4G OBD-II GPS Tracker hardware specs (Powered by Teltonika), Starter Bundle pricing (R1,809), Pro Telematics subscription (R110/month), Free App features, and direct checkout URL. When to use: Call this tool when you specifically need to execute 'get_product_catalog' on CarWallet Vehicle Compliance (carwallet.co.za). Do NOT use this tool when another specialized tool fits better (use 'get_fuel_prices' or 'calculate_fleet_sars_roi' or 'get_sars_compliance_guide' for their respective operations). Parameters: none required (zero-argument query). Behavior & Side Effects: Strictly read-only, idempotent query with zero state mutation; public unauthenticated access allowed; rate-limited to 60 requests/min per IP. Returns: Structured JSON object containing status, matched records or computed metrics, and canonical action URLs.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and openWorld, so the safety profile is covered. The description still adds real context the annotations do not: public unauthenticated access and a 60 requests/min per-IP rate limit, both operationally relevant for an agent deciding whether to retry or batch. It stops short of 5 only because the declared return contents are generic boilerplate.
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 useful payload is front-loaded, but the middle of the description is padding: the 'When to use' sentence is a tautology that restates the tool name, and the closing 'Returns: Structured JSON object containing status, matched records or computed metrics, and canonical action URLs' is generic boilerplate that applies to nearly any sibling. Roughly half the text does not earn 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 zero-argument, read-only catalog tool with no output schema, the definition supplies what an agent needs: what content comes back, that no auth or arguments are required, and the rate limit. Return-value detail is intentionally generic but the catalog topics are enumerated, so nothing critical 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?
There are zero parameters, so the baseline is 4. The description correctly reinforces this with 'none required (zero-argument query)', making it unambiguous that no arguments should be fabricated. Nothing further is needed for an empty 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 first sentence names the concrete payload: hardware specs for a Teltonika-based 4G OBD-II tracker, Starter Bundle price, Pro subscription rate, app features, and checkout URL. That is a specific verb+resource and lets an agent tell it apart from the fuel-price and SARS-compliance siblings. It falls short of 5 because the payload is described as a marketing/content bundle rather than a crisp data contract.
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 description does name three sibling tools to use instead (get_fuel_prices, calculate_fleet_sars_roi, get_sars_compliance_guide), which is genuinely useful routing. But the positive guidance is circular: 'use this tool when you specifically need to execute get_product_catalog' tells the agent nothing about the triggering condition. Exclusions are present, inclusion criteria are effectively absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sars_compliance_guideGet Sars Compliance GuideARead-onlyIdempotentInspect
Get authoritative South African SARS Section 8(1)(b) travel logbook rules, Tax Administration Act Section 29 5-year retention requirements, mandatory logbook fields, and thermal receipt rules. When to use: Call this tool when you specifically need to execute 'get_sars_compliance_guide' on CarWallet Vehicle Compliance (carwallet.co.za). Do NOT use this tool when another specialized tool fits better (use 'get_fuel_prices' or 'get_product_catalog' or 'calculate_fleet_sars_roi' for their respective operations). Parameters: none required (zero-argument query). Behavior & Side Effects: Strictly read-only, idempotent query with zero state mutation; public unauthenticated access allowed; rate-limited to 60 requests/min per IP. Returns: Structured JSON object containing status, matched records or computed metrics, and canonical action URLs.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes meaningfully beyond the annotations by disclosing public unauthenticated access and a rate limit of 60 requests/min per IP, neither of which appears in structured fields. It also states zero state mutation, which duplicates readOnlyHint/idempotentHint/destructiveHint rather than adding to them. The extra auth and throttling context is the real value here.
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 content sentence is front-loaded and dense with real information, but the middle is padded: 'Call this tool when you specifically need to execute get_sars_compliance_guide on CarWallet Vehicle Compliance' restates the name and adds nothing. The labeled headers (When to use / Parameters / Behavior / Returns) aid scanning but also inflate length for a zero-argument read.
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 burden of describing returns, and it does so adequately (status, matched records or computed metrics, canonical action URLs). Auth model, rate limits, and content scope are all covered. Minor gap: no indication of response size or whether the guide content is paginated or static, which matters for a rules-documentation endpoint.
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?
Zero-parameter tool, so the baseline is 4. The description correctly and explicitly states 'Parameters: none required (zero-argument query)', which reassures the agent it can invoke without constructing an input object. No further parameter meaning is possible.
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 opening sentence names a specific resource and enumerates the exact content returned: SARS Section 8(1)(b) logbook rules, TAA Section 29 five-year retention, mandatory logbook fields, and thermal receipt rules. That is far more specific than the title. It stops short of 5 because it never explicitly differentiates itself from the closest sibling, get_sars_summary, which an agent could easily confuse with a compliance-rules lookup.
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?
It names alternatives (get_fuel_prices, get_product_catalog, calculate_fleet_sars_roi), but the routing signal is boilerplate — 'for their respective operations' tells the agent nothing about which conditions select which tool. Critically, it does not mention get_sars_summary or list_sars_trips, the siblings most likely to be confused with a SARS-rules query. Usage is implied rather than delineated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sars_summaryGet Sars SummaryARead-onlyIdempotentInspect
Calculate official SARS travel allowance tax pack totals for a vehicle across the South African tax year (1 March to 28/29 February), returning total km, business km, business %, and total fuel expenditure. When to use: Call this tool when you specifically need to execute 'get_sars_summary' on CarWallet Vehicle Compliance (carwallet.co.za). Do NOT use this tool when another specialized tool fits better (use 'get_fuel_prices' or 'get_product_catalog' or 'calculate_fleet_sars_roi' for their respective operations). Parameters: vehicle_id (required), tax_year (optional). Behavior & Side Effects: Strictly read-only, idempotent query with zero state mutation; public unauthenticated access allowed; rate-limited to 60 requests/min per IP. Returns: Structured JSON object containing status, matched records or computed metrics, and canonical action URLs.
| Name | Required | Description | Default |
|---|---|---|---|
| tax_year | No | Tax year starting year (e.g. 2026 for the 2026/2027 tax year starting 1 March 2026). [Optional: omit to use server default filter]. | |
| vehicle_id | Yes | ID of the vehicle to calculate SARS Section 8(1)(b) totals for. [Required: non-empty valid value must be supplied]. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent and non-destructive, but the description adds material facts beyond them: public unauthenticated access and a 60 requests/min per-IP rate limit. It also restates zero state mutation, which is redundant with the annotations but harmless.
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?
It is front-loaded with the useful purpose sentence, but the middle section wastes space on a self-referential usage sentence and irrelevant alternative tools. The trailing 'Returns: Structured JSON object containing status, matched records or computed metrics, and canonical action URLs' is generic template text that adds little.
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 read-only query this covers what matters: what is computed, the tax-year window, access and rate limits, and the shape of the result. No output schema exists, yet the return description is only a generic template rather than naming the actual summary fields, a small remaining gap.
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 explains both parameters including the tax_year starting-year convention. The description only echoes required/optional status and adds no syntax or edge-case detail, which is the expected baseline when the schema does the heavy lifting.
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 first sentence states a specific verb (Calculate), resource (SARS travel allowance tax pack totals for a vehicle), and scope (South African tax year 1 March – 28/29 Feb), and lists the returned metrics. It implicitly distinguishes the vehicle-level calculation from calculate_fleet_sars_roi, though that contrast is never spelled out.
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 a 'When to use' line and a 'Do NOT use' line naming alternatives, but the when-to-use clause is circular boilerplate ('when you specifically need to execute get_sars_summary') and the exclusions point to unrelated tools (get_fuel_prices, get_product_catalog) rather than the genuinely confusable sibling calculate_fleet_sars_roi.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_service_recordsGet Service RecordsBRead-onlyIdempotentInspect
Retrieve vehicle maintenance and service history records, including service dates, odometers, service types, costs, and service center names. When to use: Call this tool when you specifically need to execute 'get_service_records' on CarWallet Vehicle Compliance (carwallet.co.za). Do NOT use this tool when another specialized tool fits better (use 'get_fuel_prices' or 'get_product_catalog' or 'calculate_fleet_sars_roi' for their respective operations). Parameters: vehicle_id (optional). Behavior & Side Effects: Strictly read-only, idempotent query with zero state mutation; public unauthenticated access allowed; rate-limited to 60 requests/min per IP. Returns: Structured JSON object containing status, matched records or computed metrics, and canonical action URLs.
| Name | Required | Description | Default |
|---|---|---|---|
| vehicle_id | No | Optional vehicle ID to filter service records. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is covered. The description does add real value beyond them by disclosing public unauthenticated access and a rate limit of 60 requests/min per IP, but the return note ('status, matched records or computed metrics, and canonical action URLs') is boilerplate that says little about actual record shape or volume.
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 opening sentence is well front-loaded and the auth/rate-limit detail earns its place. But the circular 'When to use' sentence and the generic Returns sentence consume roughly half the text without adding information, diluting an otherwise tight definition.
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?
Auth posture, rate limits and read-only behavior are covered, which is good for a single-parameter tool. The two gaps that matter for correct invocation—default behavior when vehicle_id is absent and whether results are paginated or capped—are unaddressed and no output schema exists to fill them.
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% on the single optional vehicle_id, so the schema already carries the semantics. The description only restates 'Parameters: vehicle_id (optional)' and, critically, never says what happens when it is omitted (all vehicles' records?), which would be the one piece of meaning the schema cannot supply.
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 first sentence names a specific verb and resource ('Retrieve vehicle maintenance and service history records') and enumerates the returned fields, so an agent knows exactly what it gets. However, it does no real differentiation from the closest sibling (list_vehicles), which also deals with vehicle identity, and the alternative tools named are unrelated domains.
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 'When to use' clause is circular: 'Call this tool when you specifically need to execute get_service_records' tells the agent nothing. The exclusion list names get_fuel_prices, get_product_catalog and calculate_fleet_sars_roi, which are obviously different operations, instead of addressing the genuinely ambiguous case of get_service_records vs list_vehicles or list_fuel_logs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_fuel_logsList Fuel LogsARead-onlyIdempotentInspect
Retrieve recent fuel fill-up records for the user's vehicles, including litres pumped, fuel grade, price per litre, total ZAR cost, station name, logged date, and calculated L/100km fuel economy. When to use: Call this tool when you specifically need to execute 'list_fuel_logs' on CarWallet Vehicle Compliance (carwallet.co.za). Do NOT use this tool when another specialized tool fits better (use 'get_fuel_prices' or 'get_product_catalog' or 'calculate_fleet_sars_roi' for their respective operations). Parameters: vehicle_id (optional), limit (optional), search (optional). Behavior & Side Effects: Strictly read-only, idempotent query with zero state mutation; public unauthenticated access allowed; rate-limited to 60 requests/min per IP. Returns: Structured JSON object containing status, matched records or computed metrics, and canonical action URLs.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of fuel logs to return (default 25, max 100). | |
| search | No | Optional search keyword for station name or notes. | |
| vehicle_id | No | Optional ID of a specific vehicle to filter fuel logs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered; the description still adds genuinely new context: public unauthenticated access and a 60 req/min per-IP rate limit. It also sketches the return shape, though only generically.
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 field enumeration and behavior notes are front-loaded and useful, but the 'When to use' sentence and the 'Returns' sentence are generic template filler that could be trimmed. Roughly half the text 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?
With no output schema, the description does note a structured JSON return and covers access and rate-limit constraints, which is enough for a simple read-only filtered list. The only gap is the generic return description and lack of pagination behavior for the limit parameter.
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 each parameter is already documented there with defaults and max values. The description merely lists the parameter names without adding format, interaction, or filtering semantics, 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 and resource ('Retrieve recent fuel fill-up records for the user's vehicles') and enumerates the returned data fields (litres, grade, price/L, total ZAR, station, date, L/100km). This is clearly distinguishable from siblings like get_fuel_prices or get_service_records.
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?
It names alternatives ('get_fuel_prices', 'get_product_catalog', 'calculate_fleet_sars_roi'), but the 'When to use' clause is circular boilerplate ('call this tool when you specifically need to execute list_fuel_logs') and gives no condition that selects it over those siblings. The guidance exists in form but not in discriminating substance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_sars_tripsList Sars TripsARead-onlyIdempotentInspect
Retrieve SARS Section 8(1)(b) compliant business and private travel logs, including trip date, starting odometer, ending odometer, distance in km, destination, and specific business purpose. When to use: Call this tool when you specifically need to execute 'list_sars_trips' on CarWallet Vehicle Compliance (carwallet.co.za). Do NOT use this tool when another specialized tool fits better (use 'get_fuel_prices' or 'get_product_catalog' or 'calculate_fleet_sars_roi' for their respective operations). Parameters: vehicle_id (optional), is_business (optional), limit (optional). Behavior & Side Effects: Strictly read-only, idempotent query with zero state mutation; public unauthenticated access allowed; rate-limited to 60 requests/min per IP. Returns: Structured JSON object containing status, matched records or computed metrics, and canonical action URLs.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of trips to return (default 50, max 200). | |
| vehicle_id | No | Optional ID of a specific vehicle to filter trips. | |
| is_business | No | Filter by business travel (true) or private travel (false). Omit to return both. [Optional: omit to use server default filter]. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and open-world, so the safety profile is covered; the description still adds real value with the 60 req/min per-IP rate limit and the fact that access is public and unauthenticated. It also confirms zero state mutation, reinforcing the annotations rather than contradicting them, and sketches the 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?
The purpose and field list are front-loaded and earn their place, but the middle section is boilerplate: the 'when to use' sentence restates the tool name and the 'Returns' sentence is generic template text ('status, matched records or computed metrics') that could apply to any tool in the server.
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 only three optional filter parameters, the definition covers enough: what is returned, that it is read-only, access and rate-limit constraints. The only real gap is the lack of differentiation from domain-adjacent siblings, which an agent would need to choose confidently.
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 defaults (50, max 200), the vehicle filter and the business/private tri-state are already fully documented in the schema. The description only restates that the three parameters are optional, adding no semantics beyond the structured fields, which matches the baseline for complete schemas.
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 opening sentence names a specific verb (retrieve) plus a well-defined resource (SARS Section 8(1)(b) travel logs) and enumerates the exact fields returned, so an agent knows precisely what data comes back. It stops short of distinguishing itself from near-neighbors like get_sars_summary or list_fuel_logs, which overlap in domain.
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 an explicit 'when to use' clause, but it is tautological ('call when you need to execute list_sars_trips'), and the alternatives it points to (get_fuel_prices, get_product_catalog, calculate_fleet_sars_roi) are clearly unrelated operations rather than genuine substitutes. No guidance is offered for the ambiguous case of list_sars_trips vs get_sars_summary or list_fuel_logs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_vehiclesList VehiclesARead-onlyIdempotentInspect
List all vehicles registered in the authenticated user's CarWallet garage, including make, model, year, license plate, current odometer, fuel type, and tank capacity. When to use: Call this tool when you specifically need to execute 'list_vehicles' on CarWallet Vehicle Compliance (carwallet.co.za). Do NOT use this tool when another specialized tool fits better (use 'get_fuel_prices' or 'get_product_catalog' or 'calculate_fleet_sars_roi' for their respective operations). Parameters: none required (zero-argument query). Behavior & Side Effects: Strictly read-only, idempotent query with zero state mutation; public unauthenticated access allowed; rate-limited to 60 requests/min per IP. Returns: Structured JSON object containing status, matched records or computed metrics, and canonical action URLs.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations' readOnly/idempotent/destructive flags, the description adds information the agent cannot get elsewhere: public unauthenticated access is allowed and the endpoint is rate-limited to 60 requests/min per IP. With no output schema, the Returns line also gives the response shape. These are exactly the behavioral traits annotations don't cover.
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?
This is not the right score — see correction in summary. The description is front-loaded well, but the circular 'execute list_vehicles' sentence and the generic 'computed metrics or canonical action URLs' return boilerplate are waste on a pure list endpoint.
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-argument, read-only list tool with no output schema, the description supplies fields returned, auth posture, and rate limits — enough to call it correctly. The only weakness is template drift in the Returns line ('computed metrics'), which does not apply to a record-listing operation.
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?
The tool takes zero parameters and the description confirms this explicitly ('Parameters: none required (zero-argument query)'), matching the empty schema with no ambiguity. Baseline for a no-param tool is 4; there is nothing further to explain.
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 opening sentence names a specific verb+resource and enumerates the returned fields (make, model, year, plate, odometer, fuel type, tank capacity), which is enough to separate it from mutation or aggregate siblings. However it never distinguishes itself from the closest siblings (get_service_records, list_fuel_logs, list_sars_trips), so it falls short of full sibling differentiation.
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 a 'When to use' section, but its operative clause is circular: 'call this tool when you specifically need to execute list_vehicles'. The exclusion clause names get_fuel_prices, get_product_catalog and calculate_fleet_sars_roi, none of which overlap with listing vehicles, while the genuinely adjacent tools (get_service_records, list_fuel_logs) go unmentioned, so the guidance is implied rather than actionable.
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.
3 tool updates
- Changed
get_fuel_prices1 field changed- changed
Input schema / properties / region / descriptionPrevious value: -"South African price zone (Inland or Coastal)."New value: +"South African price zone (Inland or Coastal). [Optional: omit to use server default filter]."
- Changed
get_sars_summary2 fields changed- changed
Input schema / properties / tax_year / descriptionPrevious value: -"Tax year starting year (e.g. 2026 for the 2026/2027 tax year starting 1 March 2026)."New value: +"Tax year starting year (e.g. 2026 for the 2026/2027 tax year starting 1 March 2026). [Optional: omit to use server default filter]." - changed
Input schema / properties / vehicle_id / descriptionPrevious value: -"ID of the vehicle to calculate SARS Section 8(1)(b) totals for."New value: +"ID of the vehicle to calculate SARS Section 8(1)(b) totals for. [Required: non-empty valid value must be supplied]."
- Changed
list_sars_trips1 field changed- changed
Input schema / properties / is_business / descriptionPrevious value: -"Filter by business travel (true) or private travel (false). Omit to return both."New value: +"Filter by business travel (true) or private travel (false). Omit to return both. [Optional: omit to use server default filter]."
10 tool updates
- First observed
calculate_fleet_sars_roi - First observed
get_fuel_prices - First observed
get_platform_metrics - First observed
get_product_catalog - First observed
get_sars_compliance_guide - First observed
get_sars_summary - First observed
get_service_records - First observed
list_fuel_logs - First observed
list_sars_trips - First observed
list_vehicles
Related MCP Connectors
UK tolls & charges: DVLA vehicle checks (ULEZ/CAZ/MOT/tax), prices, penalties, pay-by deadlines.
South African business days, public holidays and SARS EMP201/VAT201 deadlines.
Look up a vehicle by license plate against official sources (make/model, year, status, restrictions)
UK used cars: road tax (VED), ULEZ charges, MOT dates, DVSA reliability, live dealer stock.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables calculation of vehicle registration, title, and out-the-door fees, state-specific fee lookups, and VIN validation.MIT
- AlicenseNot gradedqualityCmaintenanceEnables users to query vehicle debts from the official SEFAZ RS system, offering a single read-only tool to fetch debt information for vehicles registered in Rio Grande do Sul.MIT
- AlicenseNot gradedqualityCmaintenanceEnables users to query public Brazilian vehicle and traffic data from official sources, including vehicle debts (IPVA, licensing, open fines), federal infractions by plate/RENAVAM, vehicles registered to an owner, and driver's license status.MIT
- AlicenseNot gradedqualityDmaintenanceEnables UK haulage compliance checks including operator licence verification, tachograph auditing, drivers' hours calculations, and DVSA roadside inspection support.42 PyPIMIT
Glama MCP Gateway
Add one secure layer between your agents and this server.