cox-automotive-mcp
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., "@cox-automotive-mcpList all vehicles under $25,000 in dealer 1042's inventory."
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.
cox-automotive-mcp
First MCP server for the auto-dealership vertical. Lets Claude, Cursor, or any MCP client read dealer accounts, look up manufacturer incentives, and manage inventory listings through the Cox Automotive / Dealer Developer Portal API.
Cox Automotive is the umbrella for the auto-dealership ecosystem — Dealer.com (websites + digital marketing), vAuto (inventory + pricing), Dealertrack (DMS + financing), VinSolutions (CRM), and more. This MCP covers the publicly-documented Dealer Developer Portal API surface (Accounts, Incentives, Inventory). Other Cox brands expose additional partner-gated APIs that will be added as their surfaces become publicly documented.
Why this exists
17,000+ US auto dealerships depend on Cox Automotive for daily operations. There's no MCP for the vertical. Existing AI tooling targets generic CRMs (HubSpot, Salesforce) that dealers don't run. This is the first.
Related MCP server: pipedriver
12 tools
Tool | What it does |
| Verify |
| Paginated list of dealer accounts the API key can access. |
| Flat list of all accounts (auto-paginates). |
| One dealer account by id. |
| Paginated incentives (rebates, finance offers) for an account. |
| One incentive by id within an account. |
| Filter incentives by vehicle make/model/year. |
| Paginated vehicles in a dealer's inventory. |
| Flat list of all inventory vehicles (auto-paginates). |
| One vehicle listing by id. |
| Add a vehicle to inventory. |
| Update fields on a vehicle (price, mileage, photos, status). |
| Remove a vehicle from inventory. |
| Filter inventory by make/model/year/price range. |
Install
pip install cox-automotive-mcpOr from source:
git clone https://github.com/sanjibani/cox-automotive-mcp
cd cox-automotive-mcp
pip install -e ".[dev]"Configure
export COX_AUTO_API_KEY=<your-dealer-developer-portal-api-key>Get your API key by registering at https://developer.inv.dealer.com (My Account → Register). Cox Automotive's Mashery-backed API uses header-based API keys.
Optional overrides:
COX_AUTO_BASE_URL— change the API base (sandbox, regional)COX_AUTO_AUDIT_LOG— JSONL audit log file path (defaults to stderr)
Run
cox_automotive_mcpAdd to your MCP client config (Claude Desktop, Cursor, etc.):
{
"mcpServers": {
"cox-automotive": {
"command": "cox_automotive_mcp",
"env": {
"COX_AUTO_API_KEY": "your-key-here"
}
}
}
}Example prompts
Once connected to your MCP client:
"Show me every dealer account this API key has access to."
"What Honda Civic 2024 incentives are available for dealer 1042?"
"List all vehicles under $25,000 in dealer 1042's inventory."
"Add this 2023 Toyota Camry I just took in: VIN 4T1B11HK5KU123456, 18,500 miles, asking $24,995, stock number P1042-12."
"Vehicle 9001 just had new photos taken — update the photo URL to https://cdn.example.com/9001-v2.jpg."
"Vehicle 9017 sold. Remove it from inventory."
Architecture
Built on the mcp-vertical-template industry-leading patterns:
Shared
httpx.AsyncClientwith connection pooling (100 max, 20 keepalive) + transport-level retriesTyped exception hierarchy (
CoxAutomotiveAuthError,RateLimitError,NotFoundError,APIError,ConnectionError) with structured fields (http_status,error_code,request_id,retry_after,body)Application-level retry with exponential backoff + full jitter, honoring
Retry-AfterAuto-paginating iterators (
iter_accounts,iter_inventory,iter_incentives) that walk thepage/pageSizecursor without caller mathisError-compliance — every MCP tool raises on failure so FastMCP sets
isError: trueon the wire (Blackwell Systems audit pattern; agents can't retry indefinitely on errors they can't see)JSONL audit logging to stderr (or
COX_AUTO_AUDIT_LOGfile) — SOC2 baseline for B2B procurementProperty-based tests (Hypothesis) for JSON round-trips
Strict mypy + full ruff rule set + pytest with respx HTTP mocking
Development
git clone https://github.com/sanjibani/cox-automotive-mcp
cd cox-automotive-mcp
pip install -e ".[dev]"
pytest # unit + integration mocks
ruff check src tests # lint
ruff format --check src tests # format
mypy src # strict type-checkTest coverage is enforced at 80% via pytest --cov.
Related MCPs
This is part of a portfolio of vertical MCP servers from the same author. See https://github.com/sanjibani?q=-mcp for the full list, including legal (PracticePanther), insurance (HawkSoft), dental (Open Dental), veterinary (ezyVet), home service (Jobber), church / nonprofit (Realm ACS), and the shared scaffolding template.
For custom MCP server engagements, see https://sanjibani.github.io/mcp-services/.
License
MIT — Sanjibani Choudhury schoudhury1991@gmail.com
Available Tools
14 toolscreate_vehicleA
Add a new vehicle to a dealer's inventory.
Use when: "I just took in a 2023 Toyota Camry — add it to dealer 1042's lot." Example: account_id=1042, vin="1HGCM82633A123456", make="Honda", model="Civic", year=2024, mileage=12500, price=24995, stock_number="P1042-7" → creates the listing and returns the new vehicle record.
| Name | Required | Description | Default |
|---|---|---|---|
| vin | Yes | ||
| make | Yes | ||
| year | Yes | ||
| model | Yes | ||
| price | Yes | ||
| mileage | Yes | ||
| account_id | Yes | ||
| stock_number | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description mentions it creates and returns the new vehicle record, but does not disclose side effects, idempotency, or rate limits.
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-line purpose and use-condition followed by an example. No superfluous text; information is front-loaded.
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?
Covers the core functionality with an example. Output schema exists so return details are not necessary. Missing explanation of optional parameter stock_number.
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 has 0% description coverage. The example maps all required parameters to values, clarifying their meaning. Optional stock_number is included but not explained.
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?
Clearly states 'Add a new vehicle to a dealer's inventory.' Differentiates from siblings like delete_vehicle and update_vehicle.
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?
Provides a specific use case ('Use when: I just took in a 2023 Toyota Camry...') and a complete example. Does not mention when not to use or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_vehicleA
Remove a vehicle from inventory.
Use when: "vehicle 9001 sold, remove it." Example: vehicle_id=9001 → {"status": "deleted", "vehicleId": 9001}.
| Name | Required | Description | Default |
|---|---|---|---|
| vehicle_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must cover behavior. It states the tool removes a vehicle and shows the output format. However, it lacks details on whether deletion is permanent, any prerequisites, or side effects. Adequate but not rich.
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?
Extremely concise: purpose statement, usage scenario, and example. No fluff. Each sentence 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 simple delete operation with an output schema, the description covers purpose, usage, example, and response. Lacks error handling or prerequisite info, but sufficient given tool simplicity.
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 has 0% description coverage, but the description adds meaning by showing vehicle_id used in example and the response. Clearly indicates the parameter identifies the vehicle to delete.
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?
Clearly states 'Remove a vehicle from inventory' with a specific verb and resource. Distinguishes from sibling tools like create_vehicle, get_vehicle, update_vehicle by focusing on deletion.
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?
Provides a concrete 'Use when' example (vehicle sold, remove it) and an example call. Does not explicitly list when not to use or alternatives, but the example gives clear guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_accountA
Fetch one dealer account by id.
Use when: "what's the phone number for dealer 1042?" or "show me account 1042". Example: account_id=1042 returns account record with name, dealerCode, phone, etc.
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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 that the tool returns an account record with fields like name, dealerCode, phone, etc. However, it does not disclose error behavior (e.g., what happens if account_id does not exist), permissions, or any side effects. For a read operation, basic safety is implied but not explicit.
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?
Three sentences, all essential. The first states purpose, the second provides usage context, the third gives an example. No fluff, front-loaded. Ideal conciseness.
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?
Given the tool's simplicity (one parameter, straightforward fetch) and the existence of an output schema (not shown), the description covers the main aspects. It could mention error handling or missing account cases, but for a basic lookup, it is largely sufficient.
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 input schema has one required integer parameter, account_id. The description adds an example 'account_id=1042 returns account record', which provides context on how the parameter is used. However, schema description coverage is 0%, meaning the schema itself has no descriptions; the description compensates partially but does not detail constraints or valid ranges.
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 clearly states 'Fetch one dealer account by id.' It uses a specific verb (fetch), identifies the resource (dealer account), and specifies the method (by id). This distinguishes it from sibling tools like list_accounts and iter_accounts.
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 includes explicit use cases: 'Use when: "what's the phone number for dealer 1042?" or "show me account 1042".' It also provides an example with input and output. It does not explicitly state when not to use, but the singular retrieval context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_incentiveA
Fetch one incentive by id within a dealer's account.
Use when: "what's the full text of incentive 5821 for dealer 1042?" Example: account_id=1042, incentive_id=5821 → full incentive detail.
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes | ||
| incentive_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It states 'fetch' implying a read operation and mentions 'full incentive detail,' but lacks details on error handling, authentication, or rate limits.
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 extremely concise with three lines: a clear purpose, a 'Use when' guide, and an example. No superfluous content.
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 get-by-id tool with two integer parameters and an output schema, the description covers purpose and usage context. It lacks output format details but the output schema likely covers that.
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 0%. The description only provides example values (account_id=1042, incentive_id=5821) without explaining the meaning or constraints beyond the schema titles, which are clear but insufficient.
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 clearly states 'Fetch one incentive by id within a dealer's account,' providing a specific verb and resource. It differentiates from sibling tools like list_incentives (list) and search_incentives (search).
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?
Explicitly includes a 'Use when' section with an example question and a concrete example with account_id and incentive_id, indicating the specific scenario for this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_vehicleA
Fetch one vehicle listing by id.
Use when: "show me full details on vehicle 9001." Example: vehicle_id=9001 → full vehicle record.
| Name | Required | Description | Default |
|---|---|---|---|
| vehicle_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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 only states it fetches a vehicle by id and returns a full record, but does not disclose error handling, permissions, or rate limits. Minimal behavioral context.
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 extremely concise: two short lines plus an example. No redundant words, front-loaded with the core purpose.
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 fetch-by-id tool with output schema, the description covers the essential: what it does, when to use, and an example. Complete for its complexity.
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 0% schema description coverage, the description adds value by giving an example (vehicle_id=9001) and stating it returns a full vehicle record. This clarifies the single parameter's role 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 clearly states 'Fetch one vehicle listing by id', specifying the verb (fetch), resource (vehicle listing), and scope (by id). This distinguishes it from siblings like list_inventory or create_vehicle.
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 provides explicit guidance on when to use the tool ('show me full details on vehicle 9001') with a concrete example. It does not exclude alternatives but the context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
health_checkA
Verify credentials work. If this fails, all other tools will too.
Use when: starting a session or troubleshooting auth errors. Example: call first, expect {"status": "ok"} — if not, re-check COX_AUTO_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description carries the full burden. It discloses that a failure indicates credentials are invalid and that all other tools will also fail. This is critical behavioral context beyond a simple 'check'.
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?
Three sentences with no wasted words. The main point is front-loaded: 'Verify credentials work.' Then gives usage guidelines and an example. Every sentence adds value.
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 health check tool, the description is complete. It explains purpose, usage, expected output, and consequence of failure. Output schema is present, so no need to describe return format.
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 adds meaning by explaining that the tool requires no inputs and simply returns a status. This provides context beyond the 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?
Description clearly states the purpose: verifying credentials work. The verb 'verify' and resource 'credentials' are specific. It distinguishes health_check from sibling tools like create_vehicle or list_inventory, which perform other actions.
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?
Explicit guidance on when to use: 'starting a session or troubleshooting auth errors.' Also provides an example call and expected output, plus what to do if it fails. No mention of when not to use, but the affirmative guidance is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
iter_accountsA
Yield dealer accounts across all pages as a flat JSON array.
Use when: "give me every dealer account this key has access to" (no pagination math). Example: returns [{"accountId": 1001, "name": "Smith Honda", ...}, ...].
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
While the description indicates a read operation and provides an example, it does not explicitly state that the tool is read-only or disclose any behavioral traits such as rate limits or auth requirements, which is a gap given no annotations.
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 concise sentences with front-loaded purpose, no wasted words.
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 tool with zero parameters and an output schema, the description provides sufficient context with an example and covers the essential behavior.
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?
No parameters exist, so baseline score of 4 applies; the description adds context about the output being a flat array but does not add parameter-specific meaning 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?
Description clearly states the tool yields dealer accounts across all pages as a flat JSON array, distinguishing it from list_accounts which may return paginated results.
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?
Explicitly says 'Use when: "give me every dealer account this key has access to" (no pagination math)', providing clear guidance on when to use and implying alternative for paginated access.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
iter_inventoryA
Yield all inventory vehicles for a dealer account as a flat JSON array.
Use when: "every vehicle on the lot" without pagination math. Example: account_id=1042 → [{"vehicleId": 9001, "vin": "...", ...}, ...].
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full responsibility. It discloses that the tool returns a flat JSON array with all vehicles, but does not mention error handling, performance implications for large datasets, or behavior when account_id is invalid. Minimal disclosure beyond the basic return structure.
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 extremely concise: one sentence for purpose, one for usage guidance, and one example. Every word serves a purpose with no redundancy. Structure is clean and front-loaded.
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?
Given the tool's simplicity (one parameter, no nesting, existing output schema), the description covers purpose, usage, and provides an example. It lacks details on error handling or edge cases, but for a straightforward listing tool, it is largely 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 0%, so the description must compensate. It only provides an example (account_id=1042) without explaining what account_id represents beyond 'dealer account.' No format, range, or semantics are given, leaving interpretation to the schema's minimal title 'Account Id.'
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 clearly states 'Yield all inventory vehicles for a dealer account as a flat JSON array,' specifying the action (yield), resource (inventory vehicles), and scope (all, no pagination). It also distinguishes from siblings like list_inventory by explicitly mentioning 'without pagination math.'
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 includes a direct 'Use when' guideline: 'every vehicle on the lot' without pagination math, which clearly indicates when this tool is appropriate. It implicitly distinguishes from paginated alternatives (e.g., list_inventory) by focusing on complete retrieval.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_accountsA
List dealer accounts the API key can access (paginated).
Use when: "show me my dealer accounts" or "what stores does this API key cover?" Example: page=1, page_size=50 → returns one page of accounts with envelope metadata. For the flat list, see iter_accounts.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| page_size | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description covers key behaviors: pagination, example usage, and mentions that results include 'envelope metadata'. It implies read-only access scoped to API key. Could specify permissions or side effects but adequate.
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?
Three sentences with no waste: purpose, usage, example, alternative. Front-loaded and 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?
Output schema exists, so less burden. Description mentions envelope metadata, and example clarifies pagination. Lacks discussion of sorting or filtering, but sufficient for a simple paginated list.
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 0% so description must compensate. It provides an example showing page and page_size usage, but does not explain defaults or valid ranges. Adds some value but not full compensation.
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 clearly states 'List dealer accounts the API key can access (paginated)', specifying the verb, resource, and scope. It distinguishes from the sibling 'iter_accounts' which provides a flat list.
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?
Explicitly states when to use: 'show me my dealer accounts' or 'what stores does this API key cover?', and provides an alternative: 'For the flat list, see iter_accounts'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_incentivesA
List incentives (rebates, finance offers) for a dealer account.
Use when: "what rebates are available for dealer 1042 this month?" Example: account_id=1042, page=1 → first page of incentives with envelope.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| page_size | No | ||
| account_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses pagination behavior (page, page_size) and mentions the return format ('first page of incentives with envelope'). Without annotations, this provides adequate transparency for a read-only list tool.
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 extremely concise: two sentences and an example. Every part adds value, and the key information is front-loaded.
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?
Given the simple parameters and existence of an output schema, the description covers the core functionality. It could mention the envelope structure briefly, but the example implies 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?
The description explains the purpose of account_id via context ('for a dealer account') and provides an example with page. However, with 0% schema coverage, it does not fully document all parameters (e.g., page_size is only shown with default).
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 clearly specifies the action (list), the resource (incentives, including rebates and finance offers), and the scope (for a dealer account). It distinguishes itself from sibling tools like get_incentive and search_incentives.
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 provides a concrete use case ('what rebates are available for dealer 1042 this month?') and an example with parameters. It implicitly shows when to use, though it does not explicitly state when not to use or mention alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_inventoryA
List vehicles in a dealer's inventory (paginated).
Use when: "what's on the lot at dealer 1042?" Example: account_id=1042, page=1, page_size=50 → first 50 vehicles.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| page_size | No | ||
| account_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must cover behavior. It mentions pagination and provides an example with page and page_size, but does not explain ordering, error handling, or authentication needs. This is minimal but adequate for a simple list operation.
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 concise with two sentences plus a concrete example. Every element adds value without unnecessary 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?
Given the presence of an output schema and the simplicity of the tool (3 parameters, no nested objects), the description covers the essential usage context. It misses minor behavioral details but is mostly 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?
The input schema has 0% description coverage, but the description adds meaning via an example that shows account_id=1042 and default page and page_size. It provides context beyond the bare schema, though it does not explain each parameter in detail.
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 clearly states the action (List), resource (vehicles in inventory), and scope (paginated). It provides an example usage, distinguishing it from siblings like search_inventory or iter_inventory.
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 a clear context with an example query ("what's on the lot at dealer 1042?") but does not explicitly mention when not to use or alternative tools. However, it sufficiently guides the agent on when to invoke.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_incentivesA
Search incentives by vehicle make/model/year for a dealer account.
Use when: "what Honda Civic 2024 incentives are available for dealer 1042?" Example: account_id=1042, make="Honda", model="Civic", year=2024 → flat list of matching incentives.
| Name | Required | Description | Default |
|---|---|---|---|
| make | No | ||
| year | No | ||
| model | No | ||
| account_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden for behavioral disclosure. It merely states it returns a flat list. It does not mention that the tool is read-only, any required permissions, rate limits, or data freshness. As a search tool, it is likely non-destructive, but the description fails to confirm this.
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 remarkably concise: two sentences and an example. Every word is useful, no redundancy. The example is well-structured and immediately understandable.
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?
Given the tool's low complexity and the presence of an output schema, the description is largely complete. It covers the core functionality and provides a clear example. Minor gaps: what happens when no filters are applied (returns all incentives for account) is only implied, not stated.
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 0%, but the description adds meaning through the example, clarifying that make, model, and year are optional filters and account_id is the required dealer identifier. This compensates for the lack of schema descriptions.
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?
Description clearly states 'Search incentives by vehicle make/model/year for a dealer account.' It uses a specific verb and resource, and the example distinguishes it from sibling tools like list_incentives by focusing on filtered search.
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 provides an explicit usage scenario ('what Honda Civic 2024 incentives are available for dealer 1042?') and a concrete example. However, it does not explicitly state when NOT to use this tool (e.g., when a full list is needed) or directly name alternative tools, though the sibling list_incentives is implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_inventoryA
Search a dealer's inventory by make/model/year/price range.
Use when: "show me used Honda Civics under $25k at dealer 1042." Example: account_id=1042, make="Honda", model="Civic", max_price=25000 → flat list of matching vehicles.
| Name | Required | Description | Default |
|---|---|---|---|
| make | No | ||
| year | No | ||
| model | No | ||
| max_price | No | ||
| min_price | No | ||
| account_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries full burden. It states returns a 'flat list of matching vehicles' but does not mention pagination, limits, side effects, or error conditions. More behavioral detail is needed for a tool with no annotations.
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 two sentences plus an example—minimal yet complete. It front-loads the purpose and uses efficient structure without superfluous words.
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 output schema exists, so return values are covered. The description adequately covers the use case and parameter explanations. Minor gaps remain (error handling, no results edge case), but overall it is sufficiently complete for a search tool.
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 0% schema description coverage, the description compensates by listing attributes in the first sentence and providing a concrete example that maps parameters to values. This adds significant meaning beyond the bare 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 clearly states 'Search a dealer's inventory' and lists filterable attributes (make, model, year, price range). It differentiates from sibling tools like list_inventory (which likely returns all inventory without filters) and create_vehicle.
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 includes a 'Use when:' phrase with an example query, helping the agent decide when to invoke. It lacks explicit when-not-to-use or alternative tools, but the provided context is sufficiently clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_vehicleA
Update one or more fields on an existing vehicle listing.
Use when: "drop the price on vehicle 9001 to $22,995" or "vehicle 9001 just got new photos — update the photoUrl". Example: vehicle_id=9001, price=22995, mileage=12550 → updated record. Common fields: price, mileage, description, photoUrl, status.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | Yes | ||
| vehicle_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses it updates fields and mentions 'updated record' but does not specify partial vs full update, error behavior, or permissions. With no annotations, more detail would improve transparency.
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?
Very concise, well-structured with sections (use when, example, common fields). No unnecessary words, front-loaded with main action.
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?
Despite output schema existing, description lacks crucial details about the 'fields' parameter and return value. Incomplete for an update tool with a complex 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 coverage is 0%. Description lists common fields but does not explain the structure of the 'fields' parameter (object keys, required vs optional). Example implies flat parameters, conflicting with 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?
Description clearly states 'Update one or more fields on an existing vehicle listing' with specific verb and resource. Differentiates from siblings (create, delete) and provides concrete examples.
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?
Includes 'Use when' with natural language examples, indicating when to use. No explicit exclusions or alternatives, but context is clear given sibling tools.
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
v0.1.0- First observed
create_vehicle - First observed
delete_vehicle - First observed
get_account - First observed
get_incentive - First observed
get_vehicle - First observed
health_check - First observed
iter_accounts - First observed
iter_inventory - First observed
list_accounts - First observed
list_incentives - First observed
list_inventory - First observed
search_incentives - First observed
search_inventory - First observed
update_vehicle
TDQS
Scored across 14 tools
Each tool targets a distinct action (create, delete, get, update, list, iterate, search) on specific resources (vehicle, account, incentive, health). Even the paired list_/iter_ versions are clearly differentiated by pagination vs. flat array. No ambiguity.
Most tools follow a consistent verb_noun snake_case pattern. The outlier is health_check, which uses a noun_noun structure instead of a clear verb (e.g., check_health). Otherwise, naming is predictable and uniform.
14 tools is well-scoped for a dealership management domain. Each tool serves a clear purpose without redundancy. The count is neither too sparse nor excessive.
Vehicles have full CRUD coverage (create, get, update, delete, list, iterate, search). Accounts and incentives are read-only (get, list, iterate/search) but that may be by design. Minor gap: no create/update/delete for accounts or incentives, but core workflows are covered.
Maintenance
Related MCP Connectors
MCP server for structured Dutch vehicle data and license plate intelligence. Access RDW-based vehicle specifications, registration details, APK information, fuel and emissions data, weights, dimensions, ownership-related signals and other vehicle knowledge through KentekenKompas.nl. Built for AI assistants, agents and applications that need reliable, machine-readable information about vehicles registered in the Netherlands.
API-first CRM for LLMs - contacts, companies, deals and activities over a native MCP server.
Hosted Amazon Seller and Vendor MCP server for Claude, ChatGPT, Cursor, Codex, Gemini, Copilot.
Hosted Amazon Seller Central and Amazon Ads MCP server for Claude, ChatGPT, Cursor, and agents.
Related MCP Servers
- AlicenseBqualityDmaintenanceMCP server for accessing Claude Code plugins. Enables retrieving plugin lists and detailed information via MCP clients like Claude Desktop, Cursor.2MIT
- AlicenseNot gradedqualityDmaintenanceMCP server for Pipedrive API v2, enabling management of deals, persons, organizations, products, activities, and pipelines through natural language in MCP clients like Cursor and Claude Desktop.28 npm2MIT
- AlicenseNot gradedqualityCmaintenanceMCP server for the FieldRoutes pest-control / lawn-care operations platform — talk to your data from Claude, Cursor, or any MCP client.MIT
- AlicenseAqualityCmaintenanceMCP server for the Qualia title and escrow platform, enabling you to talk to your orders, messages, and documents from Claude, Cursor, or any MCP client.7MIT