Dealroom

Draft and negotiate contracts clause by clause; a published formula proposes the compromise.

Should I use this

Quality & Safety

A
Description quality
98%
Schema completeness
82%
Naming quality
95%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (1)

  • LOWTool 'join_negotiation' description lacks action verbin join_negotiation

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~2,738Tokens (tool definitions)
~1.7 KBTypical response size
Significant attention impact (2.14% of 128k context)

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": {
    "dealroom": {
      "url": "https://dealroom.todo.law/api/v1/agent/mcp"
    }
  }
}

Remote endpoints

https://dealroom.todo.law/api/v1/agent/mcpstreamable-http

What it can do

Tool inventory

Tools (12)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢list_contract_types(lang)

Every contract type Dealroom can make, with the code to use as contractType, the guide slug, the governing laws and languages it is offered in, the role the caller can take (DPA and BAA only) and the inputs it asks for. Call this first to know what to ask the user. No API key needed.

Input Schema

{
  "type": "object",
  "properties": {
    "lang": {
      "type": "string",
      "enum": [
        "en",
        "es"
      ],
      "default": "en",
      "description": "Language of names and labels"
    }
  },
  "required": []
}
🟢generate_contract(contractType, governingLaw, language, title, party, ...)

Make a finished contract in one call: give the contract type, your side's details and, if you know them, the other side's. Clauses you leave out take the standard option. One prepaid credit is spent (the same price as any contract); with no credit the answer is HTTP 402 with code PAYMENT_REQUIRED and nothing is created. Returns the contract as Markdown, then the deal id, the link where the person can read it in Dealroom and the Markdown, HTML, PDF, DOCX and TXT links (free to fetch again).

Input Schema

{
  "type": "object",
  "properties": {
    "contractType": {
      "type": "string",
      "description": "Code (for example NDA) or guide slug (for example nda), from list_contract_types"
    },
    "governingLaw": {
      "type": "string",
      "enum": [
        "CALIFORNIA",
        "NEW_YORK",
        "ENGLAND_WALES",
        "SPAIN"
      ],
      "description": "Required when the contract type offers more than one"
    },
    "language": {
      "type": "string",
      "enum": [
        "en",
        "es"
      ],
      "default": "en"
    },
    "title": {
      "type": "string",
      "description": "Name of the deal; made from the parties when left out"
    },
    "party": {
      "type": "object",
      "description": "Your side (the side the API key acts for)",
      "properties": {
        "legalName": {
          "type": "string",
          "description": "Full legal name of the company or person"
        },
        "address": {
          "type": "string",
          "description": "Registered or postal address"
        },
        "taxId": {
          "type": "string",
          "description": "Company or tax number, where the contract shows one"
        },
        "signatoryName": {
          "type": "string",
          "description": "Name of the person who signs"
        },
        "signatoryTitle": {
          "type": "string",
          "description": "Title of the person who signs, for example CEO"
        },
        "email": {
          "type": "string",
          "format": "email"
        }
      },
      "required": [
        "legalName"
      ]
    },
    "counterparty": {
      "type": "object",
      "description": "The other side. Left out: its block stays blank for it to complete.",
      "properties": {
        "legalName": {
          "type": "string",
          "description": "Full legal name of the company or person"
        },
        "address": {
          "type": "string",
          "description": "Registered or postal address"
        },
        "taxId": {
          "type": "string",
          "description": "Company or tax number, where the contract shows one"
        },
        "signatoryName": {
          "type": "string",
          "description": "Name of the person who signs"
        },
        "signatoryTitle": {
          "type": "string",
          "description": "Title of the person who signs, for example CEO"
        },
        "email": {
          "type": "string",
          "format": "email"
        }
      },
      "required": [
        "legalName"
      ]
    },
    "role": {
      "type": "string",
      "description": "DPA and BAA only: the role you take (see roles in list_contract_types)"
    },
    "terms": {
      "type": "object",
      "additionalProperties": {
        "type": "string"
      },
      "description": "Inputs by id (see inputs in list_contract_types); required ones must be given"
    },
    "clauses": {
      "type": "object",
      "additionalProperties": {
        "type": "string"
      },
      "description": "Optional clause choices: clause id to option code (see get_template)"
    },
    "inline": {
      "type": "string",
      "enum": [
        "md",
        "html",
        "txt"
      ],
      "default": "md",
      "description": "The contract itself in the answer: md (Markdown, the default here), html or txt"
    },
    "idempotencyKey": {
      "type": "string",
      "description": "Send the same value when retrying, so a retry never makes or charges a second contract"
    }
  },
  "required": [
    "contractType",
    "party"
  ]
}
🟢list_templates(query)

List available contract templates with clauses, options, and bias values. Use this to understand which contract types are available and what options exist for each clause. Pass `query` to search by code, abbreviation or name in English or Spanish ("nda", "dpa", "hipaa", "confidencialidad"), best match first.

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Optional search: contract code, abbreviation or name (English or Spanish)"
    }
  },
  "required": []
}
🟢get_template(contractType)

Get full details for a specific contract template including all clauses and their options with bias values.

Input Schema

{
  "type": "object",
  "properties": {
    "contractType": {
      "type": "string",
      "description": "Contract type identifier",
      "enum": [
        "A2A_API_ACCESS",
        "ACTA_CONSEJO_ADMINISTRACION",
        "ACTA_JUNTA_GENERAL",
        "ADVERTISING_IO",
        "ADVISORY",
        "AFFILIATE_PROGRAM",
        "A2A_MONITORING",
        "PHANTOM_SHARES_GRANT",
        "RESIDENTIAL_TENANCY_GB",
        "RESIDENTIAL_TENANCY_US_CA",
        "DELAWARE_CERT_OF_INCORPORATION",
        "A2A_COMPUTE_PROCUREMENT",
        "CONSULTING",
        "A2A_CONTENT_LICENSE",
        "RESIDENTIAL_TENANCY_ES",
        "CONVERTIBLE_NOTE",
        "DATA_LICENSING",
        "DPA",
        "A2A_DATA_SHARING",
        "EMPLOYMENT",
        "CONTRATO_LABORAL",
        "EQUITY_INCENTIVE",
        "FOUNDERS",
        "BAA_NEGOTIATOR",
        "CESION_PI",
        "IP_ASSIGNMENT",
        "INFLUENCER_MARKETING",
        "JOINT_VENTURE",
        "A2A_KNOWLEDGE_ACCESS",
        "PHANTOM_SHARES_PLAN",
        "A2A_MARKETPLACE",
        "MSA",
        "NDA",
        "A2A_ORCHESTRATION",
        "A2A_PAYMENT_AUTHORIZATION",
        "PRIVACY_NOTICE",
        "SAFE",
        "SAAS",
        "SEED_INVESTMENT",
        "CONTRATO_SERVICIOS",
        "SHAREHOLDERS",
        "PACTO_SOCIOS",
        "SOFTWARE_DEVELOPMENT",
        "A2A_SUPPLY_CHAIN",
        "A2A_TASK_DELEGATION",
        "TECHNOLOGY_LICENSE",
        "TEMPLATE",
        "TERM_SHEET",
        "A2A_TOOL_LICENSE",
        "WHITE_LABEL_RESELLER"
      ]
    }
  },
  "required": [
    "contractType"
  ]
}
🟡create_playbook(name, contractType, governingLaw, contractLanguage, entries)

Create a negotiation playbook defining preferences for each clause: preferred option, priority (1-5), flexibility (1-5), red lines, and acceptable alternatives.

Input Schema

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "description": "Unique playbook name"
    },
    "contractType": {
      "type": "string",
      "description": "Contract type",
      "enum": [
        "A2A_API_ACCESS",
        "ACTA_CONSEJO_ADMINISTRACION",
        "ACTA_JUNTA_GENERAL",
        "ADVERTISING_IO",
        "ADVISORY",
        "AFFILIATE_PROGRAM",
        "A2A_MONITORING",
        "PHANTOM_SHARES_GRANT",
        "RESIDENTIAL_TENANCY_GB",
        "RESIDENTIAL_TENANCY_US_CA",
        "DELAWARE_CERT_OF_INCORPORATION",
        "A2A_COMPUTE_PROCUREMENT",
        "CONSULTING",
        "A2A_CONTENT_LICENSE",
        "RESIDENTIAL_TENANCY_ES",
        "CONVERTIBLE_NOTE",
        "DATA_LICENSING",
        "DPA",
        "A2A_DATA_SHARING",
        "EMPLOYMENT",
        "CONTRATO_LABORAL",
        "EQUITY_INCENTIVE",
        "FOUNDERS",
        "BAA_NEGOTIATOR",
        "CESION_PI",
        "IP_ASSIGNMENT",
        "INFLUENCER_MARKETING",
        "JOINT_VENTURE",
        "A2A_KNOWLEDGE_ACCESS",
        "PHANTOM_SHARES_PLAN",
        "A2A_MARKETPLACE",
        "MSA",
        "NDA",
        "A2A_ORCHESTRATION",
        "A2A_PAYMENT_AUTHORIZATION",
        "PRIVACY_NOTICE",
        "SAFE",
        "SAAS",
        "SEED_INVESTMENT",
        "CONTRATO_SERVICIOS",
        "SHAREHOLDERS",
        "PACTO_SOCIOS",
        "SOFTWARE_DEVELOPMENT",
        "A2A_SUPPLY_CHAIN",
        "A2A_TASK_DELEGATION",
        "TECHNOLOGY_LICENSE",
        "TEMPLATE",
        "TERM_SHEET",
        "A2A_TOOL_LICENSE",
        "WHITE_LABEL_RESELLER"
      ]
    },
    "governingLaw": {
      "type": "string",
      "enum": [
        "CALIFORNIA",
        "NEW_YORK",
        "ENGLAND_WALES",
        "SPAIN"
      ]
    },
    "contractLanguage": {
      "type": "string",
      "enum": [
        "en",
        "es"
      ],
      "default": "en"
    },
    "entries": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "clauseId": {
            "type": "string"
          },
          "preferredOptionId": {
            "type": "string"
          },
          "priority": {
            "type": "integer",
            "minimum": 1,
            "maximum": 5
          },
          "flexibility": {
            "type": "integer",
            "minimum": 1,
            "maximum": 5
          },
          "isRedLine": {
            "type": "boolean"
          },
          "acceptableOptions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "clauseId",
          "preferredOptionId"
        ]
      }
    }
  },
  "required": [
    "name",
    "contractType",
    "governingLaw",
    "entries"
  ]
}
⚪initiate_negotiation(playbookId, dealName, initiatorEmail, initiatorCompany, respondentEmail, ...)

Start a new contract negotiation. Returns a negotiation token for the respondent to join.

Input Schema

{
  "type": "object",
  "properties": {
    "playbookId": {
      "type": "string",
      "description": "ID of your playbook"
    },
    "dealName": {
      "type": "string",
      "description": "Human-readable deal name"
    },
    "initiatorEmail": {
      "type": "string",
      "format": "email"
    },
    "initiatorCompany": {
      "type": "string"
    },
    "respondentEmail": {
      "type": "string",
      "format": "email"
    },
    "respondentCompany": {
      "type": "string"
    }
  },
  "required": [
    "playbookId",
    "dealName",
    "initiatorEmail"
  ]
}
⚪join_negotiation(negotiationToken, playbookId, respondentEmail, respondentCompany)

Join an existing negotiation as the respondent. Triggers automatic compromise resolution and returns the result.

Input Schema

{
  "type": "object",
  "properties": {
    "negotiationToken": {
      "type": "string",
      "description": "Token from the initiator"
    },
    "playbookId": {
      "type": "string",
      "description": "ID of your playbook (must match contract type)"
    },
    "respondentEmail": {
      "type": "string",
      "format": "email"
    },
    "respondentCompany": {
      "type": "string"
    }
  },
  "required": [
    "negotiationToken",
    "playbookId",
    "respondentEmail"
  ]
}
🟢get_deal(dealId)

Get deal details including per-clause agreed options, satisfaction scores, and reasoning.

Input Schema

{
  "type": "object",
  "properties": {
    "dealId": {
      "type": "string",
      "description": "Agent deal room ID"
    }
  },
  "required": [
    "dealId"
  ]
}
🟢download_contract(dealId, format)

Download the agreed contract as Markdown, HTML, PDF, DOCX or TXT (Markdown by default: agents read it best). Negotiation is free; the contract is paid when its document is first fetched: one prepaid credit of the customer is spent (any of its keys draws on the one balance). Later fetches of the same deal are free. With no credit left the answer is HTTP 402 with code PAYMENT_REQUIRED and the link to buy credits.

Input Schema

{
  "type": "object",
  "properties": {
    "dealId": {
      "type": "string",
      "description": "Agent deal room ID"
    },
    "format": {
      "type": "string",
      "enum": [
        "pdf",
        "docx",
        "txt",
        "md",
        "html"
      ],
      "default": "md",
      "description": "md (Markdown) or html for agents and tools; pdf, docx or txt for people and printers"
    }
  },
  "required": [
    "dealId"
  ]
}
⚪buy_credits(currency, returnUrl)

Open a hosted checkout for a pack of ten contract credits for this API key's customer (any of its keys can spend them). Returns checkoutUrl for a person to open in a browser; the credits arrive when the payment succeeds. Answers 409 where payments are off.

Input Schema

{
  "type": "object",
  "properties": {
    "currency": {
      "type": "string",
      "enum": [
        "usd",
        "eur"
      ],
      "default": "usd"
    },
    "returnUrl": {
      "type": "string",
      "description": "URL to return to after checkout"
    }
  },
  "required": []
}
🟢get_credit_balance

Remaining contract credits of this API key's customer (one balance shared by all of its keys) and the latest ledger entries.

Input Schema

{
  "type": "object",
  "properties": {},
  "required": []
}
🟢get_subscriptions

List earlier per-skill subscriptions and their status. Skills are no longer sold one by one; every template is included.

Input Schema

{
  "type": "object",
  "properties": {},
  "required": []
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded12 tools