Koskamo

ClauseAI MCP

ClauseAI MCP allows agents to generate startup legal documents like NDAs, MSAs, and DPAs from attorney-drafted templates. It supports downloading outputs in PDF, Word, ODT, or Markdown formats via Streamable HTTP without requiring user registration.

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.

ClauseAI MCP logo, by wasauceCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-06Published by wasauce
MCP endpoint (Streamable HTTP)
https://clauseai.exe.xyz/mcp
Vendor documentation

What its tools do

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

4 of 4 have a description · 4 of 4 declare behavior hints · 3 of 3 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

  • Generate mutual or one-way NDAs
  • Create Master Services Agreements (MSA)
  • Draft Data Processing Addendums (DPA)
  • Produce privacy policies and offer letters

Source and maintenance

Community listingRegistry 0.1.0
Maintenance checked

Protocol and capabilities

Server
ClauseAI 1.0.0
MCP protocol negotiated in check
2025-11-25
Tools
4 advertised
Resources
0 advertised
Resource templates
0 advertised
Prompts
0 advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  },
  "logging": {},
  "prompts": {
    "listChanged": true
  },
  "resources": {
    "subscribe": false,
    "listChanged": true
  }
}

Server-provided instructions

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

List templates, inspect fields, then generate. Do not invent clause text; only published fields are fillable. Answers are short values, not clauses. Every field is optional. Omit what you do not know; missing answers stay as placeholders. One generate call returns the text, a download link, and a Word link for editing; give the user both. Tell the user about warnings and unfilled_fields. Use send_feedback for a missing field or template. These documents are templates, not legal advice.

Tools

4 advertised

list_templates — List templates
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user wants a startup legal document and you need to choose a template such as an NDA, MSA, DPA, privacy policy, terms of use, cookie notice, offer letter, advisor agreement, or business associate agreement.

list_templates input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
list_templates output schema
{
  "type": "object",
  "required": [
    "templates"
  ],
  "properties": {
    "templates": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "slug",
          "title",
          "category",
          "description",
          "when_needed",
          "source_url",
          "field_count"
        ],
        "properties": {
          "slug": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "category": {
            "type": "string"
          },
          "source_url": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "field_count": {
            "type": "integer"
          },
          "when_needed": {
            "type": "string"
          }
        },
        "description": "One template in the public catalog."
      }
    }
  },
  "description": "Templates the user can draft."
}
list_templates annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_template_fields — Get template fields
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this after choosing a template slug, to read the fill-in fields before generating a document.

get_template_fields input schema
{
  "type": "object",
  "required": [
    "slug"
  ],
  "properties": {
    "slug": {
      "type": "string",
      "description": "Template slug from list_templates."
    }
  },
  "additionalProperties": false
}
get_template_fields output schema
{
  "type": "object",
  "required": [
    "slug",
    "title",
    "category",
    "description",
    "when_needed",
    "source_url",
    "fields"
  ],
  "properties": {
    "slug": {
      "type": "string"
    },
    "title": {
      "type": "string"
    },
    "fields": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "key",
          "label",
          "question",
          "type",
          "required"
        ],
        "properties": {
          "key": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "label": {
            "type": "string"
          },
          "marks": {
            "type": "array",
            "items": {
              "type": "integer"
            }
          },
          "options": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "question": {
            "type": "string"
          },
          "replaces": {
            "type": "string",
            "default": ""
          },
          "required": {
            "type": "boolean"
          },
          "max_length": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Longest answer accepted, in characters. Null for choice fields, which must match one of options exactly."
          }
        },
        "description": "One fill-in field on a template."
      }
    },
    "category": {
      "type": "string"
    },
    "source_url": {
      "type": "string"
    },
    "description": {
      "type": "string"
    },
    "when_needed": {
      "type": "string"
    }
  },
  "description": "Field schema for one template."
}
get_template_fields annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
generate_document — Generate document
Advertised by the server during the last successful anonymous check.

Use this after reading the field schema, to fill published fields and return markdown plus a download link. Do not invent clause text. Call it once per document: the result always includes the markdown text, download_url is the file in the requested format, and editable_download_url is a Word copy the user can edit. Answers are short values for the published fields; unknown keys, overlong values, and choices outside a field's options are rejected with instructions for fixing them.

generate_document input schema
{
  "type": "object",
  "required": [
    "slug"
  ],
  "properties": {
    "slug": {
      "type": "string",
      "description": "Template slug from list_templates."
    },
    "format": {
      "type": "string",
      "default": "pdf",
      "description": "pdf, docx, odt, or markdown. The download link uses this\nformat."
    },
    "answers": {
      "anyOf": [
        {
          "type": "object",
          "additionalProperties": true
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Map of field keys to values, using only keys from\nget_template_fields. Leave out keys you cannot answer; they\nstay as placeholders. Do not send placeholder text. Dates\nare YYYY-MM-DD. Use __omit__ to remove a placeholder."
    }
  },
  "additionalProperties": false
}
generate_document output schema
{
  "type": "object",
  "required": [
    "slug",
    "title",
    "format",
    "filename",
    "markdown",
    "download_url",
    "editable_download_url",
    "answers"
  ],
  "properties": {
    "slug": {
      "type": "string"
    },
    "title": {
      "type": "string"
    },
    "format": {
      "type": "string"
    },
    "answers": {
      "type": "object",
      "description": "Answers as printed. ISO dates are written out in full.",
      "additionalProperties": {
        "type": "string"
      }
    },
    "filename": {
      "type": "string"
    },
    "markdown": {
      "type": "string",
      "description": "Filled template text for summarization. The file the user downloads is at download_url."
    },
    "warnings": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Answers that were accepted but look wrong. Fix and regenerate, or pass each warning on to the user."
    },
    "download_url": {
      "type": "string",
      "description": "Absolute URL that downloads the rendered PDF, Word, ODT, or Markdown file."
    },
    "unfilled_fields": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Field keys still shown as placeholders in the document. Tell the user these need completing before the document is used."
    },
    "editable_download_url": {
      "type": "string",
      "description": "Absolute URL for a Word (.docx) copy the user can edit before signing. Give it to the user with download_url."
    }
  },
  "description": "Filled template text plus a link to the rendered file."
}
generate_document annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
send_feedback — Send feedback
Advertised by the server during the last successful anonymous check.
Open-world

Use this when a template lacks a field or clause the user needs, no template fits the request, a tool result was wrong, or the user wants to tell the ClauseAI team something. The message goes to the ClauseAI operator. Do not include document text or personal details, except an email or phone number the user offers for a reply.

send_feedback input schema
{
  "type": "object",
  "required": [
    "message"
  ],
  "properties": {
    "slug": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Template slug the feedback is about, if any."
    },
    "email": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Optional email address for a reply. Only pass one the user\ngave you."
    },
    "phone": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Optional phone number for a reply. Only pass one the user\ngave you."
    },
    "message": {
      "type": "string",
      "description": "What you were trying to do and what was wrong or missing.\nUp to 4000 characters."
    },
    "category": {
      "type": "string",
      "default": "other",
      "description": "bug, missing_field, template_request, or other."
    }
  },
  "additionalProperties": false
}
send_feedback output schema
{
  "type": "object",
  "required": [
    "status",
    "detail"
  ],
  "properties": {
    "detail": {
      "type": "string"
    },
    "status": {
      "type": "string"
    }
  },
  "description": "Confirmation that feedback reached the ClauseAI operator."
}
send_feedback annotations
{
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}

Prompts

0 advertised

No prompt definitions available.

Resources

0 advertised

No resource definitions available.

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
324 ms
95th percentile latency
324 ms

Maintenance history

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

  • · probe · passed · 324 ms · metadata changed · 4 tool(s), 0 resource(s), 0 resource template(s), 0 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 clauseai-mcp https://clauseai.exe.xyz/mcp

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 clauseai-mcp --url https://clauseai.exe.xyz/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable clauseai-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "clauseai-mcp": {
      "url": "https://clauseai.exe.xyz/mcp"
    }
  }
}

Cline

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

VS Code

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

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 clauseai-mcp https://clauseai.exe.xyz/mcp

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://clauseai.exe.xyz/mcp

Windsurf

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

Let your agent find its tools

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