{
  "manifest_version": "0.1",
  "origin": "https://corpuslaw.us",
  "updated_at": "2026-08-27T00:00:00Z",
  "tools": [
    {
      "name": "law_search",
      "description": "Live tool: law.search. Search US federal, state, and municipal law by topic or keyword — use it for any question about what the law currently says (legality, permits, zoning, licensing, compliance, filing requirements) rather than relying on training data, which has a cutoff. Returns ranked provisions with verbatim citations, headings, and snippets. Call this first to discover relevant law, then law.get_node for the full official text. Pass `jurisdiction` to scope to one state/federal/city (see law.list_coverage for codes).",
      "version": "1.0.0",
      "tags": [
        "law",
        "search",
        "citations"
      ],
      "risk_level": "low",
      "requires_user_confirm": false,
      "input_schema": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "description": "Natural-language or keyword query, e.g. 'distillery permit requirements'."
          },
          "jurisdiction": {
            "type": "string",
            "description": "Optional short code to scope the search, e.g. 'TX', 'US', or 'CA-SF'. Call law.list_coverage for valid codes. Includes the jurisdiction's sub-jurisdictions."
          },
          "mode": {
            "type": "string",
            "enum": [
              "hybrid",
              "semantic",
              "keyword"
            ],
            "default": "hybrid",
            "description": "Retrieval mode. 'hybrid' (default) fuses vector similarity with keyword search."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 25,
            "default": 8,
            "description": "Number of results to return (1–25)."
          }
        },
        "required": [
          "query"
        ]
      },
      "output_schema": {
        "type": "object",
        "required": [
          "content"
        ],
        "properties": {
          "content": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "type",
                "text"
              ],
              "properties": {
                "type": {
                  "type": "string",
                  "enum": [
                    "text"
                  ]
                },
                "text": {
                  "type": "string",
                  "description": "Result body; JSON-encoded for structured tools, prose for search results."
                }
              }
            }
          },
          "isError": {
            "type": "boolean",
            "description": "True when the tool refused or failed; `content` explains."
          }
        }
      }
    },
    {
      "name": "law_get_node",
      "description": "Live tool: law.get_node. Fetch the full text, citation, and hierarchy of a single legal provision by its node id (a UUID returned by law.search).",
      "version": "1.0.0",
      "tags": [
        "law",
        "citations"
      ],
      "risk_level": "low",
      "requires_user_confirm": false,
      "input_schema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Node UUID, as returned in law.search results."
          }
        },
        "required": [
          "id"
        ]
      },
      "output_schema": {
        "type": "object",
        "required": [
          "content"
        ],
        "properties": {
          "content": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "type",
                "text"
              ],
              "properties": {
                "type": {
                  "type": "string",
                  "enum": [
                    "text"
                  ]
                },
                "text": {
                  "type": "string",
                  "description": "Result body; JSON-encoded for structured tools, prose for search results."
                }
              }
            }
          },
          "isError": {
            "type": "boolean",
            "description": "True when the tool refused or failed; `content` explains."
          }
        }
      }
    },
    {
      "name": "law_list_coverage",
      "description": "Live tool: law.list_coverage. List which jurisdictions are ingested (federal, state, and municipal), with per-jurisdiction provision counts, searchable-chunk counts, GIS status, and a placeholder flag. Call this to see what law is available and searchable before searching.",
      "version": "1.0.0",
      "tags": [
        "law",
        "coverage"
      ],
      "risk_level": "low",
      "requires_user_confirm": false,
      "input_schema": {
        "type": "object",
        "properties": {}
      },
      "output_schema": {
        "type": "object",
        "required": [
          "content"
        ],
        "properties": {
          "content": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "type",
                "text"
              ],
              "properties": {
                "type": {
                  "type": "string",
                  "enum": [
                    "text"
                  ]
                },
                "text": {
                  "type": "string",
                  "description": "Result body; JSON-encoded for structured tools, prose for search results."
                }
              }
            }
          },
          "isError": {
            "type": "boolean",
            "description": "True when the tool refused or failed; `content` explains."
          }
        }
      }
    },
    {
      "name": "formation_requirements",
      "description": "Live tool: formation.requirements. Get the EXACT intake checklist to form an LLC or nonprofit in a state: every required field, that state's quirk questions, live all-in pricing, and the optional EIN add-on with its price when available. Call this FIRST when the user wants to form a company, then collect the answers from them in conversation yourself — you are the intake agent. Free; does not consume credits.",
      "version": "1.0.0",
      "tags": [
        "formation",
        "compliance"
      ],
      "risk_level": "low",
      "requires_user_confirm": false,
      "input_schema": {
        "type": "object",
        "properties": {
          "entityType": {
            "type": "string",
            "enum": [
              "llc",
              "nonprofit"
            ],
            "description": "Entity type to form."
          },
          "state": {
            "type": "string",
            "description": "Two-letter US state code, e.g. 'MS', 'WY', 'DE'."
          }
        },
        "required": [
          "entityType",
          "state"
        ]
      },
      "output_schema": {
        "type": "object",
        "required": [
          "content"
        ],
        "properties": {
          "content": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "type",
                "text"
              ],
              "properties": {
                "type": {
                  "type": "string",
                  "enum": [
                    "text"
                  ]
                },
                "text": {
                  "type": "string",
                  "description": "Result body; JSON-encoded for structured tools, prose for search results."
                }
              }
            }
          },
          "isError": {
            "type": "boolean",
            "description": "True when the tool refused or failed; `content` explains."
          }
        }
      }
    },
    {
      "name": "formation_compare",
      "description": "Live tool: formation.compare. Compare LLC formation providers on price, recurring costs, registered-agent renewals, and machine/agent capabilities, from a dated dataset of 19 providers verified against primary sources. Call this when the user asks which formation service to use, whether a price is a good deal, how Corpus compares to a named competitor, or asks you to evaluate a 'best LLC services' list. Corpus is one of the compared providers and is scored with the same rubric including its own gaps — the response says so. Free; does not consume credits.",
      "version": "1.0.0",
      "tags": [
        "formation",
        "pricing",
        "comparison"
      ],
      "risk_level": "low",
      "requires_user_confirm": false,
      "input_schema": {
        "type": "object",
        "properties": {
          "providers": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Specific providers to compare, by name or slug (e.g. ['corpus','legalzoom']). Omit for a ranked field. Anything with no dossier is named back to you rather than dropped."
          },
          "view": {
            "type": "string",
            "enum": [
              "overall",
              "lowest_total_cost",
              "most_transparent",
              "most_agentic",
              "developer"
            ],
            "description": "overall (default, by Agentic Readiness) · lowest_total_cost (parsed first-year estimate) · most_transparent · most_agentic · developer (public MCP/API only)."
          },
          "limit": {
            "type": "integer",
            "description": "How many providers to return in a ranked view. Default 5, max 19. Ignored when 'providers' is given."
          }
        }
      },
      "output_schema": {
        "type": "object",
        "required": [
          "content"
        ],
        "properties": {
          "content": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "type",
                "text"
              ],
              "properties": {
                "type": {
                  "type": "string",
                  "enum": [
                    "text"
                  ]
                },
                "text": {
                  "type": "string",
                  "description": "Result body; JSON-encoded for structured tools, prose for search results."
                }
              }
            }
          },
          "isError": {
            "type": "boolean",
            "description": "True when the tool refused or failed; `content` explains."
          }
        }
      }
    },
    {
      "name": "formation_lookup_naics",
      "description": "Live tool: formation.lookup_naics. Find candidate NAICS industry codes for a plain-English business description (needed for every LLC, and for nonprofits in AK, CT, LA, MS, TN, WV). Present 2–6 options to the user and confirm before recording one. Free; does not consume credits.",
      "version": "1.0.0",
      "tags": [
        "formation",
        "naics"
      ],
      "risk_level": "low",
      "requires_user_confirm": false,
      "input_schema": {
        "type": "object",
        "properties": {
          "businessDescription": {
            "type": "string",
            "description": "What the business does, in plain words."
          }
        },
        "required": [
          "businessDescription"
        ]
      },
      "output_schema": {
        "type": "object",
        "required": [
          "content"
        ],
        "properties": {
          "content": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "type",
                "text"
              ],
              "properties": {
                "type": {
                  "type": "string",
                  "enum": [
                    "text"
                  ]
                },
                "text": {
                  "type": "string",
                  "description": "Result body; JSON-encoded for structured tools, prose for search results."
                }
              }
            }
          },
          "isError": {
            "type": "boolean",
            "description": "True when the tool refused or failed; `content` explains."
          }
        }
      }
    },
    {
      "name": "formation_handoff",
      "description": "Live tool: formation.handoff. Validate a formation draft and generate the prefilled handoff link on corpuslaw.us. Pass EVERYTHING you have collected (people, address, management, EIN answers, state-specific answers — see formation.requirements for the checklist). The response says exactly what is still missing — keep collecting and call again until COMPLETE, then give the user the link: it opens the formation agent with every detail pre-loaded, so they only review, sign in, and pay. Free; does not consume credits.",
      "version": "1.0.0",
      "tags": [
        "formation",
        "checkout"
      ],
      "risk_level": "low",
      "requires_user_confirm": false,
      "input_schema": {
        "type": "object",
        "properties": {
          "entityType": {
            "type": "string",
            "enum": [
              "llc",
              "nonprofit"
            ],
            "description": "Entity type to form."
          },
          "state": {
            "type": "string",
            "description": "Two-letter US state code, e.g. 'MS', 'WY', 'DE'."
          },
          "proposedName": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200,
            "description": "Proposed company name."
          },
          "contactEmail": {
            "type": "string",
            "maxLength": 254,
            "description": "Founder contact email."
          },
          "naicsCode": {
            "type": "string",
            "pattern": "^\\d{2,6}$",
            "description": "NAICS industry code, 2–6 digits (use formation.lookup_naics to find it)."
          },
          "businessActivity": {
            "type": "string",
            "maxLength": 500,
            "description": "In one plain sentence, what the business actually does, in the founder's words (not the company name). Corpus researches the licenses and permits that apply from this."
          },
          "principalOffice": {
            "type": "object",
            "description": "Principal office address (street, city, state required for a complete draft).",
            "properties": {
              "line1": {
                "type": "string"
              },
              "line2": {
                "type": "string"
              },
              "city": {
                "type": "string"
              },
              "state": {
                "type": "string"
              },
              "postalCode": {
                "type": "string"
              }
            }
          },
          "management": {
            "type": "string",
            "enum": [
              "member_managed",
              "manager_managed"
            ],
            "description": "LLC management type."
          },
          "parties": {
            "type": "array",
            "description": "The people. LLC: at least one 'member' and an 'organizer' (same person may hold both roles — pass two entries). Nonprofit: an 'incorporator' and at least 3 'director' entries (plus officers where the state requires them).",
            "items": {
              "type": "object",
              "properties": {
                "role": {
                  "type": "string",
                  "enum": [
                    "organizer",
                    "member",
                    "manager",
                    "director",
                    "incorporator",
                    "president",
                    "secretary",
                    "treasurer"
                  ]
                },
                "fullName": {
                  "type": "string",
                  "maxLength": 120
                },
                "email": {
                  "type": "string",
                  "maxLength": 254
                }
              },
              "required": [
                "role",
                "fullName"
              ]
            }
          },
          "nonprofit": {
            "type": "object",
            "description": "Nonprofit-only fields.",
            "properties": {
              "purposeStatement": {
                "type": "string",
                "description": "At least 20 characters."
              },
              "hasDissolutionClause": {
                "type": "boolean"
              },
              "exemptionIntent": {
                "type": "string",
                "enum": [
                  "none",
                  "501c3_later",
                  "501c3_now"
                ]
              }
            }
          },
          "ein": {
            "type": "object",
            "description": "Optional EIN (federal tax ID) add-on, when available — formation.requirements says whether it can currently be sold and at what price. Never quote a remembered EIN price; use the one that call returns. Set wanted=true/false once the user decides. NEVER include a Social Security Number anywhere — the founder types it into a secure panel on corpuslaw.us, never in chat.",
            "properties": {
              "wanted": {
                "type": "boolean"
              },
              "responsibleParty": {
                "type": "object",
                "properties": {
                  "fullName": {
                    "type": "string"
                  },
                  "phone": {
                    "type": "string"
                  }
                }
              },
              "startDate": {
                "type": "string",
                "description": "Company start date, MM/DD/YYYY."
              },
              "principalActivity": {
                "type": "string",
                "description": "Principal business activity in a few plain words."
              },
              "numberOfMembers": {
                "type": "number"
              },
              "hasEmployees": {
                "type": "boolean",
                "description": "W-2 employees expected in the next 12 months."
              },
              "firstDateWagesPaid": {
                "type": "string",
                "description": "MM/DD/YYYY — only when hasEmployees."
              },
              "agriculturalEmployees": {
                "type": "number"
              },
              "otherEmployees": {
                "type": "number"
              },
              "taxLiabilityUnder1000": {
                "type": "boolean"
              },
              "trucking": {
                "type": "boolean"
              },
              "gambling": {
                "type": "boolean"
              },
              "exciseTax": {
                "type": "boolean"
              },
              "sellsTobaccoAlcoholFirearms": {
                "type": "boolean"
              }
            }
          },
          "stateSpecificAnswers": {
            "type": "object",
            "description": "Per-state quirk answers under the EXACT keys shown by formation.requirements (e.g. \"would_you_like_to_list_members_managers_on_the_state_record\"). Values are strings or booleans.",
            "additionalProperties": {
              "type": [
                "string",
                "boolean"
              ]
            }
          },
          "referral_code": {
            "type": "string",
            "description": "Your referral code from account.status, if you have one. The founder saves 25% of the Corpus service fee and the order is credited to your code. Omit it if you do not have one — an absent or unrecognised code changes nothing about the link."
          }
        },
        "required": [
          "entityType",
          "state"
        ]
      },
      "output_schema": {
        "type": "object",
        "required": [
          "content"
        ],
        "properties": {
          "content": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "type",
                "text"
              ],
              "properties": {
                "type": {
                  "type": "string",
                  "enum": [
                    "text"
                  ]
                },
                "text": {
                  "type": "string",
                  "description": "Result body; JSON-encoded for structured tools, prose for search results."
                }
              }
            }
          },
          "isError": {
            "type": "boolean",
            "description": "True when the tool refused or failed; `content` explains."
          }
        }
      }
    },
    {
      "name": "formation_apply_draft",
      "description": "Live tool: formation.apply_draft. WRITE: form a company with the user on this Corpus page. Applies a formation draft to the live /formation intake so they can see it, review, sign in, and pay. Does NOT charge a card, does NOT create a payment, does NOT file with the state. Call formation.requirements first, collect the COMPANY facts in conversation (entity type, state, name, NAICS via formation.lookup_naics, management, the people's names and roles), then call this once with everything you have. Do NOT ask the user for their email, phone, street address or SSN — this tool does not accept them and strips them if sent; the founder types those on the page. Every reply starts with [CORPUS_APPLY_DRAFT_STATUS: <STATE>]. Call this again ONLY on NEEDS_AGENT_INPUT, and only for the company facts it lists. On COMPLETE, NEEDS_PAGE_INPUT or BLOCKED, stop calling it and tell the user to finish on the page. If this browser is not on /formation, the result includes a same-origin link — open that link here so the draft loads.",
      "version": "1.0.0",
      "tags": [
        "formation",
        "draft",
        "write"
      ],
      "risk_level": "medium",
      "requires_user_confirm": true,
      "input_schema": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "entityType": {
            "type": "string",
            "enum": [
              "llc",
              "nonprofit"
            ],
            "description": "Entity type to form."
          },
          "state": {
            "type": "string",
            "description": "Two-letter US state code, e.g. 'MS', 'WY', 'DE'."
          },
          "proposedName": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200,
            "description": "Proposed company name."
          },
          "naicsCode": {
            "type": "string",
            "pattern": "^\\d{2,6}$",
            "description": "NAICS industry code, 2–6 digits (use formation.lookup_naics to find it)."
          },
          "management": {
            "type": "string",
            "enum": [
              "member_managed",
              "manager_managed"
            ],
            "description": "LLC management type."
          },
          "parties": {
            "type": "array",
            "description": "The people, NAMES AND ROLES ONLY — no emails, phones or addresses. LLC: at least one 'member' and an 'organizer'. Nonprofit: an 'incorporator' and at least 3 'director' entries.",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "role": {
                  "type": "string",
                  "enum": [
                    "organizer",
                    "member",
                    "manager",
                    "director",
                    "incorporator",
                    "president",
                    "secretary",
                    "treasurer"
                  ]
                },
                "fullName": {
                  "type": "string",
                  "maxLength": 120
                }
              },
              "required": [
                "role",
                "fullName"
              ]
            }
          },
          "nonprofit": {
            "type": "object",
            "additionalProperties": false,
            "description": "Nonprofit-only fields.",
            "properties": {
              "purposeStatement": {
                "type": "string"
              },
              "hasDissolutionClause": {
                "type": "boolean"
              },
              "exemptionIntent": {
                "type": "string",
                "enum": [
                  "none",
                  "501c3_later",
                  "501c3_now"
                ]
              }
            }
          },
          "ein": {
            "type": "object",
            "additionalProperties": false,
            "description": "Optional EIN add-on answers. NEVER include a Social Security Number, phone number or address — the founder types those on corpuslaw.us.",
            "properties": {
              "wanted": {
                "type": "boolean"
              },
              "responsibleParty": {
                "type": "object",
                "additionalProperties": false,
                "description": "Name only — the phone number is typed on the page.",
                "properties": {
                  "fullName": {
                    "type": "string"
                  }
                }
              },
              "startDate": {
                "type": "string"
              },
              "principalActivity": {
                "type": "string"
              },
              "numberOfMembers": {
                "type": "number"
              },
              "hasEmployees": {
                "type": "boolean"
              },
              "firstDateWagesPaid": {
                "type": "string"
              },
              "agriculturalEmployees": {
                "type": "number"
              },
              "otherEmployees": {
                "type": "number"
              },
              "taxLiabilityUnder1000": {
                "type": "boolean"
              },
              "trucking": {
                "type": "boolean"
              },
              "gambling": {
                "type": "boolean"
              },
              "exciseTax": {
                "type": "boolean"
              },
              "sellsTobaccoAlcoholFirearms": {
                "type": "boolean"
              }
            }
          },
          "stateSpecificAnswers": {
            "type": "object",
            "additionalProperties": false,
            "description": "Per-state quirk answers only (e.g. DC/llc phone_number, list-members). Do not put founder contact, email, or SSN here.",
            "properties": {
              "phone_number": {
                "type": [
                  "string",
                  "boolean"
                ]
              },
              "beneficial_owner": {
                "type": [
                  "string",
                  "boolean"
                ]
              },
              "effective_date": {
                "type": [
                  "string",
                  "boolean"
                ]
              },
              "would_you_like_to_list_members_managers_on_the_state_record": {
                "type": [
                  "string",
                  "boolean"
                ]
              },
              "alternate_name_choice": {
                "type": [
                  "string",
                  "boolean"
                ]
              },
              "is_a_retailer_of_authorized_vapor_products": {
                "type": [
                  "string",
                  "boolean"
                ]
              },
              "trade_name": {
                "type": [
                  "string",
                  "boolean"
                ]
              }
            }
          },
          "referral_code": {
            "type": "string",
            "description": "Optional referral code from account.status. Omit if you do not have one."
          }
        },
        "required": [
          "entityType",
          "state"
        ]
      },
      "output_schema": {
        "type": "object",
        "required": [
          "content"
        ],
        "properties": {
          "content": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "type",
                "text"
              ],
              "properties": {
                "type": {
                  "type": "string",
                  "enum": [
                    "text"
                  ]
                },
                "text": {
                  "type": "string",
                  "description": "Result body; JSON-encoded for structured tools, prose for search results."
                }
              }
            }
          },
          "isError": {
            "type": "boolean",
            "description": "True when the tool refused or failed; `content` explains."
          }
        }
      }
    },
    {
      "name": "formation_get_draft",
      "description": "Live tool: formation.get_draft. Read the formation draft currently shown on this Corpus /formation page (entity, state, name, completeness, missing fields). Does not change anything. If the formation page is not open, open https://corpuslaw.us/formation first.",
      "version": "1.0.0",
      "tags": [
        "formation",
        "draft"
      ],
      "risk_level": "low",
      "requires_user_confirm": false,
      "input_schema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "output_schema": {
        "type": "object",
        "required": [
          "content"
        ],
        "properties": {
          "content": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "type",
                "text"
              ],
              "properties": {
                "type": {
                  "type": "string",
                  "enum": [
                    "text"
                  ]
                },
                "text": {
                  "type": "string",
                  "description": "Result body; JSON-encoded for structured tools, prose for search results."
                }
              }
            }
          },
          "isError": {
            "type": "boolean",
            "description": "True when the tool refused or failed; `content` explains."
          }
        }
      }
    }
  ]
}
