Skip to main content
Glama
theluckystrike

mcp-service-agreement

mcp-service-agreement

MCP server for service agreements for freelancers: scope, deliverables, rate, termination and liability, rendered for signing. Service agreements for freelancers: scope, deliverables, rate, termination and liability, rendered for signing.

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/service-agreement 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/service-agreement/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 service-agreement.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-service-agreement.git
cd mcp-service-agreement
npm install && npm run build

Then point your client at the built entry point:

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

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

Read-only mirror of mcp-servers/servers/service-agreement. See MIRROR.md.

In the official MCP Registry (io.github.theluckystrike/service-agreement). An mcp service agreement writer for freelancers who are about to start client work and do not want to copy a rotting template off the internet again. Give it 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, and it stores the agreement and renders clean Markdown -- or print-ready HTML -- with a signature block for both sides. A before-you-send-it checklist lists missing fields and flags one-sided gaps neutrally, like an agreement with no termination clause. A built-in clause library covers IP assignment, confidentiality, late payment interest, kill fee and revision rounds, filled with your agreement's own details. Every render carries a one-line note that it is a template, not legal advice. Everything stays on this machine; there is no account and no network call.

Built by theluckystrike.

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

Related MCP server: open-agreements

Install

Claude Desktop

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

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

Claude Code

claude mcp add service-agreement -- npx -y @theluckystrike/mcp-service-agreement

Cursor

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

Tools

tool

what it does

agreement_create

Write an agreement: parties, scope, deliverables, rate and payment terms, dates, termination notice, liability cap, jurisdiction. Stores it and returns the rendered Markdown. Returns SA-YYYY-NNNN

agreement_get

Read one agreement in full by SA number or client name, with its status history

agreement_list

List agreements newest first; filter by status and client

agreement_update_status

Move the agreement exactly one step -- draft, sent, signed, expired -- stamping date and note into its history

clause_library

The five built-in clauses: IP assignment, mutual confidentiality, late payment interest, kill fee, revision rounds. Pro: full texts with the agreement's variables filled in

agreement_render

Render for signing: Markdown, or self-contained HTML with print CSS (Pro). Includes the signature block and the template-not-legal-advice line

agreement_checklist

The before-you-send-it checklist: missing fields and one-sided gaps flagged neutrally

license_status / license_activate

Free or Pro, and the key

Free vs Pro

Free

Pro

Active agreements

3

Unlimited

Core template (parties, services, deliverables, payment, term, termination, liability, jurisdiction, signatures)

Yes

Yes

Markdown rendering

Yes

Yes

Before-you-send checklist

Yes

Yes

Clause library

Titles and summaries

Full texts, variables filled

HTML rendering, print-ready

No

Yes

The document is never metered. Three active agreements covers a working freelancer's live engagements, and an agreement stops counting the moment it expires, so writing, reading, checklists and Markdown stay free for good. What Pro adds is the full clause library, print-ready HTML, and unlimited active agreements.

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

Every rendered agreement ends with one line: "This agreement is a template, not legal advice." The checklist flags gaps neutrally -- what the agreement says as written, for both parties -- and never tells anyone what the law is or what to do.

Privacy

All data stays local, in ${XDG_DATA_HOME:-~/.local/share}/mcp-servers/service-agreement/. Two files: agreements.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

9 tools
agreement_checklistCheck an agreement before you send itA

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
agreementYesThe agreement id, e.g. SA-2026-0003, or the client name when only one agreement has it

TDQS

A4.2/5.0
Behavior4/5

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

The description explicitly states 'Reads only,' which is critical behavioral transparency given no annotations are provided. It also discloses the neutral, non-judgmental framing of flagged terms ('as written, what the gap means for both parties'), which helps the agent understand the tool's output tone and scope. It doesn't detail output format, but the read-only disclosure carries significant weight.

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 core purpose is front-loaded ('before-you-send-it checklist'), and the second sentence adds valuable detail about flagging behavior 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 single-parameter read-only tool with 100% schema coverage, the description is nearly complete. It explains what the tool does, its read-only nature, and the neutral framing of flagged terms. The only minor gap is not describing the exact output structure, but with no output schema and a simple checklist concept, the description is sufficient for an agent to select and invoke the tool 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 coverage is 100%, so the schema already documents the single parameter. The description adds context by implying the parameter is an agreement identifier, but it doesn't add meaning beyond the schema's example and explanation. Baseline 3 is appropriate when the schema does the heavy lifting.

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 ('check'), a specific resource ('one agreement'), and a clear scope ('before-you-send-it checklist'). It distinguishes itself from siblings like agreement_get and agreement_list by focusing on missing fields and gap analysis, not just retrieval or listing.

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 clearly implies when to use this tool: before sending an agreement, to review missing fields and flagged terms. It doesn't explicitly name alternatives or exclusions, but the 'before-you-send-it' framing and the focus on missing fields provide clear context that separates it from agreement_get (retrieval) and agreement_render (formatting).

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

agreement_createWrite a service agreementA

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNo
scopeYesThe services the freelancer provides, e.g. Design and build of a five-page marketing site, with two weeks of post-launch fixes
clientYesWho the work is for, e.g. Brightleaf Studio
clausesNoIds of library clauses to include, from clause_library: ip_assignment, confidentiality, late_payment, kill_fee, revision_rounds. The clause library is a Pro feature
currencyYesISO code the rate and cap are in
end_dateNoThe date the engagement ends, YYYY-MM-DD. Leave unset for an open-ended engagement
rate_unitYesWhat the rate buys: an hour, a day, or the whole project
freelancerYesWho does the work, e.g. Anna Nowak, or Nowak Design
rate_centsYesThe rate in whole cents. 8500 is 85.00
start_dateNoThe date work begins, YYYY-MM-DD. May be in the future; it is a plan, not a log
deliverablesYesWhat the client receives at the end, e.g. ["Five-page site deployed to the client's host", "Handover document"]
jurisdictionNoThe governing law and courts, e.g. England and Wales, or the State of New York
payment_termsYesWhen and how it is paid, e.g. Net 14 from invoice date, or 50% on signing and 50% on delivery
client_addressNo
freelancer_addressNo
liability_cap_centsNoThe most the freelancer can be liable for, in whole cents. Leave unset and liability is uncapped, which the checklist flags
termination_notice_daysNoDays of written notice either party must give to end the agreement, e.g. 14

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the full behavioral burden. It discloses that the tool stores the agreement and returns it rendered as Markdown with a signature block, and mentions the free-tier quota with a release mechanism. It does not cover error handling or validation, but the main side effects are clear.

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?

Three concise sentences, no filler. The purpose is front-loaded, the content list is compact, and the output/quota info is tacked on efficiently. Every sentence earns its place.

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 17 parameters, no output schema, and no annotations, the description covers the main purpose, the output format, and a key quota constraint. It does not detail all parameters, but the schema does. The omission of error conditions and interaction with siblings like agreement_checklist is a minor gap, but overall the description is adequate 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.

Parameters3/5

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

Schema description coverage is 82%, so the schema already documents most parameters. The description adds a high-level summary of what the agreement includes, but does not clarify format or constraints beyond what the schema provides. This meets the baseline for high coverage without adding significant value.

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's function: writing a service agreement between freelancer and client. It enumerates the key sections (parties, scope, deliverables, rate, payment terms, dates, termination, liability, jurisdiction) and distinguishes itself from siblings by noting it stores the agreement and returns rendered Markdown. This is specific and unambiguous.

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 provides context ('before the work starts') and a constraint (free tier: 3 active agreements), which tells an agent when this tool is appropriate. It doesn't explicitly name alternatives like agreement_update_status for modifications, but the create-vs-update distinction is implied by the verb and the sibling list. A clear when-not-to-use statement would elevate this to 5.

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

agreement_getRead one agreementA

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
agreementYesThe agreement id, e.g. SA-2026-0003, or the client name when only one agreement has it

TDQS

A4.2/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 burden and does well: 'Reads only' explicitly signals a non-mutating, safe operation, and the field enumeration tells the agent what to expect in the result. It does not cover failure modes or permissions, but those are less critical for a simple read.

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?

One front-loaded sentence states the action and identifier options before listing the returned content, with no filler. The long enumeration is justified because there is no output schema to carry that information.

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 one-parameter read tool with no output schema, the description covers both how to identify the agreement and what will be returned. The client-name uniqueness constraint lives only in the schema, but the schema is available to the agent, so the definition is complete enough.

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 baseline 3 applies. The description repeats the identifier options from the schema but omits the caveat that client name works 'when only one agreement has it'; it adds no new parameter meaning.

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 — 'Read one service agreement in full' — then enumerates the contained fields and closes with 'Reads only,' which distinguishes it from create/update siblings. The title and description align, and the tool's scope is unmistakable.

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 need the full detail of one agreement selected by SA number or client name. It does not explicitly name alternatives or state when not to use it, so it stops just short of a 5.

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

agreement_listList agreementsA

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
clientNoOnly agreements whose client contains this text, case-insensitive
statusNoOnly agreements at this status: draft, sent, signed, expired

TDQS

A4.2/5.0
Behavior4/5

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

No annotations are present, so the description carries the burden. It adds ordering behavior ('newest first'), a business rule ('active until expired'), and a quota constraint ('free tier holds 3 active agreements'), which go beyond the schema. It does not mention pagination or explicitly state read-only, but listing inherently implies read-only and the added constraints are valuable.

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 three concise sentences: the main action and ordering are front-loaded, followed by returned fields and filters, then a relevant business rule. There is no waste; every sentence earns its place.

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 simple list tool with two optional filters, the description covers purpose, ordering, returned fields, filters, and a business constraint. The only minor gap is pagination or result limits, which are not mentioned, but for this tool the provided context is largely sufficient.

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 coverage is 100%, with both client and status already described with their semantics. The description only echoes 'Filter by status and by client' without adding new meaning. Since the schema already provides parameter details, the description adds no extra value beyond confirmation.

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 and resource ('List service agreements'), specifies ordering ('newest first'), enumerates the returned fields (parties, status, rate, dates, clauses), and lists the two filters. This clearly distinguishes it from siblings like agreement_get (single retrieval) and agreement_create (creation).

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 listing intent obvious and mentions the filtering options, but it does not explicitly contrast with alternatives like agreement_get or state when not to use it. The 'list' verb and filter semantics imply a browse scenario, but no direct sibling differentiation is provided.

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

agreement_renderRender an agreement for signingA

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNomarkdown (default) or html. The HTML carries its own styling and references nothing external. HTML is a Pro feature
agreementYesThe agreement id, e.g. SA-2026-0003, or the client name when only one agreement has it

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries full behavioral burden. It explicitly states 'Writes nothing' (read-only), discloses that HTML is self-contained and a Pro feature, and lists what the rendered output contains. Minor gap: it doesn't explicitly state the return format (e.g., string) or error behavior, but the format is implied by the format parameter.

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 wasted words. The core purpose is front-loaded, followed by a compact enumeration of document contents and a clear format constraint. Every sentence earns its place.

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 two-parameter tool with no output schema, the description covers purpose, contents, format, and side effects. It could explicitly state that the output is a document string and how missing agreements are handled, but these are minor omissions. Overall sufficient for correct invocation.

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 coverage is 100%, so the schema already documents both parameters fully. The description adds only the Pro feature note for HTML and the self-containment detail, which duplicates the schema description. It provides no substantive additional meaning beyond the schema.

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 (render) and resource (service agreement), and enumerates the exact sections included, making its function unmistakable. It clearly differentiates from siblings by the action – rendering a document for signing, not creating, retrieving, or updating status.

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?

It conveys a clear context: rendering a document ready to send and sign, and mentions format options (markdown vs html). However, it does not explicitly contrast with alternatives like agreement_get (which returns raw data) or agreement_update_status, so exclusions are left implicit rather than stated.

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

agreement_update_statusMove an agreement one stepA

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoThe date to stamp the step with, YYYY-MM-DD. Default today
noteNo
statusYesThe next step for this agreement: draft, sent, signed, expired
agreementYesThe agreement id, e.g. SA-2026-0003, or the client name when only one agreement 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 burden. It discloses key behaviors: the step must be exactly one forward move, invalid steps are refused atomically (nothing is written), and expiring a finished engagement frees a free-tier slot. It does not mention authentication, rate limits, or error handling, but the disclosed behaviors are substantive and go beyond the bare action.

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, front-loaded with the core action and immediate constraints. Every clause carries meaning: the step sequence, the refusal rule, and the free-tier side effect. No filler or redundancy.

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

Completeness3/5

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

The tool has 4 parameters, no output schema, and no annotations. The description covers the step logic and side effects but omits return value on success, potential errors (e.g., nonexistent agreement), and prerequisites. For a state-changing tool, this is a moderate gap; an agent might not know what to expect after a successful call.

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 75% (3 of 4 params described). The description adds meaning to the 'note' parameter (calls it optional) and reinforces the 'status' constraint (must be the next step). It does not repeat schema details but does add context for the undocumented note parameter, partially compensating for the gap.

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 ('Move') and a precise resource ('one agreement exactly one step') with the allowed states enumerated. It clearly distinguishes this from siblings like agreement_create or agreement_get by defining the action as a single forward step in a status sequence, with explicit refusal of invalid moves.

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 implies when to use this tool—when advancing an agreement's status—and even states constraints like 'a skipped or backwards step is refused.' However, it does not name alternative tools or explicitly say 'use this instead of X.' The guidance is present but implicit, not explicit.

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

clause_libraryList the built-in clause libraryA

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
agreementNoFill each clause body with this agreement's variables. Pro feature

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the full burden, and it does well by disclosing the return shape (title plus body text), the variable-substitution behavior with an agreement, and the free-tier limitation (titles and summaries only). It stops short of a 5 because it omits details such as error behavior or what happens without an agreement.

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?

Four short sentences front-load the action and resource, then cover optional-parameter behavior and tier restrictions without wasted words. The enumerated example clauses are useful context, not padding.

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 there is no output schema, the description appropriately explains what the tool returns and the fields involved. It covers variable substitution and tier limits well. It could be slightly more explicit about the default behavior when no agreement is passed, but the optional-parameter phrasing and free-tier note make this reasonably inferable.

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 single 'agreement' parameter already has a schema description that says 'Fill each clause body with this agreement's variables. Pro feature.' The tool description essentially restates this, adding no new semantic meaning. Since schema coverage is 100%, 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 ('List') with a concrete resource ('built-in clause library') and enumerates its contents, including the clause categories and the title/body structure. This makes it clearly distinct from the sibling agreement_* and license_* tools, which operate on agreement or license records rather than the static clause catalog.

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 using the tool: pass an agreement to fill clause bodies with that agreement's variables, and notes the Pro/free tier difference. It does not explicitly name alternatives or state when not to use the tool, but the intended usage is unambiguous enough for an agent.

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.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 9 tool updatesv0.22.0
    • First observedagreement_checklist
    • First observedagreement_create
    • First observedagreement_get
    • First observedagreement_list
    • First observedagreement_render
    • First observedagreement_update_status
    • First observedclause_library
    • First observedlicense_activate
    • First observedlicense_status

TDQS

A4.1/5.0

Scored across 9 tools

Disambiguation4/5

The agreement tools are split by action (create/get/list/update_status/render/checklist) and the license tools are clearly separate, so an agent can usually pick the right one. The only mild ambiguity is that agreement_create and agreement_render both produce Markdown output, while agreement_checklist could be mistaken for a validation step rather than a read-only check.

Naming Consistency4/5

Most tools follow an agreement_<verb pattern, and license_status/license_activate keep the same convention. The exceptions are agreement_checklist and clause_library, which use nouns instead of actions, creating a small but noticeable deviation.

Tool Count5/5

Nine tools is well-scoped for a service-agreement server: CRUD-like agreement operations, rendering, checklist validation, a clause library, and license management all earn their place. The count feels intentional rather than bloated or sparse.

Completeness3/5

The set covers creating, reading, listing, status transitions, rendering, validation, clause lookup, and license activation, so the main lifecycle is represented. A clear gap is the absence of any way to update an agreement's content after creation; agents cannot fix a mistake or revise terms without creating a new agreement.

Maintenance

ActivityNo data
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers