Koskamo

theluckystrike MCP Job Card

A community MCP server for managing on-site job cards, allowing users to log labor hours and materials per job, track status from open to invoiced, and generate printable cards with client signature lines for trades and field service teams.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

theluckystrike MCP Job Card logo, by theluckystrikeCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-07Published by theluckystrike
You need:Free tokens allow 600 calls an hour, a Pro key 6000; a token lasts 30 days from last use.Free tier needs no key.Install Works with Claude, Cursor, VS Code and other MCP cli … ents.
MCP endpoint (Streamable HTTP)
https://mcp.zovo.one/mcp/job-card
Vendor documentation

What its tools do

11 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

Read-only (1)

11 of 11 have a description · 11 of 11 declare behavior hints · 7 of 10 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Log labor hours and material costs for a specific job
  • Update job status from open to invoiced
  • Print a job card with client signature line
  • Generate weekly summary of hours and value per job

Source and maintenance

Community listingRegistry 0.23.0
Maintenance checked

Protocol and capabilities

Server
mcp-job-card 0.22.6
MCP protocol negotiated in check
2025-11-25
Tools
11 advertised
Resources
1 advertised
Resource templates
0 advertised
Prompts
1 advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  },
  "prompts": {
    "listChanged": true
  },
  "resources": {
    "listChanged": true
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Job cards for crews doing on-site work. It covers cards with client, site, job and schedule, labour hours by worker and materials used, the steps open, in progress, done, invoiced and archived, printable cards with a client signature line, and daily or weekly hours and value. Values are integer cents fixed when logged and kept per currency. Cards are stored per user account on McpStamp's hosted service. The free tier holds 10 active cards; archiving a finished job frees a slot. One lifetime key unlocks this server and all 58 others: https://mcp.zovo.one/buy/bundle?src=instr.job-card

Tools

11 advertised

job_card_create — Open a job card
Advertised by the server during the last successful anonymous check.

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.

job_card_create input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "client",
    "site",
    "description",
    "currency"
  ],
  "properties": {
    "note": {
      "type": "string",
      "maxLength": 2000
    },
    "site": {
      "type": "string",
      "maxLength": 400,
      "description": "Where the job is, e.g. 14 Nowa Street, flat 3"
    },
    "client": {
      "type": "string",
      "maxLength": 200,
      "description": "Who the job is for, e.g. Kowalski bathroom refit, or Acme Ltd"
    },
    "currency": {
      "type": "string",
      "pattern": "^[A-Za-z]{3}$",
      "description": "ISO code the rates and prices are in"
    },
    "description": {
      "type": "string",
      "maxLength": 2000,
      "description": "What the job is, e.g. Replace the consumer unit and certify"
    },
    "scheduled_date": {
      "type": "string",
      "maxLength": 10,
      "description": "The date the crew is due on site, YYYY-MM-DD. May be in the future; it is a plan, not a log"
    }
  },
  "additionalProperties": false
}
job_card_create annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
job_card_log_labor — Log hours on a job card
Advertised by the server during the last successful anonymous check.

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.

job_card_log_labor input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "card",
    "worker",
    "date",
    "hours",
    "rate_cents"
  ],
  "properties": {
    "card": {
      "type": "string",
      "maxLength": 200,
      "description": "The job card id, e.g. JC-2026-0003, or the client name when only one card has it"
    },
    "date": {
      "type": "string",
      "maxLength": 10,
      "description": "The day the work was done, YYYY-MM-DD. A future date is refused"
    },
    "note": {
      "type": "string",
      "maxLength": 2000,
      "description": "What was done, e.g. First fix, kitchen ring main"
    },
    "hours": {
      "type": "number",
      "maximum": 24,
      "description": "Hours worked, to the hundredth, e.g. 7.5 or 3.25. One entry is one worker's day at most",
      "exclusiveMinimum": 0
    },
    "worker": {
      "type": "string",
      "maxLength": 200,
      "description": "Who did the work, e.g. Anna"
    },
    "rate_cents": {
      "type": "integer",
      "maximum": 100000000000000,
      "minimum": 0,
      "description": "The hourly rate in whole cents. 4500 is 45.00 an hour"
    }
  },
  "additionalProperties": false
}
job_card_log_labor annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
job_card_log_material — Log materials used on a job card
Advertised by the server during the last successful anonymous check.

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.

job_card_log_material input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "card",
    "item",
    "date",
    "qty",
    "unit_cost_cents"
  ],
  "properties": {
    "qty": {
      "type": "number",
      "maximum": 1000000,
      "description": "How many, to the thousandth, e.g. 2 or 0.5",
      "exclusiveMinimum": 0
    },
    "card": {
      "type": "string",
      "maxLength": 200,
      "description": "The job card id, e.g. JC-2026-0003, or the client name when only one card has it"
    },
    "date": {
      "type": "string",
      "maxLength": 10,
      "description": "The day it went in, YYYY-MM-DD. A future date is refused"
    },
    "item": {
      "type": "string",
      "maxLength": 200,
      "description": "What went into the job, e.g. Copper pipe 15mm, or Consumer unit 10-way"
    },
    "note": {
      "type": "string",
      "maxLength": 2000
    },
    "unit_cost_cents": {
      "type": "integer",
      "maximum": 100000000000000,
      "minimum": 0,
      "description": "What one costs in whole cents. 1299 is 12.99"
    }
  },
  "additionalProperties": false
}
job_card_log_material annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
job_card_update_status — Move a job card one step
Advertised by the server during the last successful anonymous check.

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.

job_card_update_status input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "card",
    "status"
  ],
  "properties": {
    "card": {
      "type": "string",
      "maxLength": 200,
      "description": "The job card id, e.g. JC-2026-0003, or the client name when only one card has it"
    },
    "date": {
      "type": "string",
      "maxLength": 10,
      "description": "The date to stamp the step with, YYYY-MM-DD. Default today"
    },
    "note": {
      "type": "string",
      "maxLength": 2000
    },
    "status": {
      "type": "string",
      "maxLength": 20,
      "description": "The next step for this card: open, in_progress, done, invoiced, archived. in-progress is accepted too"
    }
  },
  "additionalProperties": false
}
job_card_update_status annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
job_card_list — List job cards
Advertised by the server during the last successful anonymous check.

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.

job_card_list input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "client": {
      "type": "string",
      "maxLength": 200,
      "description": "Only cards whose client contains this text, case-insensitive"
    },
    "status": {
      "type": "string",
      "maxLength": 20,
      "description": "Only cards at this status: open, in_progress, done, invoiced, archived"
    }
  },
  "additionalProperties": false
}
job_card_list annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
job_card_get — Read one job card with its running totals
Advertised by the server during the last successful anonymous check.

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.

job_card_get input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "card"
  ],
  "properties": {
    "card": {
      "type": "string",
      "maxLength": 200,
      "description": "The job card id, e.g. JC-2026-0003, or the client name when only one card has it"
    }
  },
  "additionalProperties": false
}
job_card_get annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
job_card_print — Render the card for the client to sign
Advertised by the server during the last successful anonymous check.

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.

job_card_print input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "card"
  ],
  "properties": {
    "card": {
      "type": "string",
      "maxLength": 200,
      "description": "The job card id, e.g. JC-2026-0003, or the client name when only one card has it"
    },
    "format": {
      "enum": [
        "markdown",
        "html"
      ],
      "type": "string",
      "description": "markdown (default) or html. The HTML carries its own styling and references nothing external"
    }
  },
  "additionalProperties": false
}
job_card_print annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
job_card_delete — Delete an empty job card
Advertised by the server during the last successful anonymous check.
Advertised destructive

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.

job_card_delete input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "card"
  ],
  "properties": {
    "card": {
      "type": "string",
      "maxLength": 200,
      "description": "The job card id, e.g. JC-2026-0003, or the client name when only one card has it"
    }
  },
  "additionalProperties": false
}
job_card_delete annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": true
}
job_card_summary — Summarize a day or a week
Advertised by the server during the last successful anonymous check.

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.

job_card_summary input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "date": {
      "type": "string",
      "maxLength": 10,
      "description": "A date inside the window, YYYY-MM-DD. Default today"
    },
    "span": {
      "enum": [
        "day",
        "week"
      ],
      "type": "string",
      "description": "day (default) is the date itself; week is the Monday to Sunday containing it"
    }
  },
  "additionalProperties": false
}
job_card_summary annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
license_status — License status
Advertised by the server during the last successful anonymous check.
Advertised read-only

Report this endpoint's licence state for your token as JSON: the product, the tier free or pro, why it is not Pro, and the checkout URL. Call it to explain a free-tier refusal. No arguments, nothing changes.

license_status input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {}
}
license_status annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
license_activate — Activate license
Advertised by the server during the last successful anonymous check.

Turn Pro on for this connection with key, an MCPL1.<payload>.<signature> issued at checkout for this server or the bundle. Data under your token stays; a wrong or expired key changes nothing. license_status confirms it.

license_activate input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "key"
  ],
  "properties": {
    "key": {
      "type": "string",
      "description": "License key from checkout, MCPL1.<payload>.<signature>"
    }
  },
  "additionalProperties": false
}
license_activate annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}

Prompts

1 advertised

upgrade_to_pro — Explain the upgrade

Advertised by the server during the last successful anonymous check.

Explain what Pro on the job-card server costs and exactly what the user has to do, without leaving the conversation.

feature
The capped feature that prompted this, if there was one

Resources

1 advertised

pricing — Pricing and upgrade

Advertised by the server during the last successful anonymous check.

What job-card costs, what Pro unlocks, the checkout link that carries this connection's token, and the one step a person has to take. Machine-readable; read it before telling a user how to lift a free-tier cap.

pricing URI
pricing://job-card

MIME type: application/json

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (1 of 1 answered).

  1. 2026-11-07: 1 of 1 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
1323 ms
95th percentile latency
1323 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 1323 ms · metadata changed · 11 tool(s), 1 resource(s), 0 resource template(s), 1 prompt(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http mcp-job-card https://mcp.zovo.one/mcp/job-card

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add mcp-job-card --url https://mcp.zovo.one/mcp/job-card

Cursor

Merge this server into .cursor/mcp.json in your project, then enable mcp-job-card in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "mcp-job-card": {
      "url": "https://mcp.zovo.one/mcp/job-card"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "mcp-job-card": {
      "type": "streamableHttp",
      "url": "https://mcp.zovo.one/mcp/job-card",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start mcp-job-card and inspect its tools.
VS Code configuration
{
  "servers": {
    "mcp-job-card": {
      "type": "http",
      "url": "https://mcp.zovo.one/mcp/job-card"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http mcp-job-card https://mcp.zovo.one/mcp/job-card

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://mcp.zovo.one/mcp/job-card

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "mcp-job-card": {
      "serverUrl": "https://mcp.zovo.one/mcp/job-card"
    }
  }
}

Let your agent find its tools

Find servers like theluckystrike MCP Job Card from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.