Legal counsel for AI products and agents (admitted in DC): scope, conflicts, engagement, intake.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Answer one of counsel's open questions (listed by get_matter). Before the letter is signed, only scoping questions can be answered: keep those answers short and general, with no code, secrets, or confidential details. After signing, verify in the code or the running build where you can, and say how you know. If you cannot verify it, answer 'unknown' and say what a human would need to check.
A fact, as defined in https://mandatelaw.ai/api/intake-schema.json#/$defs/fact.
The matter_token returned by request_engagement. Keep it secret.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http counsel https://mandatelaw.ai/mcp
Answer one of counsel's open questions (listed by get_matter). Before the letter is signed, only scoping questions can be answered: keep those answers short and general, with no code, secrets, or confidential details. After signing, verify in the code or the running build where you can, and say how you know. If you cannot verify it, answer 'unknown' and say what a human would need to check.
| Argument | Type | Description |
|---|---|---|
| answer* | object | A fact, as defined in https://mandatelaw.ai/api/intake-schema.json#/$defs/fact. |
| matter_id* | string | |
| question_id* | string | |
| matter_token* | string | The matter_token returned by request_engagement. Keep it secret. |
{
"type": "object",
"required": [
"matter_id",
"matter_token",
"question_id",
"answer"
],
"properties": {
"answer": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"notes": {
"type": "string"
},
"value": {},
"source": {
"enum": [
"verified_in_code",
"verified_in_running_build",
"vendor_dashboard",
"stated_by_client",
"inferred",
"unknown"
]
},
"evidence": {
"type": "array",
"items": {
"type": "object",
"properties": {
"path": {
"type": "string"
},
"lines": {
"type": "string"
},
"excerpt": {
"type": "string",
"maxLength": 600
}
}
}
}
},
"description": "A fact, as defined in https://mandatelaw.ai/api/intake-schema.json#/$defs/fact."
},
"matter_id": {
"type": "string"
},
"question_id": {
"type": "string"
},
"matter_token": {
"type": "string",
"description": "The matter_token returned by request_engagement. Keep it secret."
}
}
}Free. Describe what you need in a sentence or two (no confidential details). Returns whether it is in scope, which service fits, and the fixed fee for each suggested service (plus service_id, if you name one). Share the fee with your human before requesting an engagement. Legal information only, not legal advice.
| Argument | Type | Description |
|---|---|---|
| request* | string | |
| service_id | any | Optional: also quote this service's fee. |
{
"type": "object",
"required": [
"request"
],
"properties": {
"request": {
"type": "string",
"maxLength": 1000
},
"service_id": {
"enum": [
"launch-review",
"ai-feature-review",
"agent-product-review",
"feature-check",
"counsel-on-commit"
],
"description": "Optional: also quote this service's fee."
}
}
}Free. Required before any product details are shared. Names only: the client company, the human principal, other people involved, and any adverse, competing, or counterparty companies. The attorney reviews every check.
| Argument | Type | Description |
|---|---|---|
| client_name* | string | |
| contact_name* | string | The human principal. |
| other_people | array | |
| adverse_or_related_parties | array |
{
"type": "object",
"required": [
"client_name",
"contact_name"
],
"properties": {
"client_name": {
"type": "string",
"maxLength": 200
},
"contact_name": {
"type": "string",
"maxLength": 200,
"description": "The human principal."
},
"other_people": {
"type": "array",
"items": {
"type": "string",
"maxLength": 200
},
"maxItems": 50
},
"adverse_or_related_parties": {
"type": "array",
"items": {
"type": "string",
"maxLength": 200
},
"maxItems": 50
}
}
}For engaged clients, with the human's approval (it may be billed). Call before building a change that matches counsel-triggers.json. Do not ship the change until counsel responds.
| Argument | Type | Description |
|---|---|---|
| change* | string | |
| matter_id* | string | |
| trigger_ids* | array | |
| matter_token* | string | The matter_token returned by request_engagement. Keep it secret. |
| target_ship_date | string |
{
"type": "object",
"required": [
"matter_id",
"matter_token",
"change",
"trigger_ids"
],
"properties": {
"change": {
"type": "string",
"maxLength": 4000
},
"matter_id": {
"type": "string"
},
"trigger_ids": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 30
},
"matter_token": {
"type": "string",
"description": "The matter_token returned by request_engagement. Keep it secret."
},
"target_ship_date": {
"type": "string"
}
}
}Free. The template list of product changes that need legal review before shipping.
No arguments.
{
"type": "object",
"properties": {}
}Status, counsel's open questions, feature checks, and deliverables (documents, privileged_memo, build_spec, verification_checklist, counsel_triggers). Privileged: follow the `privilege` block in the response, and commit only the parts listed in deliverable.handling.safe_to_commit.
| Argument | Type | Description |
|---|---|---|
| matter_id* | string | |
| matter_token* | string | The matter_token returned by request_engagement. Keep it secret. |
{
"type": "object",
"required": [
"matter_id",
"matter_token"
],
"properties": {
"matter_id": {
"type": "string"
},
"matter_token": {
"type": "string",
"description": "The matter_token returned by request_engagement. Keep it secret."
}
}
}After conflict_check. Send a short matter_summary so the attorney can decide whether to take the matter. Describe the product the way you would describe it publicly. Do not send code, secrets, user data, or confidential business plans. The attorney uses this summary only to decide whether the firm can and will take the matter, and keeps it confidential. No attorney-client relationship exists, and no legal advice is given, until the human principal signs the engagement letter. Returns a matter_id and a secret matter_token (shown once; store it securely). The attorney reviews conflicts and the summary, may ask a few scoping questions (see get_matter), and then accepts (possibly under a different service) or declines. If accepted, the engagement letter goes to the principal's email for signature. The fixed fee is due when the work is delivered. You cannot sign on the principal's behalf.
| Argument | Type | Description |
|---|---|---|
| service_id* | any | Your best guess. The attorney may change it. |
| matter_summary* | object | Describe the product the way you would describe it publicly. Do not send code, secrets, user data, or confidential business plans. The attorney uses this summary only to decide whether the firm can and will take the matter, and keeps it confidential. No attorney-client relationship exists, and no legal advice is given, until the human principal signs the engagement letter. |
| principal_email* | string | The human with authority to bind the client. |
| conflict_check_id* | string |
Only after the engagement letter is signed. Product facts per https://mandatelaw.ai/api/intake-schema.json. Each fact has a value, a source (prefer verified_in_code), and evidence (paths and short excerpts; no secrets).
| Argument | Type | Description |
|---|---|---|
| intake* | object | |
| matter_id* | string | |
| matter_token* | string | The matter_token returned by request_engagement. Keep it secret. |
{
"type": "object",
"required": [
"matter_id",
"matter_token",
"intake"
],
"properties": {
"intake": {
"type": "object"
},
"matter_id": {
"type": "string"
},
"matter_token": {
"type": "string",
"description": "The matter_token returned by request_engagement. Keep it secret."
}
}
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 13, 2026.
No readOnlyHint / destructiveHint annotations, so clients can't tell a read from a write without asking.
Fix: Add annotations to each tool, e.g. { readOnlyHint: true } for tools that only read.
{
"type": "object",
"required": [
"conflict_check_id",
"service_id",
"principal_email",
"matter_summary"
],
"properties": {
"service_id": {
"enum": [
"launch-review",
"ai-feature-review",
"agent-product-review",
"feature-check",
"counsel-on-commit"
],
"description": "Your best guess. The attorney may change it."
},
"matter_summary": {
"type": "object",
"required": [
"what_it_does",
"stage",
"users",
"features_in_play",
"questions_for_counsel",
"active_dispute_or_regulator_contact"
],
"properties": {
"stage": {
"enum": [
"idea",
"building",
"beta",
"live"
]
},
"users": {
"enum": [
"consumers",
"businesses",
"both"
]
},
"deadline": {
"type": "string",
"maxLength": 200,
"description": "A launch, investor, app-store, or partner date, if any."
},
"user_scale": {
"enum": [
"pre_launch",
"under_10k",
"10k_to_1m",
"over_1m"
]
},
"product_name": {
"type": "string",
"maxLength": 120
},
"what_it_does": {
"type": "string",
"maxLength": 600,
"description": "One to three sentences, as you would describe it publicly."
},
"where_users_are": {
"type": "array",
"items": {
"type": "string",
"maxLength": 60
},
"maxItems": 30,
"description": "Countries or US states, e.g. US, CA, WA, EU, UK."
},
"features_in_play": {
"type": "array",
"items": {
"enum": [
"ai_generated_output",
"sends_user_data_to_llm",
"trains_on_user_data",
"agent_takes_actions",
"agent_payments",
"agent_uses_third_party_sites",
"agent_holds_user_credentials",
"health_data",
"financial_data",
"children_or_teens",
"precise_location",
"biometrics",
"session_replay_or_ad_tracking",
"regulated_advice",
"none_of_these"
]
},
"minItems": 1,
"description": "Every one that applies. These drive which service fits."
},
"target_launch_date": {
"type": "string",
"maxLength": 40
},
"questions_for_counsel": {
"type": "string",
"maxLength": 1000,
"description": "What you want answered, in general terms."
},
"active_dispute_or_regulator_contact": {
"type": "boolean",
"description": "True if there is a complaint, demand letter, lawsuit, or regulator inquiry about this product. Do not describe it here."
}
},
"description": "Describe the product the way you would describe it publicly. Do not send code, secrets, user data, or confidential business plans. The attorney uses this summary only to decide whether the firm can and will take the matter, and keeps it confidential. No attorney-client relationship exists, and no legal advice is given, until the human principal signs the engagement letter."
},
"principal_email": {
"type": "string",
"format": "email",
"maxLength": 254,
"description": "The human with authority to bind the client."
},
"conflict_check_id": {
"type": "string"
}
}
}