service-contract
Write a freelance service contract: scope, deliverables, rate, termination, liability, signatures.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"service-contract": {
"command": "uvx",
"args": [
"https://github.com/theluckystrike/mcp-servers/releases/download/v0.22.0/service-agreement.mcpb"
]
}
}
}Runnable packages
0.22.0stdioRemote endpoints
https://mcp.zovo.one/mcp/service-contractstreamable-httpWhat it can do
Tool inventory
Tools (9)
🟡agreement_create(freelancer, client, scope, deliverables, rate_cents, ...)
Write a service agreement between a freelancer and a client before the work starts: the parties, the scope of services, the deliverables, the rate and payment terms, start and end dates, a termination notice period, a liability cap and the governing jurisdiction. Stores the agreement and returns it rendered as clean Markdown with a signature block. Free tier: 3 active agreements; expiring a finished one frees its slot.
Input Schema
{
"type": "object",
"properties": {
"freelancer": {
"type": "string",
"maxLength": 200,
"description": "Who does the work, e.g. Anna Nowak, or Nowak Design"
},
"client": {
"type": "string",
"maxLength": 200,
"description": "Who the work is for, e.g. Brightleaf Studio"
},
"scope": {
"type": "string",
"maxLength": 4000,
"description": "The services the freelancer provides, e.g. Design and build of a five-page marketing site, with two weeks of post-launch fixes"
},
"deliverables": {
"type": "array",
"items": {
"type": "string",
"maxLength": 400
},
"minItems": 1,
"maxItems": 50,
"description": "What the client receives at the end, e.g. [\"Five-page site deployed to the client's host\", \"Handover document\"]"
},
"rate_cents": {
"type": "integer",
"minimum": 0,
"maximum": 100000000000000,
"description": "The rate in whole cents. 8500 is 85.00"
},
"rate_unit": {
"type": "string",
"enum": [
"hour",
"day",
"project"
],
"description": "What the rate buys: an hour, a day, or the whole project"
},
"currency": {
"type": "string",
"pattern": "^[A-Za-z]{3}$",
"description": "ISO code the rate and cap are in"
},
"payment_terms": {
"type": "string",
"maxLength": 500,
"description": "When and how it is paid, e.g. Net 14 from invoice date, or 50% on signing and 50% on delivery"
},
"start_date": {
"type": "string",
"maxLength": 10,
"description": "The date work begins, YYYY-MM-DD. May be in the future; it is a plan, not a log"
},
"end_date": {
"type": "string",
"maxLength": 10,
"description": "The date the engagement ends, YYYY-MM-DD. Leave unset for an open-ended engagement"
},
"termination_notice_days": {
"type": "integer",
"minimum": 0,
"maximum": 365,
"description": "Days of written notice either party must give to end the agreement, e.g. 14"
},
"liability_cap_cents": {
"type": "integer",
"minimum": 0,
"maximum": 100000000000000,
"description": "The most the freelancer can be liable for, in whole cents. Leave unset and liability is uncapped, which the checklist flags"
},
"jurisdiction": {
"type": "string",
"maxLength": 300,
"description": "The governing law and courts, e.g. England and Wales, or the State of New York"
},
"clauses": {
"type": "array",
"items": {
"type": "string",
"maxLength": 40
},
"maxItems": 20,
"description": "Ids of library clauses to include, from clause_library: ip_assignment, confidentiality, late_payment, kill_fee, revision_rounds. The clause library is a Pro feature"
},
"freelancer_address": {
"type": "string",
"maxLength": 400
},
"client_address": {
"type": "string",
"maxLength": 400
},
"note": {
"type": "string",
"maxLength": 4000
}
},
"required": [
"freelancer",
"client",
"scope",
"deliverables",
"rate_cents",
"rate_unit",
"currency",
"payment_terms"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢agreement_get(agreement)
Read one service agreement in full by SA number or client name: parties, scope, deliverables, rate and payment terms, dates, termination, liability cap, jurisdiction, the clauses it carries, its status and its status history. Reads only.
Input Schema
{
"type": "object",
"properties": {
"agreement": {
"type": "string",
"maxLength": 200,
"description": "The agreement id, e.g. SA-2026-0003, or the client name when only one agreement has it"
}
},
"required": [
"agreement"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢agreement_list(status, client)
List service agreements newest first: parties, status, rate, dates and the clauses each carries. Filter by status and by client. An agreement is active until it is expired; the free tier holds 3 active agreements.
Input Schema
{
"type": "object",
"properties": {
"status": {
"type": "string",
"maxLength": 20,
"description": "Only agreements at this status: draft, sent, signed, expired"
},
"client": {
"type": "string",
"maxLength": 200,
"description": "Only agreements whose client contains this text, case-insensitive"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡agreement_update_status(agreement, status, date, note)
Move one agreement exactly one step: draft, sent, signed, expired, stamping the date and an optional note into its history. A skipped or backwards step is refused and nothing is written. Expiring a finished engagement frees a free-tier slot.
Input Schema
{
"type": "object",
"properties": {
"agreement": {
"type": "string",
"maxLength": 200,
"description": "The agreement id, e.g. SA-2026-0003, or the client name when only one agreement has it"
},
"status": {
"type": "string",
"maxLength": 20,
"description": "The next step for this agreement: draft, sent, signed, expired"
},
"date": {
"type": "string",
"maxLength": 10,
"description": "The date to stamp the step with, YYYY-MM-DD. Default today"
},
"note": {
"type": "string",
"maxLength": 4000
}
},
"required": [
"agreement",
"status"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢clause_library(agreement)
List the built-in clause library: intellectual property assignment, mutual confidentiality, late payment interest, kill fee and revision rounds. Each clause is a title plus a body text. Pass an agreement and, on Pro, every body comes back with that agreement's variables filled in. The free tier lists titles and summaries; the full texts are a Pro feature.
Input Schema
{
"type": "object",
"properties": {
"agreement": {
"type": "string",
"maxLength": 200,
"description": "Fill each clause body with this agreement's variables. Pro feature"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡agreement_render(agreement, format)
Render a service agreement ready to send and sign: the parties, the services, the deliverables, the payment terms, the term, termination, liability, jurisdiction, any library clauses it carries, and a signature block for both parties. Markdown, or self-contained HTML with print CSS that needs nothing from the network. HTML is a Pro feature. Writes nothing.
Input Schema
{
"type": "object",
"properties": {
"agreement": {
"type": "string",
"maxLength": 200,
"description": "The agreement id, e.g. SA-2026-0003, or the client name when only one agreement has it"
},
"format": {
"type": "string",
"enum": [
"markdown",
"html"
],
"description": "markdown (default) or html. The HTML carries its own styling and references nothing external. HTML is a Pro feature"
}
},
"required": [
"agreement"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢agreement_checklist(agreement)
The before-you-send-it checklist for one agreement: every missing field is listed, and terms whose absence cuts one way are flagged neutrally -- as written, what the gap means for both parties -- such as no termination clause or an uncapped liability. Reads only.
Input Schema
{
"type": "object",
"properties": {
"agreement": {
"type": "string",
"maxLength": 200,
"description": "The agreement id, e.g. SA-2026-0003, or the client name when only one agreement has it"
}
},
"required": [
"agreement"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢license_status
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.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "http://json-schema.org/draft-07/schema#"
}⚪license_activate(key)
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.
Input Schema
{
"type": "object",
"properties": {
"key": {
"type": "string",
"description": "License key from checkout, MCPL1.<payload>.<signature>"
}
},
"required": [
"key"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Community
Evidence