Job Card
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., "@Job CardLog 4 hours at $75/hr for Mike on job JC-2025-0007"
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.
mcp-job-card
MCP server for job cards for trades and field service: hours and materials per job. One card per job: hours and materials logged against it, a status machine from open to invoiced, and the printed card for client sign-off.
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/job-card 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/job-card/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 job-card.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-job-card.git
cd mcp-job-card
npm install && npm run buildThen point your client at the built entry point:
{
"mcpServers": {
"job-card": {
"command": "node",
"args": ["/absolute/path/to/mcp-job-card/dist/index.js"]
}
}
}
@theluckystrike/mcp-job-cardis not published on npm yet, so annpx -y @theluckystrike/mcp-job-cardcommand will fail. The three paths above are the working ones and each is exercised by CI.

Read-only mirror of mcp-servers/servers/job-card. See MIRROR.md.
In the official MCP Registry (io.github.theluckystrike/job-card).
One card per job, the way the paper one on the dashboard works. Open a card for the client and the site, log the hours each worker puts in at their rate and the materials that go into the job, and the card keeps the running totals: labor, materials and the grand total, always in integer cents. Move the card along as the job moves -- open, in progress, done, invoiced, archived -- and when the client wants to see it, print the card with its signature line for sign-off. A daily or weekly summary answers where the crew's hours went and what the work is worth, per currency. Everything stays on this machine; there is no account and no network call.
Built by theluckystrike.
npm publish for @theluckystrike/mcp-job-card is pending, so npx -y @theluckystrike/mcp-job-card returns 404 today. Until then, a clone+build is the working path.
Related MCP server: time-tracker-ai-mcp
Install
Claude Desktop
macOS ~/Library/Application Support/Claude/claude_desktop_config.json, Windows %APPDATA%\Claude\claude_desktop_config.json:
{
"mcpServers": {
"job-card": {
"command": "npx",
"args": ["-y", "@theluckystrike/mcp-job-card"]
}
}
}Claude Code
claude mcp add job-card -- npx -y @theluckystrike/mcp-job-cardCursor
~/.cursor/mcp.json (global) or .cursor/mcp.json (project), same entry as Claude Desktop.
Tools
tool | what it does |
| Open a job card: client, site, what the job is, currency, scheduled date. Returns |
| Log hours on a job card: who did the work, the day, the hours, the hourly rate in cents, what was done |
| Log materials used on a job card: the item, the quantity, the unit cost in cents |
| Move the card exactly one step -- open, in_progress, done, invoiced, archived -- stamping date and note into its history |
| List cards newest first with hours and totals; filter by status and client; totals kept per currency |
| Read one card in full: every entry, hours per worker, and the running totals in integer cents |
| Render the card ready to print, with a signature line for client sign-off. Markdown or self-contained HTML |
| Delete a card entered by mistake. One holding labor or materials is refused; archive it instead |
| A day or a week: cards touched, hours per worker, labor and materials value per currency. A week runs Monday to Sunday |
| Free or Pro, and the key |
Free vs Pro
Free | Pro | |
Active job cards | 10 | Unlimited |
Labor and material entries per card | Unlimited | Unlimited |
Running totals, list and get | Yes | Yes |
Printable card, markdown and HTML | Yes | Yes |
Daily and weekly summary | Yes | Yes |
The record is never metered. Ten active cards is a real working board for a small crew, and a card stops counting the moment it is archived, so logging, totals, printing and summaries stay free for good. What Pro lifts is how many jobs are on the board at once.
Get Pro: https://mcp.zovo.one/buy/job-card -- $19 one-time for this server, or $39 for the bundle.
Money and rounding
Every amount is an integer number of cents (a cent is 1/100 of the currency unit). A labor line is hours times the hourly rate; a materials line is quantity times the unit cost; each line value is rounded half-up to the nearest cent once, at the moment it is logged, and stored on the entry. Totals are the sums of those stored line values, so a total can never drift from its lines. Hours are carried as integer hundredths and quantities as integer thousandths, so 2.5 hours at 4999 cents an hour is 12498 cents, never 12497.499999. Currencies are never added together: this server holds no exchange rate.
Privacy
All data stays local, in ${XDG_DATA_HOME:-~/.local/share}/mcp-servers/job-card/. Two files: cards.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
11 toolsjob_card_createOpen a job cardA
Open a job card for a job your crew is taking on and return its JC-YYYY-NNNN number: the client, the site, what the job is, the currency and when it is scheduled. Free tier: 10 active cards; archiving a finished job frees its slot.
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | ||
| site | Yes | Where the job is, e.g. 14 Nowa Street, flat 3 | |
| client | Yes | Who the job is for, e.g. Kowalski bathroom refit, or Acme Ltd | |
| currency | Yes | ISO code the rates and prices are in | |
| description | Yes | What the job is, e.g. Replace the consumer unit and certify | |
| scheduled_date | No | The date the crew is due on site, YYYY-MM-DD. May be in the future; it is a plan, not a log |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It clearly states the create side effect, the exact return format, and a meaningful constraint (10 active cards, archiving frees a slot). It stops short of describing what happens at the limit or permission requirements, but the key behavioral traits are honestly and usefully exposed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero fluff: the first front-loads the action, return value, and required data; the second adds a genuinely useful constraint. Every phrase 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 no-annotation, no-output-schema create tool with 6 params, the description covers the essential contract: what it creates, what it returns, and the card-limit context. It does not explain error behavior at the cap or the meaning of 'note', but the high schema coverage and clear return format make it largely complete for correct invocation.
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 83% (5 of 6 parameters documented), so the baseline is 3. The description lightly reflects the schema fields by listing 'the client, the site, what the job is, the currency and when it is scheduled', but it adds no new syntax, format detail, or edge-case meaning beyond what the schema already provides. The optional 'note' parameter remains undocumented in both.
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 states a specific action ('Open a job card'), the resource, and the return value ('JC-YYYY-NNNN number'), and lists the data it takes: client, site, description, currency, scheduled date. This clearly distinguishes it from siblings like job_card_update_status and job_card_delete, which are different operations on the same resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: create a card when your crew takes on a job. The free-tier note ('10 active cards; archiving a finished job frees its slot') hints at capacity constraints, but no alternatives are named and there is no explicit 'use X instead when...' guidance. An agent would infer when to call it, but not formally.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
job_card_deleteDelete an empty job cardA
Delete a job card entered by mistake. One with labor or materials logged is refused, naming what it holds, because deleting it would lose the record of work done: archive it instead. The JC number is never reissued.
| Name | Required | Description | Default |
|---|---|---|---|
| card | Yes | The job card id, e.g. JC-2026-0003, or the client name when only one card has it |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It clearly states that deletion is refused for cards with labor or materials, that the refusal names what it holds, and that the JC number is never reissued. This covers the key safety and side-effect behaviors. It does not mention whether deletion is permanent or if any confirmation is needed, but given the explicit refusal logic, it is close to complete.
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 efficient: three sentences, with the primary purpose in the first sentence, and key constraints and consequences in the following ones. It is slightly verbose in the second sentence but each clause adds important information. No extraneous 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?
Given a single parameter, no output schema, and no annotations, the description covers the essential context: when to use, what happens on refusal, and the permanent consequence of the JC number. It is missing the return format on success, but for a simple delete operation this is not critical. It is complete enough for an agent to correctly decide and call.
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 schema already provides a clear description of the 'card' parameter, including an example format and an alternative (client name). The description adds no additional parameter-specific details, but with 100% schema coverage, a score of 3 is the baseline. It is adequate.
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 (delete), the resource (job card), and the specific condition (empty) that must be met for the delete to succeed. It distinguishes from siblings like job_card_update_status or job_card_create by focusing on deletion and by mentioning what it is not for (cards with logged work).
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 explicitly states when to use this tool: to delete a job card entered by mistake and only if it has no logged labor or materials. It also provides an explicit alternative: archive the card instead if it has content, and warns that the JC number is never reissued, which prevents misuse.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
job_card_getRead one job card with its running totalsA
Read one job card in full by JC number or client: every labor entry and every material used, the hours per worker, and the running totals -- labor, materials and grand total -- as integer cents with formatted amounts. Reads only.
| Name | Required | Description | Default |
|---|---|---|---|
| card | Yes | The job card id, e.g. JC-2026-0003, or the client name when only one card has it |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden; it explicitly states 'Reads only,' disclosing that this is a non-mutating operation. It also reveals return characteristics — each entry, hours per worker, and running totals 'as integer cents with formatted amounts' — which is useful behavioral context 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that immediately names the action and resource, then enumerates the returned content without wasted words. The final 'Reads only' is compact and earns its place as a safety-relevant clarification.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description covers the essentials: what is read, how the card is identified, and exactly what the return includes. It does not cover error behavior or ambiguous-client handling beyond the schema note, but for a simple read operation the definition is substantially 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 coverage is 100%: the only parameter 'card' already explains the JC number or client name format and the single-card disambiguation rule. The description's phrase 'by JC number or client' echoes the schema rather than adding new semantic content, so the baseline 3 is appropriate.
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 states a specific verb and resource — 'Read one job card in full' — with a clear scope: by JC number or client, returning labor entries, materials, hours per worker, and running totals. It also says 'Reads only,' distinguishing it from mutating siblings like job_card_create, job_card_log_labor, and job_card_update_status, and from job_card_list which reads multiple cards.
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 implies its use case: you need the full detail of a single job card, not a summary or list. However, it never names alternatives or says when not to use it — e.g., job_card_summary for totals or job_card_list for browsing — leaving the choice partly to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
job_card_listList job cardsA
List job cards newest first: client, site, status, hours logged, and the labor, materials and grand totals in cents. Filter by status and by client. Totals are kept per currency, never mixed.
| Name | Required | Description | Default |
|---|---|---|---|
| client | No | Only cards whose client contains this text, case-insensitive | |
| status | No | Only cards at this status: open, in_progress, done, invoiced, archived |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It does disclose sorting ('newest first') and a currency-mixing rule ('Totals are kept per currency, never mixed'), which are useful behavioral traits. However, it does not mention pagination, result limits, error behavior, or explicitly confirm read-only status (though implied). The added context is moderate but not comprehensive for a 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 a single, information-dense sentence that front-loads the core action ('List job cards newest first') and then lists fields and filters. Every clause contributes value: sorting, field list, filter capabilities, and the currency rule. It is slightly long but efficient and well-organized, with no redundant wording.
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?
Since there is no output schema, the description appropriately lists the returned fields (client, site, status, hours logged, totals) and specifies ordering and currency handling. It omits potential details like pagination or response limits, but for a simple list tool with two optional filters, the provided information is largely sufficient for correct invocation. The only gap is a lack of mention of any default limits or paging 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?
Schema description coverage is 100%, with both parameters (client and status) fully described in the schema. The description only restates that filtering is possible without adding extra meaning (e.g., case-insensitivity is already in the schema, and the status enum is also in the schema). Thus the description adds no value beyond what the schema already provides, matching the baseline of 3.
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 a specific action ('List job cards') and resource, and enumerates the exact fields returned (client, site, status, hours, totals in cents). It distinguishes itself from sibling tools like job_card_get (single retrieval) and job_card_create by its list nature and filter options. The verb and resource are precise, leaving no ambiguity about what the tool does.
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 implies usage (use when you need a list of job cards) and mentions filters by status and client, but it does not explicitly contrast with alternatives like job_card_summary or job_card_get, nor does it state when NOT to use it. The context is clear but lacks exclusions or direct sibling comparisons, leaving the agent to infer routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
job_card_log_laborLog hours on a job cardA
Log hours worked on a job card: who did the work, the day, the hours and the hourly rate in whole cents, with a note on what was done. The line value is hours times rate, rounded half-up to the cent, fixed the moment it is logged.
| Name | Required | Description | Default |
|---|---|---|---|
| card | Yes | The job card id, e.g. JC-2026-0003, or the client name when only one card has it | |
| date | Yes | The day the work was done, YYYY-MM-DD. A future date is refused | |
| note | No | What was done, e.g. First fix, kitchen ring main | |
| hours | Yes | Hours worked, to the hundredth, e.g. 7.5 or 3.25. One entry is one worker's day at most | |
| worker | Yes | Who did the work, e.g. Anna | |
| rate_cents | Yes | The hourly rate in whole cents. 4500 is 45.00 an hour |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose a key behavior: the line value is hours times rate, rounded half-up to the cent and fixed at log time. However, it does not disclose side effects on the job card, whether the operation is append-only, permission requirements, or failure behavior, which are significant for a write 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?
Two sentences contain all essential information with no filler. The core operation and fields are front-loaded, and the important value-calculation rule is stated clearly at the end.
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 that all parameters are fully described in the schema and the description clarifies the value calculation, an agent has enough to construct a valid call. Missing details like response format, confirmation of what was logged, and side effects on the job card are gaps, but they do not prevent correct invocation for the primary use case.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents each parameter. The description only loosely restates the fields ('who did the work, the day, the hours and the hourly rate') and adds no new per-parameter meaning beyond what the schema provides; the rounding detail is about output/value behavior rather than parameter interpretation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Log'), a specific resource ('hours worked on a job card'), and the relevant payload fields. It is naturally distinguishable from the sibling job_card_log_material by the labor vs. material framing.
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 implies when to use it—for hourly labor entries rather than material entries—but it does not explicitly state when to use job_card_log_labor versus job_card_log_material or other siblings. There is no when-not-to-use guidance, so the agent must infer the intended selection from the title and sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
job_card_log_materialLog materials used on a job cardA
Log materials used on a job card: the item, the day it went in, the quantity and the unit cost in whole cents. The line value is quantity times unit cost, rounded half-up to the cent, fixed the moment it is logged.
| Name | Required | Description | Default |
|---|---|---|---|
| qty | Yes | How many, to the thousandth, e.g. 2 or 0.5 | |
| card | Yes | The job card id, e.g. JC-2026-0003, or the client name when only one card has it | |
| date | Yes | The day it went in, YYYY-MM-DD. A future date is refused | |
| item | Yes | What went into the job, e.g. Copper pipe 15mm, or Consumer unit 10-way | |
| note | No | ||
| unit_cost_cents | Yes | What one costs in whole cents. 1299 is 12.99 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the rounding rule (half-up to cent) and that the line value is fixed at log time, which is valuable behavioral context beyond the schema. With no annotations, it carries the burden well, though it doesn't discuss side effects or permissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action, and no unnecessary detail. Every phrase contributes to understanding the tool's function and calculation.
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 logging operation with no output schema, the description covers the essential behavior: what is logged and how the line value is computed. It doesn't mention success/error responses, but that's not critical given the schema covers parameters.
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 high (83%), so the baseline is 3. The description adds the line value formula (quantity times unit cost) and clarifies that unit_cost_cents is in whole cents, providing meaning beyond the schema's parameter 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?
The description clearly states the action (log materials) and the key fields (item, date, quantity, unit cost). It's unambiguous about the resource and purpose, but it doesn't explicitly mention the sibling tool for labor, so it doesn't fully distinguish from job_card_log_labor.
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 implies usage for materials logging, but provides no explicit guidance on when to use it vs. job_card_log_labor. There's no mention of alternatives or exclusions, relying on the tool name to convey the distinction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
job_card_printRender the card for the client to signA
Render a job card ready to print and hand to the client: the labor, the materials, the totals and a signature line for client sign-off. Markdown, or self-contained HTML that needs nothing from the network. Writes nothing.
| Name | Required | Description | Default |
|---|---|---|---|
| card | Yes | The job card id, e.g. JC-2026-0003, or the client name when only one card has it | |
| format | No | markdown (default) or html. The HTML carries its own styling and references nothing external |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does so well. 'Writes nothing' explicitly rules out side effects, and 'self-contained HTML that needs nothing from the network' discloses output characteristics. It also enumerates what the rendered card contains.
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 with no filler. It front-loads the purpose, then efficiently conveys output contents, formats, network independence, and side-effect absence.
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 low-complexity tool with two parameters and no output schema, the description fully covers what the agent needs: the rendered output types, the content included, and the fact that no state changes occur. No critical invocation or outcome information is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents the card identifier and format parameter. The description's mention of Markdown/HTML mirrors the format enum's documentation and adds no parameter-level meaning beyond it, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Render' with the resource 'job card' and immediately scopes it to the client-facing print/sign-off use case, listing labor, materials, totals, and a signature line. This clearly distinguishes it from sibling tools like get, summary, or update.
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 intended use is clear: 'ready to print and hand to the client' tells an agent when this tool is appropriate. It does not explicitly name alternatives or exclusions, but the context is unambiguous enough for selection among the card tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
job_card_summarySummarize a day or a weekA
Hours and value for a day or a week: the job cards touched, the hours per worker, and the labor, materials and total value, kept per currency. A week runs Monday to Sunday. Touched means a labor or material entry dated inside the window.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | A date inside the window, YYYY-MM-DD. Default today | |
| span | No | day (default) is the date itself; week is the Monday to Sunday containing it |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It adds beneficial context: the definition of 'touched', the Monday-to-Sunday week boundary, and per-currency breakdown. However, it does not explicitly state that the operation is read-only, idempotent, or side-effect free, and it gives no indication of how missing data or multiple currencies are handled. These traits are largely inferable from the word 'summary', but the description itself does not disclose them.
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 filler: the first gives the high-level output, the second defines the week, and the third defines inclusion. Each sentence earns its place, and the most important concept ('touched') is defined clearly. Structure is efficient 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?
For a tool with only two optional parameters and no output schema, the description explains what the summary contains (hours, value, per worker, per currency) and how the window is determined. The absence of an output schema is partially mitigated by the enumeration of output categories. Minor gaps remain (e.g., behavior with no entries, multi-currency presentation), but given its low complexity, the definition 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 coverage is 100%, so the baseline is 3, but the description enriches the parameters by explaining how 'date' selects the window and how 'span' maps to a calendar week. Crucially, it introduces the 'touched' rule, which defines which job cards are included based on dated entries. This adds meaning beyond the schema's plain descriptions of date and span.
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 states a specific verb–resource relationship: summarizing hours and value for a day or week, covering job cards touched, hours per worker, and labor/material/total value per currency. This clearly distinguishes it from siblings like job_card_list (raw entries) or job_card_log_labor (recording entries). The title 'Summarize a day or a week' reinforces the exact scope without ambiguity.
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 clear context on the time window ('A week runs Monday to Sunday') and the inclusion rule ('Touched means a labor or material entry dated inside the window'), which helps an agent decide between day and week spans. However, it offers no explicit guidance on when to choose this tool over siblings like job_card_get or job_card_list, nor does it mention exclusions or alternatives. The usage context is useful but not prescriptive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
job_card_update_statusMove a job card one stepA
Move one job card exactly one step: open, in_progress, done, invoiced, archived, stamping the date and an optional note into its history. A skipped or backwards step is refused and nothing is written. Archiving a finished job frees a free-tier slot.
| Name | Required | Description | Default |
|---|---|---|---|
| card | Yes | The job card id, e.g. JC-2026-0003, or the client name when only one card has it | |
| date | No | The date to stamp the step with, YYYY-MM-DD. Default today | |
| note | No | ||
| status | Yes | The next step for this card: open, in_progress, done, invoiced, archived. in-progress is accepted too |
TDQS
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 does disclose that skipped/backwards steps are refused and nothing is written, and that archiving frees a slot. However, it does not mention whether the operation is idempotent, what happens if the card is already in the target status, or any permission requirements. This is moderate coverage for a mutation 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 concise and front-loaded, with the key action and statuses in the first sentence. The additional constraints are stated in one sentence each, and there is no filler. Every sentence adds important information.
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 schema already documents parameters and there is no output schema, the description covers the critical aspects: the exact statuses, the one-step rule, the refusal behavior, and the archiving side effect. It could be slightly more complete with mention of what the response contains or error handling, but for this simple mutation tool it is adequate.
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 75%, so most parameters have descriptions. The description adds the concept of 'one exactly one step' which clarifies the status parameter's roleable. However, it does not explain the 'date' and 'note' parameters beyond what the schema says (default today, optional). The description adds some value but no significant new semantics, so baseline 3 is appropriate.
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 verb 'move' and the resource 'job card', and specifies the exact set of statuses. It distinguishes itself from siblings by focusing on status transitions, while other tools like job_card_log_labor handle different 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?
The description explicitly states when to use this tool (to advance a job card by one step) and what is not allowed (skipped or backwards steps are refused). It also mentions that archiving frees a slot, which is a key context for deciding when to use this tool. It does not explicitly name alternatives, but the set of statuses and the refusal rule make the usage context clear.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | License key from the checkout confirmation page |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
11 tool updates
v0.22.0- First observed
job_card_create - First observed
job_card_delete - First observed
job_card_get - First observed
job_card_list - First observed
job_card_log_labor - First observed
job_card_log_material - First observed
job_card_print - First observed
job_card_summary - First observed
job_card_update_status - First observed
license_activate - First observed
license_status
TDQS
Scored across 11 tools
Each tool maps to a distinct operation: license activation/status are separate from the job card lifecycle, and create, get, list, log, update, print, delete, and summary are clearly differentiated. There is no meaningful overlap or ambiguity between tools.
The naming is generally consistent with a job_card_ prefix and snake_case verb suffixes like create, log_labor, list, get, and delete. Two names, job_card_summary and license_status, use nouns instead of verbs, which is a minor deviation from a strict verb_noun pattern but still predictable.
Eleven tools is well-scoped for a job card management server: license handling, card lifecycle, labor/material logging, retrieval, summary, printing, and deletion are all covered without redundant tools. Each tool earns its place in the workflow.
The core job card lifecycle is well covered: create, read, list, update status, log labor and materials, print, summarize, and delete. The main gap is that logged labor/material entries cannot be edited, voided, or removed, and card details cannot be changed after creation, which can create a dead end if a mistake is made.
Maintenance
Related MCP Connectors
Job cards for trades and field service: hours and materials per job, open to invoiced.
Job orders for trades and field work: parts, labour, status, completion report, invoice payload.
- JobkeeprOAuthcom.jobkeepr
Manage jobs, customers, scheduling, estimates and invoices for a field service business.
- ObraOAuthcom.tryobra
Construction job costing: ask how a project is doing, capture receipts, record transactions.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables recording, querying, and summarizing daily work entries with tags using a local SQLite database. Supports work logging, search, timeline queries, tag management, and automated reminders for tracking daily tasks.-
- AlicenseAqualityBmaintenanceEnables tracking work time with start/stop timers, logging entries, and generating reports.46 npm31 PyPIMIT
- AlicenseNot gradedqualityBmaintenanceA local, UI-less timesheet application served via MCP, letting AI assistants log hours, correct entries, generate monthly reports, and compute Finnish-holiday-aware working-time math for invoicing.AGPL 3.0
- FlicenseNot gradedqualityAmaintenanceEnables tracking worked hours by client, project, and task, with monthly/daily reports and natural language interaction through Claude.-