MCP HeartbeatTHE MCP OBSERVATORY
Public workspace

Explore

Evidence for your next connection.

Independent measurements of remote MCP servers. Every observation has a timestamp.

Read-only probes

MCP server · Other

Wenmar Open

Free VIN decoder, recalls, service bulletins, trouble codes and labour times. No key.

Checks passed
11 / 22

3 failed · 8 not measured

Median response
430 ms

Median of successful probes over 7 days

30-day uptime
Not measured

Share of countable probes over 30 days, including daily rollups. Auth challenges are excluded.

Discovered tools
7

Tool definitions returned by this server

Independent monitoring

Health & checks

Status history

Outdated check

Last connection measurement is over 24 hours old. Current availability is unknown.

Last checked
Check summary by test group
Test areaPassedFailedUnmeasured
ConnectionCan a client connect and discover tools?
500
Reliability & speedDoes it respond consistently and quickly?
004
Access & authenticationWhat is required to use this server?
102
Tool qualityAre the tool definitions usable by an agent?
310
Publisher identityCan the publisher be traced to its source?
222

Unmeasured means there is not enough evidence to decide. How these checks work

Inspect individual checks 22 recorded

Core

  • Pass
    Reachable

    Latest probe returned HTTP 200 in 430 ms.

  • Pass
    Valid handshake

    protocolVersion 2025-11-25, serverInfo.name wenmar-open.

  • Pass
    Lists tools

    tools/list returned 7 tools.

  • Pass
    Current protocol

    Negotiated 2025-11-25. The bar is 2025-06-18 or newer.

  • Pass
    HTTPS

    The endpoint URL is https.

Performance

  • Not measured
    Fast (p50)

    Median latency 430 ms over 1 samples in 7 days. The bar is 1000 ms. Need at least 5 samples.

  • Not measured
    Consistent (p95)

    95th percentile 430 ms over 1 samples in 7 days. The bar is 3000 ms. Need at least 20 samples.

  • Not measured
    Reliable (uptime)

    1 of 1 attempts returned a tool list in 30 days (100%). The bar is 99%. Need at least 30 samples.

  • Not measured
    Stable tool list

    Fewer than two successful probes in 30 days, so tool-list stability is not measured.

Access

  • Pass
    Open access

    tools/list succeeded with no credential, and the record declares none.

  • Not measured
    Standard auth

    Auth is not required, so the OAuth metadata check does not apply.

  • Not measured
    Free tier cited

    No publisher quote has been checked.

Tools

  • Pass
    Tools described

    Every tool description is at least 20 characters.

  • Pass
    Valid input schemas

    Every inputSchema is a JSON Schema object.

  • Fail
    Parameters documented

    30 of 68 parameters have a description (44%). The bar is 80%.

  • Pass
    Safety hints

    Every tool sets readOnlyHint or destructiveHint.

Publisher

  • Pass
    Verified namespace

    Listed in the Official MCP Registry.

  • Fail
    Website matches publisher

    The website host does not match the reverse-domain namespace.

  • Fail
    Source repo linked

    No repository URL is on file.

  • Not measured
    Repo owner matches

    This namespace is not an io.github login, so the owner comparison does not apply.

  • Pass
    Recently updated

    Updated 2026-10-13T04:27:39.905944Z, within 180 days.

  • Not measured
    Open-source licence

    No GitHub repository to ask about a licence.

Start using Wenmar Open

Connect to this server

Choose your client, copy the configuration, then enable the server in your client’s MCP settings.

Run this command in your terminal, then restart Claude Code.

Claude Code

claude mcp add --transport http wenmar-open https://open.wenmarpro.com/mcp

Capabilities

Tools 7

wenmar_bulletins

Manufacturer communications NHTSA publishes: service bulletins, service campaigns, warranty extensions and over-the-air updates. Each has NHTSA's summary, the manufacturer's own document number, and `document`, the address NHTSA's copy of the document is expected at (not confirmed; null for old ones). The document itself is the manufacturer's and is not returned. A bulletin lists model years: it is not a recall and does not say a vehicle is affected. action=vehicle takes `id`, a vehicle id such as "2018_ford_f-150", and gives one page of that model year's bulletins, newest first, with `counts` by type, component, trouble code and topic. action=vin takes `vin` (and optionally `year`) and does the same for the model year the VIN decodes to. action=get takes `nhtsa_id` and gives one bulletin with every vehicle it lists. action=search lists all bulletins newest first, narrowed by `make`, `model` (needs `make`) and `year`. Every action but get takes `type` (service_bulletin, service_campaign, warranty_extension, over_the_air, emissions, other), `component` (an id from `counts.components`, such as brakes), `code` (a trouble code such as P0420), `topic` (maintenance), `query` (free text in the summary, such as a symptom), `limit` (at most 100, 25 when left out) and `cursor` (`next_cursor` of the page before). This tool needs the hosted service: a local data file does not hold bulletins.

Discovered
wenmar_codes

Generic OBD-II trouble codes, described in Wenmar Open's own words: a title, what the code means, common causes, first checks, the components it concerns and related codes. Only codes every maker uses the same way are described (P0, P2, P3400 and up, B0, C0, U0, U3). Manufacturer-specific codes are not described. action=get takes `code`, such as "P0420", and gives its description. action=search lists the described codes by code, narrowed by `query` (text in the code, title or meaning) and `system` (powertrain, body, chassis, network, or an area such as powertrain/emissions); pass `next_cursor` back as `cursor`. action=vehicle takes `id`, a vehicle id such as "2018_ford_f-150", and `code`, any code, a manufacturer-specific one included: it gives the description (null when there is none), the bulletins of that model year whose NHTSA summary names the code, and the bulletins and recalls of that model year about the same components. A part of that answer is null where the data is not held. A description is general and is not a diagnosis; a bulletin or recall listed may apply to the model year and is not confirmed for one vehicle.

Discovered
wenmar_labor

Wenmar's own estimates of the hours a repair job takes: written by people who do the work, measured from repair orders, or worked out by AI from the repair steps; never copied from a labour guide. An estimate, not a quote. Rust, seized fasteners and added equipment change the time. action=jobs lists the jobs an estimate can be about; with `job` it gives one job: what it includes, what it excludes, and its typical hours by class of vehicle. action=vehicle takes `id`, a vehicle id such as "2018_ford_f-150" (an id that ends with an engine asks for that engine), and optionally `job`: for each job it gives `hours` (low, typical, high), `basis` (expert, observed or ai: an AI estimate worked out from the repair steps, not checked by a person; say so, with its confidence_pct) and `scope`, which says what the figure is for: engine, generation, model or class. `notes` says what an AI estimate assumed (the engine, both sides or one): repeat it when it matters; `page_url` is a page to give a person; `method_url` is the page that says how estimates are made. A class figure is typical for vehicles of that class and was not worked out on this vehicle: say so. A vehicle answer's `missing` lists the jobs with no Wenmar estimate for that vehicle: say there is none, never make one up. action=vin takes `vin` (and optionally `year`, `job`) and does the same for the vehicle the VIN decodes to. action=coverage takes `job` and lists the vehicles that have their own figure for it (make, model, years), for 'which vehicles do you have times for'; pass `next_cursor` back as `cursor` for more. No answer holds a price: multiply by the shop's own rate. Credit the data as `attribution` says: Labour estimates by Wenmar Pro, CC BY 4.0.

Discovered
wenmar_payroll_deductions

Works out the deductions from one regular pay in Ontario by CRA's T4127 formulas (Option 1): federal and Ontario income tax, CPP, CPP2 and EI, the net pay, the employer's CPP, CPP2 and EI, and every T4127 factor used with what it means. Takes `frequency` (weekly, biweekly, semi-monthly or monthly) and `gross`, the gross pay for the period. `federal_claim` and `provincial_claim` are the TD1 claim amounts: left out, each is the basic personal amount (claim code 1), and 0 is claim code 0. `pay_date` (YYYY-MM-DD) chooses the tables; left out, it is today, and a day outside the tables held is an error that names their dates. `ytd_cpp`, `ytd_cpp2`, `ytd_ei` and `ytd_pensionable` are what was deducted and earned on earlier pays this calendar year. Money is a number or text such as "2400.00". Ontario only; not for a bonus, commission or retroactive pay. The answer is an estimate and the employer remains liable to CRA for what it deducts and remits: say so, and point to CRA's Payroll Deductions Online Calculator at `pdoc_url`.

Discovered
wenmar_recalls

Recall campaigns from NHTSA (United States) and Transport Canada that may apply to a vehicle. A campaign lists a year, a make and a model, so every answer has may_apply: true. It may apply; confirm by VIN with the manufacturer, or at the addresses in `lookup`. This is never a lookup by VIN. action=vehicle takes `id`, a vehicle id such as "2018_ford_f-150". action=vin takes `vin` (and optionally `year`): it decodes the VIN and lists the recalls of its model year. action=campaign takes `source` (nhtsa or tc) and `campaign`, such as "19V888000", and gives that campaign with every vehicle it lists. action=search lists campaigns newest first, narrowed by any of `make`, `model` (needs `make`), `year`, `component` and `query` (free text); `limit` is at most 100 and 25 when left out; `cursor` is `next_cursor` of the page before. action=recent takes `since`, a day such as "2026-09-01", and lists the campaigns reported on or after it, newest first, each with the vehicles it lists; it also takes `make`, `limit` and `cursor`. `country` is us or ca on every action but campaign; left out, both.

Discovered
wenmar_vehicles

Look up vehicles by year, make, model, submodel and engine. Actions: years; makes (optional `year`); models (`make`, optional `year`); submodels (`make`, `model`, `year`); engines (`make`, `model`, `year`, optional `submodel`); search (`query`, such as "2019 civic si" or "chevy 1500"); entry (`id`, such as "2019_honda_civic_si"); overview (`id`: everything held for that model year in one answer, with a count of the recall campaigns that may apply and the three newest; a block with no data is null); model_years (`make`, `model`: every model year of one model, newest first, each with its vehicle id and the number of recall campaigns that may apply); safety (`id`: NHTSA's crash test ratings for that model year, one entry for each vehicle NHTSA rated, by body style and drive, each with its stars; an entry with no stars is a vehicle NHTSA lists and has not tested); fuel (`id`, optional `country` us or ca: fuel consumption ratings from EPA and Natural Resources Canada, each saying in `confidence` how far it was matched: model, engine or submodel); specs (`id`: transmission, drive, recommended fuel and more from EPA's files, one entry per EPA rating); fluids (`id`: the engine oil grade EPA records for each engine, and records a person read from the maker's own documents, each with its `source` and the day it was `checked`; an empty list means nobody has recorded it); tires (`id`: every original-equipment tire size on record with the trims it covers; none is picked). `make` and `model` take a name, an alias or an id. `term` narrows a list to names starting with it. `scope` is light (cars, MPVs and trucks; the default), all, or a vPIC vehicle type id. action=complaints takes `id` and gives what owners reported to NHTSA about that model year as counts by component, with the median mileage owners gave: these are owners' reports, not verified, and a count is not a rate.

Discovered
wenmar_vin

Decode vehicle identification numbers into year, make, model, trim, generation, engine (with horsepower, valve train and fuel injection), drivetrain, brakes, battery and charging, safety equipment, lights and keyless ignition, the manufacturer's notes, every NHTSA attribute with its source, and the matching catalog entry. year_conclusive=false means the VIN leaves the model year open: check the vehicle's label. action=decode takes `vin` (and optionally `year` to override the model year). action=batch takes `vins`, at most 50, and returns one result per VIN in order. A wrong check digit is not an error: the result has valid=false and a warning. action=overview takes `vin` (and optionally `year`) and gives everything held for the model year the VIN decodes to in one answer: the decode in brief, a count of the recall campaigns that may apply to that year, make and model with the three newest, and links. A block with no data is null. action=fuel, specs, fluids or tires takes `vin` (and optionally `year`) and gives that data for the model year the VIN decodes to: fuel consumption ratings from EPA and Natural Resources Canada (optional `country`, us or ca), specifications from EPA's files, fluids (the engine oil grade EPA records, and records a person read from the maker's own documents, each with its source and the day it was checked), or the original-equipment tire fitments. When the decode settles the engine, fuel, specs and fluids hold only what is for that engine and `engine_settled` is true; tires are never narrowed.

Discovered

Recent measurements

Probe history

View status
Latest stored probes. Raw probe rows are kept for 14 days.
CheckedResultResponseTools
Connected430 ms7