{
  "serverInfo": {
    "name": "corpus-legal",
    "title": "Corpus Legal — US Law Search + Business Formation",
    "version": "1.2.1"
  },
  "protocolVersion": "2025-06-18",
  "transport": {
    "type": "streamable-http",
    "url": "https://corpuslaw.us/api/mcp"
  },
  "authentication": {
    "required": false,
    "schemes": [
      "bearer"
    ],
    "description": "No auth required — anonymous callers get 100 searches/month at 10 req/min, per IP. Send 'Authorization: Bearer <api key>' for 1,000 searches/month at 30 req/min, renewing on the 1st: free API keys are self-serve and instant at https://corpuslaw.us/settings, with no review step and no expiry. Form a company through Corpus and your key permanently gets 5,000 searches/month at 60 req/min. Beyond the free allotment, research is $0.005 per search from prepaid credit packs — as low as $0.0033 each in the larger packs — and credits never expire. All formation tools are always free and are never blocked by a research quota."
  },
  "capabilities": {
    "tools": {
      "listChanged": false
    },
    "prompts": {
      "listChanged": false
    },
    "resources": {
      "listChanged": false
    }
  },
  "tools": [
    {
      "name": "law.search",
      "title": "Search US law",
      "description": "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).",
      "inputSchema": {
        "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"
        ]
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "text": {
            "type": "string",
            "description": "Human-readable tool result (also mirrored in content[].text)."
          },
          "isError": {
            "type": "boolean",
            "description": "True when the tool could not complete successfully."
          }
        },
        "required": [
          "text"
        ]
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true
      }
    },
    {
      "name": "law.get_node",
      "title": "Get a law provision",
      "description": "Fetch the full text, citation, and hierarchy of a single legal provision by its node id (a UUID returned by law.search).",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Node UUID, as returned in law.search results."
          }
        },
        "required": [
          "id"
        ]
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "text": {
            "type": "string",
            "description": "Human-readable tool result (also mirrored in content[].text)."
          },
          "isError": {
            "type": "boolean",
            "description": "True when the tool could not complete successfully."
          }
        },
        "required": [
          "text"
        ]
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true
      }
    },
    {
      "name": "law.list_coverage",
      "title": "List covered jurisdictions",
      "description": "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.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "text": {
            "type": "string",
            "description": "Human-readable tool result (also mirrored in content[].text)."
          },
          "isError": {
            "type": "boolean",
            "description": "True when the tool could not complete successfully."
          }
        },
        "required": [
          "text"
        ]
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true
      }
    },
    {
      "name": "account.status",
      "title": "Check account status",
      "description": "Check the credit balance, tier, rate limits, and upgrade options for the API key on this connection. Use it to budget before making metered calls. Free — this call does not consume a credit. Works without a key (anonymous callers get their free-tier numbers and the key URL); with a key it reports that key's balance and limits. It also returns a referral code: pass referral_code back on later calls to keep the same referral identity.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "referral_code": {
            "type": "string",
            "description": "An active referral code returned by an earlier account.status call. Pass it back to keep the same referral identity; if it is no longer active, account.status issues a new code instead."
          }
        }
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "text": {
            "type": "string",
            "description": "Human-readable tool result (also mirrored in content[].text)."
          },
          "isError": {
            "type": "boolean",
            "description": "True when the tool could not complete successfully."
          }
        },
        "required": [
          "text"
        ]
      },
      "annotations": {
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": false,
        "openWorldHint": true
      }
    },
    {
      "name": "formation.requirements",
      "title": "Get formation requirements",
      "description": "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.",
      "inputSchema": {
        "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"
        ]
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "text": {
            "type": "string",
            "description": "Human-readable tool result (also mirrored in content[].text)."
          },
          "isError": {
            "type": "boolean",
            "description": "True when the tool could not complete successfully."
          }
        },
        "required": [
          "text"
        ]
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true
      }
    },
    {
      "name": "formation.compare",
      "title": "Compare LLC formation services",
      "description": "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.",
      "inputSchema": {
        "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."
          }
        }
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "text": {
            "type": "string",
            "description": "Human-readable tool result (also mirrored in content[].text)."
          },
          "isError": {
            "type": "boolean",
            "description": "True when the tool could not complete successfully."
          }
        },
        "required": [
          "text"
        ]
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true
      }
    },
    {
      "name": "formation.lookup_naics",
      "title": "Find a NAICS industry code",
      "description": "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.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "businessDescription": {
            "type": "string",
            "description": "What the business does, in plain words."
          }
        },
        "required": [
          "businessDescription"
        ]
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "text": {
            "type": "string",
            "description": "Human-readable tool result (also mirrored in content[].text)."
          },
          "isError": {
            "type": "boolean",
            "description": "True when the tool could not complete successfully."
          }
        },
        "required": [
          "text"
        ]
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true
      }
    },
    {
      "name": "formation.handoff",
      "title": "Validate and hand off a formation draft",
      "description": "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.",
      "inputSchema": {
        "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)."
          },
          "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"
        ]
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "text": {
            "type": "string",
            "description": "Human-readable tool result (also mirrored in content[].text)."
          },
          "isError": {
            "type": "boolean",
            "description": "True when the tool could not complete successfully."
          }
        },
        "required": [
          "text"
        ]
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true
      }
    }
  ],
  "documentation": "https://corpuslaw.us/docs/mcp",
  "links": {
    "openapi": "https://corpuslaw.us/api/v1/openapi.json",
    "restApi": "https://corpuslaw.us/docs/api",
    "discovery": "https://corpuslaw.us/api/v1",
    "llmsTxt": "https://corpuslaw.us/llms.txt",
    "llmsFullTxt": "https://corpuslaw.us/llms-full.txt",
    "verify": "https://corpuslaw.us/verify",
    "agentSkill": "https://corpuslaw.us/skills/corpus-business-formation/SKILL.md",
    "ard": "https://corpuslaw.us/.well-known/ard.json",
    "aiCatalog": "https://corpuslaw.us/.well-known/ai-catalog.json",
    "serverCard": "https://corpuslaw.us/api/mcp/server-card"
  },
  "homepage": "https://corpuslaw.us",
  "icon": "https://corpuslaw.us/nous.png"
}
