Skip to main content
Glama
theluckystrike

mcp-maintenance-log

mcp-maintenance-log

MCP server for an equipment maintenance log and schedule: service entries, costs, and what is due or overdue. Equipment maintenance log: assets, service entries with costs, and a due report computed from stored dates.

Works with Claude Desktop, Claude Code, Cursor and any Model Context Protocol client. Runs on your own machine, or hosted with no install.

Install

Hosted, nothing to install. Get a token from https://mcp.zovo.one/mcp/connect (the connect page) or https://mcp.zovo.one/mcp/token (the same token as JSON); a free anonymous one is issued on the spot and a Pro key works the same way. Then point an MCP client at https://mcp.zovo.one/mcp/maintenance-log over streamable-http and send the token as Authorization: Bearer <token>.

If your client cannot set headers, put the token in the path instead: https://mcp.zovo.one/mcp/maintenance-log/t/<token>. Both forms work. The bare URL with no token answers 401 on tools/call, so the token is not optional.

Claude Desktop, one click. Download maintenance-log.mcpb from the latest release and double-click it.

From source. The mirror is self-contained: every @theluckystrike/* dependency is vendored, so a fresh clone builds with no extra setup.

git clone https://github.com/theluckystrike/mcp-maintenance-log.git
cd mcp-maintenance-log
npm install && npm run build

Then point your client at the built entry point:

{
  "mcpServers": {
    "maintenance-log": {
      "command": "node",
      "args": ["/absolute/path/to/mcp-maintenance-log/dist/index.js"]
    }
  }
}

@theluckystrike/mcp-maintenance-log is not published on npm yet, so an npx -y @theluckystrike/mcp-maintenance-log command will fail. The three paths above are the working ones and each is exercised by CI.

Read-only mirror of mcp-servers/servers/maintenance-log. See MIRROR.md.

In the official MCP Registry (io.github.theluckystrike/maintenance-log). An mcp maintenance log for the workshop, the rental flats, the van fleet or the studio: one local register of every piece of equipment you look after, and the work that has been done on it. Add each asset once -- name, serial or asset tag, where it lives -- then log each service or repair as it happens: the date, what was done, what it cost in cents, who did it, and when the next service falls due, either as a date or as an interval in days. Ask what is due and the report answers what is overdue and what comes up in the next N days, computed from the stored dates at the moment you ask, so it can never go stale. Per-asset history keeps the chronological log with its total spend, and export hands the record over as CSV for a spreadsheet or a Markdown summary per asset. Everything stays on this machine; there is no account and no network call.

Built by theluckystrike.

npm publish for @theluckystrike/mcp-maintenance-log is pending, so npx -y @theluckystrike/mcp-maintenance-log returns 404 today. Until then, a clone+build is the working path.

Related MCP server: HomeOps MCP

Install

Claude Desktop

macOS ~/Library/Application Support/Claude/claude_desktop_config.json, Windows %APPDATA%\Claude\claude_desktop_config.json:

{
  "mcpServers": {
    "maintenance-log": {
      "command": "npx",
      "args": ["-y", "@theluckystrike/mcp-maintenance-log"]
    }
  }
}

Claude Code

claude mcp add maintenance-log -- npx -y @theluckystrike/mcp-maintenance-log

Cursor

~/.cursor/mcp.json (global) or .cursor/mcp.json (project), same entry as Claude Desktop.

Tools

tool

what it does

asset_add

Add an asset: name, serial or asset tag, location, notes, currency. Returns AST-YYYY-NNNN. A duplicate tag is refused

maintenance_log

Log work on an asset: the day, what was done, cost in cents, technician, and the next due date -- as next_due or as interval_days, never both

maintenance_due

The due report: what is overdue and by how many days, what falls due within N days (default 30), what is scheduled later, what has no schedule. Pro

asset_history

One asset in full: every entry in chronological order, total spend in integer cents, spend per technician, the schedule it currently lives under

maintenance_export

Entries in a date range as CSV (free) or a Markdown summary per asset (Pro)

asset_remove

Remove an asset. One carrying a log is refused unless confirm: true, naming what would be lost. The AST number is never reissued

license_status / license_activate

Free or Pro, and the key

Free vs Pro

Free

Pro

Assets on the register

3

Unlimited

Logging work, cost and technician

Yes

Yes

Per-asset history and total spend

Yes

Yes

CSV export of a date range

Yes

Yes

Due report: overdue and due-within-N-days

--

Yes

Markdown summary per asset

--

Yes

The record is never metered. Three assets with full logging and CSV export is a real working register for a one-machine shop, and nothing you have logged is ever held back. What Pro lifts is how many assets are on the register, and adds the due report and the Markdown summaries.

Get Pro: https://mcp.zovo.one/buy/maintenance-log -- $19 one-time for this server, or $39 for the bundle.

Dates and money

Every date is stored as ISO 8601 (YYYY-MM-DD). Whether a service is overdue is computed from today's date at call time, never stored, so the register cannot go stale. An interval is turned into a date once, when the work is logged: the work date plus the interval, in whole days, in UTC so the answer does not depend on the server's timezone. Every cost is an integer number of cents in the asset's own currency (1200 is 12.00), stored on the entry; a total spend is the sum of the stored entries, so it can never drift from the lines it is made of.

Privacy

All data stays local, in ${XDG_DATA_HOME:-~/.local/share}/mcp-servers/maintenance-log/. Two files: assets.json, counter.json. Nothing is sent anywhere, there is no account, no API key and no network call in this server at all. License keys are verified offline.

Built by theluckystrike. https://github.com/theluckystrike

Available Tools

8 tools
asset_addAdd an asset to the registerA

Add one piece of equipment to the maintenance register: its name, its serial or asset tag, where it lives, and the currency its costs are in. Returns the AST-YYYY-NNNN id. Free tier: 3 assets; logging work on the assets you have is never metered.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagNoThe serial number or asset tag, e.g. SN-88-4412. Unique across the register: a second asset with the same tag is refused
nameYesWhat the asset is called, e.g. Lathe, Combi boiler, Van 2, or Studio camera A
notesNoAnything worth keeping with the asset, e.g. Model, warranty end, supplier
currencyNoISO code the costs are in. Default USD
locationNoWhere the asset lives, e.g. Workshop bay 2, or 14 Nowa Street, flat 3

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden of behavioral disclosure. It adds value by revealing the return format (AST-YYYY-NNNN id) and the free-tier quota/metering behavior. It does not mention error conditions or side effects, but the schema covers tag uniqueness, so the disclosure is reasonably rich for a creation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with zero waste. The primary action and key fields are front-loaded, followed by return and quota details. Every sentence earns its place without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple creation tool with 5 parameters and no output schema, the description covers the action, the fields, the return format, and the quota constraints. Error handling for duplicate tags is already in the schema, and no other critical operational details are missing. The agent has enough to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description summarizes the main fields ('its name, its serial or asset tag, where it lives, and the currency') but does not add meaning beyond the schema's individual parameter descriptions. The return ID is not a parameter, so no extra semantic value for parameters is provided.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Add') and resource ('equipment to the maintenance register'), lists the key fields (name, tag, location, currency), and mentions the return ID. This clearly differentiates it from siblings like asset_remove (removal) and asset_history (history) by action.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes the tool's purpose clear but does not explicitly state when to use it versus alternatives or mention exclusions. There is no guidance on when not to use this tool, such as for updating existing assets or handling licenses, leaving the agent to infer based on the action.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

asset_historyRead one asset's log and total spendA

Read one asset in full by id, tag or name: every log entry in chronological order, the total spend as integer cents with a formatted amount, the last service date, and the next-due date the asset currently lives under. Reads only.

ParametersJSON Schema
NameRequiredDescriptionDefault
assetYesThe asset id, e.g. AST-2026-0003, its serial or asset tag, or its name when only one asset has it

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full behavioral burden. It explicitly states 'Reads only,' signaling a safe non-mutating operation, and discloses what fields the response includes. It does not discuss pagination, volume, or errors, but for a simple read-only tool this is adequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single dense sentence that front-loads the core action and then lists the returned details. It is efficient with no filler, though the long enumeration could be lightly structured for readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a simple 1-parameter read tool with full schema coverage and no output schema, the description provides the key contextual facts: how to identify the asset, what data comes back, ordering, and that the operation is read-only. It is complete enough for correct invocation, with only minor gaps around response size or error behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already describes the single parameter completely, including examples and the uniqueness condition for name-based lookup. The description's 'by id, tag or name' slightly paraphrases the schema but adds no substantial new semantic information, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Read') with a clear resource ('one asset') and enumerates exact returned data: chronological log entries, total spend in cents and formatted, last service date, and next-due date. It clearly distinguishes this from sibling mutation tools like asset_add and asset_remove.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes the usage context explicit: call this when you need a single asset's full history and financial detail. It does not explicitly name alternatives or exclusions, so it stops short of a 5, but the context is clear enough for an agent to select it appropriately.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

asset_removeRemove an asset from the registerA

Remove an asset entered by mistake or sold off. One that carries a maintenance log is refused unless confirm is true, naming what would be lost, because removing it loses the record of work done. The AST number is never reissued.

ParametersJSON Schema
NameRequiredDescriptionDefault
assetYesThe asset id, e.g. AST-2026-0003, its serial or asset tag, or its name when only one asset has it
confirmNoPass true to remove an asset that carries a maintenance log. The log goes with it; this cannot be undone

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full behavioral burden, and it does so thoroughly. It discloses that maintenance logs are lost, that confirmation is required for such assets, and that the AST number is never reissued, all of which are safety-relevant consequences not visible in the schema alone.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and well-structured: the main action and use cases come first, followed by the critical maintenance-log caveat and the post-removal policy. Every sentence earns its place without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive tool with no annotations and no output schema, the description covers the key edge cases and consequences well, including the confirmation requirement and number non-reissuance. It could be slightly more complete by mentioning response or behavior for nonexistent assets, but the essential operational context is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents both asset and confirm in detail. The description adds a bit of rationale around confirm, but it does not meaningfully extend parameter meaning beyond what the structured schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action on a specific resource: removing an asset from the register, with the intended situations 'entered by mistake or sold off.' It also conveys the core conditional behavior around maintenance logs, which separates it from sibling tools like asset_add or asset_history.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear when-to-use guidance: remove assets entered by mistake or sold off. It also states the main when-not condition—an asset with a maintenance log will be refused unless confirm is true—but it does not explicitly point to alternative tools for inspection or correction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

license_activateActivate licenseA

Activate a Pro key (MCPL1.xxx.yyy) from checkout: verified offline against a built-in public key, saved to your config file. A wrong, malformed or expired key is refused, unsaved. license_status reads it back.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesLicense key from the checkout confirmation page

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full behavioral burden. It discloses that verification happens offline against a built-in public key, that the key is persisted to the config file, and that invalid keys are refused and left unsaved. This is substantial transparency for an activation tool, though it could mention overwriting an existing key or the exact return behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler. The first sentence front-loads the main action, source, verification method, and persistence. The second sentence efficiently covers error handling and points to the related read-back tool. Every clause adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a single-parameter tool with no output schema and no annotations, the description covers activation behavior, verification mechanism, persistence, error outcomes, and how to read the result later. The only minor gap is an explicit statement of what the function returns upon success or failure, but the phrase 'refused, unsaved' implies a feedback mechanism. Overall, it is sufficiently complete for an agent to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already documents the 'key' parameter at 100% coverage, so the baseline is 3. The description adds meaningful semantics by giving the concrete key format ('MCPL1.xxx.yyy'), confirming the key comes from the checkout page, and explaining that malformed or expired keys will be rejected. This goes beyond the schema's one-line description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Activate a Pro key'), the exact key format ('MCPL1.xxx.yyy'), the source ('from checkout'), and the core mechanism ('verified offline against a built-in public key'). It also differentiates itself from the sibling license_status by noting that license_status reads the activation back, so there is no ambiguity about which tool does what.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context: use this when you have a Pro key from checkout that needs to be activated. It also points to license_status as the read-back tool, which implies when to use a related sibling. It does not explicitly spell out 'do not use for checking status' or list other alternatives, but the context is strong enough to avoid misuse.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

license_statusLicense statusA

Report this server's licence state: product, tier free or pro, licence id, expiry, the key source and the upgrade URL. No arguments, no network. Explains a free-tier refusal; license_activate installs a key.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations are absent, so the description carries the full burden of behavioral disclosure. It discloses that the call is local ('no network') and argument-free, and it mentions a specific explanatory behavior. The word 'Report' implies read-only, though it does not explicitly state non-destructive or permission requirements; this is adequate for a status command.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler. The first sentence lists the output fields; the second adds constraints and the sibling pointer. Every clause contributes meaningful information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter status tool with no output schema, the description lists the expected output fields, behavioral constraints, and the relevant alternative tool. Nothing an agent needs 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.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has zero parameters and the description reinforces this with 'No arguments'. It adds value by listing the reported fields, helping an agent understand what the empty input will yield. The baseline for zero-parameter tools is high, and the description meets it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Report'), a clear resource ('this server's licence state'), and enumerates the exact fields returned. It also names the sibling 'license_activate' as the tool that does something different, so an agent can distinguish them immediately.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit usage constraints: no arguments, no network, and explains a free-tier refusal. It also directs the agent to license_activate when the task is to install a key, serving as an explicit pointer to the relevant alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

maintenance_dueReport what is overdue and what is coming dueA

The due report across every asset: what is overdue and by how many days, what falls due within the next N days (default 30), what is scheduled later, and what has no schedule at all. Computed from the stored next-due dates against today, at call time. Pro feature.

ParametersJSON Schema
NameRequiredDescriptionDefault
within_daysNoHow far ahead to look, in days. Default 30

TDQS

A4/5.0
Behavior4/5

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 discloses that the report is computed from stored next-due dates against today at call time, which is valuable because it implies dynamic results, and it notes the 'Pro feature' access requirement. However, it does not explicitly state that the operation is read-only or side-effect-free, though this is strongly implied by its reporting nature. The disclosure is solid but not complete.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that packs all essential information without fluff. It front-loads the core purpose ('due report across every asset') and then enumerates the categories and computation method. There is no redundancy or wasted wording.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with a single optional parameter and no output schema, the description is quite complete: it explains what categories the report includes, how the dates are computed, and the default lookahead. It does not explicitly describe the return format or structure, but given the simplicity of the tool and the lack of an output schema, this is a minor gap rather than a critical omission.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 100% and the parameter 'within_days' is already documented with 'How far ahead to look, in days. Default 30'. The description reinforces this by mentioning 'the next N days (default 30)', but adds no additional semantic detail beyond what the schema provides. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool generates a due report across all assets, enumerating overdue items, items due within a window, later items, and unscheduled items. It uses a specific verb ('report') and resource ('every asset'), and its scope distinguishes it from sibling tools like maintenance_export or maintenance_log without requiring further inspection.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description conveys when to use it (to get an overview of maintenance due dates) but does not explicitly mention alternatives or when not to use it. It provides the default lookahead of 30 days, which hints at usage, but there is no direct guidance on selecting this over maintenance_export or maintenance_log. The context is clear but not exhaustive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

maintenance_exportExport the log as CSV or MarkdownA

Export maintenance entries dated inside a range. CSV (free): one row per entry, ready for a spreadsheet. Markdown (Pro): one section per asset with its entries, total spend and next due date, ready to paste into notes or a report. Writes nothing.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoOnly entries dated on or before this, YYYY-MM-DD. Default: no upper bound
fromNoOnly entries dated on or after this, YYYY-MM-DD. Default: no lower bound
formatNocsv (default) or markdown. Markdown summaries are a Pro feature

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description must carry the full behavioral burden. It explicitly discloses 'Writes nothing,' which is important for a tool that could otherwise be assumed to modify or create data. It also describes the output shape for both formats, giving the agent a clear picture of what to expect.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and efficient. The core purpose is stated first, followed by concise format-specific use cases significance and a short side-effect note. No sentences are wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no output schema and no annotations, the description is complete enough. It covers what the tool exports, the date range, the two formats, what the output looks like in each case, and the fact that it writes nothing. An agent can invoke it correctly with the provided schema and this description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all three parameters. The description adds useful semantic meaning to the 'format' parameter by explaining the output structure and the free/Pro distinction. It does not need to repeat the schema's date parameter descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb ('Export'), a resource ('maintenance entries'), and a date-based scope. It also distinguishes the two output formats. None of the sibling tools overlap with exporting, so there is no ambiguity about what this tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use each format: CSV for spreadsheets has ready-to-paste Markdown for notes or reports. It does not explicitly say when not to use this tool versus a sibling like maintenance_log, but the intended use is strongly implied by the export focus.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

maintenance_logLog maintenance on an assetA

Log work done on an asset: the day, what was done, the cost in whole cents, who did it, and when the next service falls due -- as a date (next_due) or as an interval in days (interval_days), never both. A repair that sets no schedule takes neither. A future work date is refused.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYesThe day the work was done, YYYY-MM-DD. A future date is refused
workYesWhat was done, e.g. Oil and filter change, or Annual boiler service
assetYesThe asset id, e.g. AST-2026-0003, its serial or asset tag, or its name when only one asset has it
next_dueNoThe date the next service falls due, YYYY-MM-DD. Pass either this or interval_days, not both
cost_centsNoWhat the work cost in whole cents. 12000 is 120.00. Default 0, for in-house work
technicianNoWho did the work, e.g. Anna, or Acme Heating Ltd
interval_daysNoDays after the work date the next service falls due, e.g. 90 for quarterly. Turned into a date once, at log time

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure, and it does so well. It explicitly states that next_due and interval_days are mutually exclusive, that a repair setting no schedule takes neither, and that a future work date is refused. This gives an agent concrete behavioral constraints beyond the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler. It front-loads the core action, then packs the essential constraints into the remaining clauses. Every sentence earns its place and the structure makes the rules easy to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the parameter count, high schema coverage, and absence of annotations, the description covers the important operational rules sufficiently. It does not mention return values or permissions, but for a simple log-creation tool with a rich schema, the description plus schema is complete enough for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds some value beyond the schema by stating the 'never both' interaction and, more usefully, the edge case that a repair with no schedule takes neither field. It also reinforces that cost is in whole cents. Overall, it adds a small but meaningful layer of parameter context.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Log work done on an asset', then enumerates the exact data captured. This clearly distinguishes it from sibling tools like maintenance_due, maintenance_export, and asset_add, which serve different purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains what the tool does but gives no explicit guidance about when to choose it over siblings such as maintenance_due or maintenance_export. There are no stated exclusions or conditions like 'use this after finishing work' or 'for viewing due dates, use maintenance_due instead'.

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.

  1. 8 tool updatesv0.22.0
    • First observedasset_add
    • First observedasset_history
    • First observedasset_remove
    • First observedlicense_activate
    • First observedlicense_status
    • First observedmaintenance_due
    • First observedmaintenance_export
    • First observedmaintenance_log

TDQS

A4.2/5.0

Scored across 8 tools

Disambiguation5/5

Each tool targets a distinct operation: adding/removing assets, logging maintenance, checking due items, reading history, exporting, and license management. There is no realistic confusion between them, and overlapping read features are separated clearly by scope.

Naming Consistency3/5

The names use clear prefixes but mix noun-style and verb-style endings: asset_add and maintenance_export are verb-like, while asset_history, maintenance_due, and license_status are noun-like. The pattern is readable and predictable by prefix, but not fully consistent.

Tool Count5/5

Eight tools is well-scoped for a maintenance-log server: six cover the core asset/maintenance workflow and two cover licensing. Each tool has a clear purpose and none feel redundant.

Completeness4/5

The core lifecycle is covered: assets can be added, logged against, inspected, reported on, exported, and removed. Minor gaps include no way to update asset metadata or delete/correct an individual maintenance log entry, but agents can still complete primary workflows.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to manage Snipe-IT inventory systems through comprehensive asset and consumable operations. Supports creating, updating, tracking, and managing IT assets, consumables, maintenance records, file attachments, and generating labels.
    1
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables voice-first household maintenance tracking, turning spoken updates into durable records, service history, and due-date reminders for a concise maintenance brief.
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables household maintenance planning and tracking through MCP tools, including reviewed step-by-step guides, command-driven state updates, and iCalendar generation for completed routines.
    MIT