{"name":"io.github.Vaquill-AI/vaquill-mcp","slug":"vaquill-ai-vaquill-mcp","title":"Vaquill","description":"Search US and Indian statutes, regulations, constitutions, and court rules.","url":"https://mcp.market/server/vaquill-ai-vaquill-mcp","rating":null,"grade":"B","score":84,"certified":false,"status":"active","category":"search","tags":["search"],"presence":{"score":29,"stars":7,"forks":1,"downloads_week":null,"last_push_at":"2026-09-19T12:12:30.000Z","license":"MIT"},"uptime":{"percent":100,"checks":7,"ok":7,"last_checked_at":"2026-09-21T03:40:42.170Z","last_ok_at":"2026-09-21T03:40:42.170Z","latency_ms":194},"claimed":false,"transport":"remote","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/Vaquill-AI/vaquill-mcp","website":null,"version":"0.4.0","remotes":[{"type":"streamable-http","url":"https://mcp.vaquill.ai/s/_","headers":[{"description":"Bearer token using a Vaquill API key. Format: 'Bearer vq_key_...'. Get a key at https://www.vaquill.ai/legal-api.","isRequired":true,"format":"string","isSecret":true,"name":"Authorization"}]},{"type":"streamable-http","url":"https://mcp.vaquill.ai/in/s/_","headers":[{"description":"Bearer token using a Vaquill API key. Format: 'Bearer vq_key_...'. Get a key at https://www.vaquill.ai/legal-api.","isRequired":true,"format":"string","isSecret":true,"name":"Authorization"}]}],"packages":[],"tools":[{"name":"count_statute_sections","description":"How many sections sit in a jurisdiction, corpus, code, title, chapter or part.\n\n**Cost**: 1 credit. A scope that matches nothing is refunded, because an empty\nanswer here is usually a wrong filter rather than a finding.\n\nUse it to size a job before you run it. Walking a container with\n`/us/statutes/divisions` and hydrating what you find is cheap per call and adds\nup across a whole corpus, so this is the call that tells you what you are about\nto spend before you spend it.\n\n**There is no `query` parameter, on purpose.** Search ranks over a bounded\nwindow, so \"how many sections match this query\" has no answer beyond the size of\nthat window. This counts a SCOPE, which is exact. Pair the two: count the scope\nhere, enumerate it with `/us/statutes/divisions`, then rank within it using\n`/us/statutes/search`.\n\nThe figure counts SECTIONS. Long sections are stored as several passages and are\ncounted once.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"corpusType":{"anyOf":[{"type":"string","enum":["USC","CFR","STATE","CONSTITUTION","FEDERAL_RULES","STATE_CONSTITUTION","STATE_RULES","EXECUTIVE_ACTION","REGULATION","FEDERAL_REGISTER","FEDERAL_REGISTER_NOTICE","AGENCY_GUIDANCE","SENTENCING_GUIDELINES","US_TAX_TREATY","STATE_AGENCY_GUIDANCE","STATE_AG_OPINION","SESSION_LAW","STATUTE_COMPILATION","AGENCY_ADJUDICATION","CFR_ANNUAL","USC_ANNUAL"]},{"items":{"type":"string","enum":["USC","CFR","STATE","CONSTITUTION","FEDERAL_RULES","STATE_CONSTITUTION","STATE_RULES","EXECUTIVE_ACTION","REGULATION","FEDERAL_REGISTER","FEDERAL_REGISTER_NOTICE","AGENCY_GUIDANCE","SENTENCING_GUIDELINES","US_TAX_TREATY","STATE_AGENCY_GUIDANCE","STATE_AG_OPINION","SESSION_LAW","STATUTE_COMPILATION","AGENCY_ADJUDICATION","CFR_ANNUAL","USC_ANNUAL"]},"type":"array"},{"type":"null"}],"description":"Corpus to count, single or list. Omit to count every corpus.","examples":["REGULATION"]},"state":{"anyOf":[{"type":"string"},{"items":{"type":"string"},"type":"array"},{"type":"null"}],"enum":["federal","al","ak","az","ar","ca","co","ct","de","dc","fl","ga","hi","id","il","in","ia","ks","ky","la","me","md","ma","mi","mn","ms","mo","mt","ne","nv","nh","nj","nm","ny","nc","nd","oh","ok","or","pa","pr","ri","sc","sd","tn","tx","ut","vt","va","wa","wv","wi","wy"],"description":"Two-letter jurisdiction code or `federal`, single or list.","examples":["tx"]},"code":{"anyOf":[{"type":"string"},{"items":{"type":"string"},"type":"array"},{"type":"null"}],"description":"State code identifier, e.g. `tx_26`. Pair with `state`.","examples":["tx_26"]},"titleNumber":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"USC or CFR title number.","examples":[42]},"chapter":{"anyOf":[{"type":"string"},{"items":{"type":"string"},"type":"array"},{"type":"null"}],"description":"Chapter identifier. Pair with `titleNumber` or `code`.","examples":["554"]},"part":{"anyOf":[{"type":"string"},{"items":{"type":"string"},"type":"array"},{"type":"null"}],"description":"CFR part identifier. Pair with `titleNumber`.","examples":["240"]},"actStatus":{"anyOf":[{"type":"string"},{"items":{"type":"string"},"type":"array"},{"type":"null"}],"description":"Count only sections carrying this status.","examples":["repealed"]},"excludeRepealed":{"type":"boolean","description":"Exclude sections whose status is affirmatively dead. A section with no recorded status is KEPT, because a missing status is not evidence of repeal. The US Code is served from a stored annual edition, so a section repealed after it closed is counted here; see the same field on `/search` for the measurement.","default":false,"examples":[true]}},"required":[]}},{"name":"create_watch","description":"Subscribe to a board so a change to that source notifies you. Delivery is by webhook (HMAC-SHA256 signed) or email, fired when the source's existing refresh finds real changes -- nothing is crawled on your behalf and there is no real-time trigger. channel is immutable once set; to change it, delete and recreate. Free.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"corpusType":{"type":"string","description":"Board's corpus_type (e.g. `state`, `state_regulation`, `federal_register`, `agency_guidance`), matched case-insensitively so `USC` / `CFR` work too. Call list_boards for the authoritative list: this is a growing set, not a fixed enum, and not every corpus is a watchable board.","examples":["state"]},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"enum":["federal","al","ak","az","ar","ca","co","ct","de","dc","fl","ga","hi","id","il","in","ia","ks","ky","la","me","md","ma","mi","mn","ms","mo","mt","ne","nv","nh","nj","nm","ny","nc","nd","oh","ok","or","pa","pr","ri","sc","sd","tn","tx","ut","vt","va","wa","wv","wi","wy"],"description":"Board's state, 2-letter and case-insensitive. For a federal board (USC, eCFR, the Federal Register) pass `federal` or omit entirely; the two are equivalent. Must otherwise match the `state` list_boards returned for this corpusType.","examples":["wa"]},"channel":{"type":"string","enum":["webhook","email","both"],"default":"webhook"},"webhookUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Required when channel is webhook or both."},"webhookSecret":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional signing secret, stored encrypted and never returned. Every delivery then carries `X-Vaquill-Signature: sha256=<hex>`, an HMAC-SHA256 of the raw request body bytes keyed with this secret. Verify over the raw body before parsing JSON, constant-time."},"emailAddress":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Required when channel is email or both."},"scope":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"description":"Narrow the alert to one citation instead of a whole source. Three mutually exclusive forms. Hierarchy prefix: `{\"title\": \"21\", \"part\": \"314\"}`, where every level set must match and `title` is required whenever a narrower level is set. Exact section: `{\"actId\": \"CFR_T21_P314_S314_50\"}`, validated at create time and the only form EVERY source accepts, including flat ones. Named source: `{\"source\": \"fdic_fil\"}`, accepted on `agency_guidance`, `agency_manuals` and `cfr` only. Omit to watch the whole source.","examples":[{"part":"314","title":"21"}]},"webhookAuth":{"anyOf":[{"properties":{"scheme":{"type":"string","enum":["none","bearer","basic","header"],"description":"`bearer` sends `Authorization: Bearer <secret>`. `basic` sends `Authorization: Basic <secret>` with the secret already base64-encoded by you. `header` sends `<headerName>: <secret>`, for gateways that read something like `X-Api-Key`. `none` removes any credential currently stored.","default":"none"},"secret":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The credential value. Stored encrypted and never returned. Required when setting a scheme for the first time or changing scheme; on PATCH you may omit it to keep the stored one while changing only `headerName`."},"headerName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Header to send the credential on. Required for `header`, and rejected for every other scheme. Cannot be `Authorization` (use `bearer`/`basic`), a transport header, or one of ours.","examples":["X-Api-Key"]}},"type":"object","description":"How a delivery should authenticate itself to your endpoint.\n\nSEPARATE FROM `webhookSecret`, and the distinction is the point.\n`webhookSecret` signs the body so you can prove it is intact and ours.\nThis sends a credential so your gateway can reject anything else before\nit reaches your handler. Most integrations want the second, many want\nboth, and the two are set independently."},{"type":"null"}],"description":"Optional outbound credential sent on every delivery, so your gateway can authenticate us with the header it already reads. Independent of `webhookSecret`: set neither, either, or both. Only valid on a webhook or both channel watch."}},"required":["corpusType"]}},{"name":"delete_watch","description":"Delete a watch you own. Immediate and permanent, and its delivery history goes with it. To stop notifications without losing the config or history, prefer update_watch with isActive false. Free.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"watch_id":{"type":"string"}},"required":["watch_id"]}},{"name":"fetch","description":"Fetch the full text of one US law section by the `id` from a `search` result, returning `{id, title, text, url, metadata}`. Also accepts a citation URL, a bare path, or a Bluebook citation such as '42 U.S.C. 1983'. Present for clients that require the standard search/fetch pair; prefer `get_us_statute_section_text` if available. Charged as a section lookup plus a body read.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"],"additionalProperties":false}},{"name":"get_credit_balance","description":"Returns the credits this API key's account can spend right now.\n\n**Free.** This endpoint is never charged, so you can poll it to drive alerting\nor a pre-flight check without the check itself costing you anything. It is rate\nlimited like every other key-authenticated route.\n\n**Authentication:** any valid `vq_key_` key. No particular scope is required.\n\n## What the number means\n\n`creditsRemaining` is derived from your live credit buckets under the same\nexpiry rule the billing path applies, so it is what a call would actually be\nallowed to spend, not a cached figure that a nightly job later corrects.\n\nIt is the same field name metered responses use, so you can read `creditsRemaining`\nthe same way everywhere.\n\n## Not all credits behave alike\n\nRead `bySource` before assuming a balance is durable. `subscription` credits are\nuse-it-or-lose-it and are forfeited at the end of the period, while `payg`\ncredits you purchased burn last and persist. `nextExpiry` tells you what is\nabout to be forfeited and when, which is the one thing a balance alone cannot.\n\n## Two separate ceilings\n\nCredits are how MUCH you may spend; `rateLimit` is how FAST you may call. They\nare independent, so a healthy balance does not exempt you from throttling and\nstaying under the rate limit does not pay for a call.\n\n`rateLimit` has your plan applied and lets you size a client before issuing a\nrequest. Every response also carries `X-RateLimit-Limit`, `X-RateLimit-Remaining`\nand `X-RateLimit-Reset` for the per-minute window, plus `X-RateLimit-Limit-Day`\nand `X-RateLimit-Remaining-Day` for the daily backstop; those report the same\nceilings with your live headroom.\n\n## Example\n\n```bash\ncurl https://api.vaquill.ai/api/v1/credits/balance \\\n  -H \"Authorization: Bearer $VAQUILL_API_KEY\"\n```\n\n```json\n{\n  \"creditsRemaining\": 103039.0,\n  \"usdRemaining\": 1030.39,\n  \"bySource\": [\n    { \"source\": \"payg\", \"credits\": 102539.0 },\n    { \"source\": \"subscription\", \"credits\": 500.0 }\n  ],\n  \"nextExpiry\": { \"at\": \"2026-10-01T00:00:00Z\", \"credits\": 500.0 },\n  \"plan\": \"business\",\n  \"totalPurchased\": 150000.0,\n  \"totalConsumed\": 46961.0,\n  \"asOf\": \"2026-09-19T12:34:56Z\"\n}\n```","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"required":[]}},{"name":"get_pricing","description":"Current API credit pricing: per-endpoint credit costs and the credit-to-currency conversion rate (1 credit = $0.01 USD). Free, and no authentication required. Use to check what a call will cost before making it.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"region":{"anyOf":[{"type":"string","enum":["US","IN"]},{"type":"null"}],"description":"Jurisdiction to price. `US` for the United States primary-law surface, `IN` for the India legislation surface. Defaults to the jurisdiction of the document you are reading, so a caller who does not set it gets the prices for the endpoints that document describes and nothing else."}},"required":[]}},{"name":"get_section_changes","description":"What our refreshes have observed changing on one section over time: when it was added, amended or removed, newest first. This is our capture history, not the publisher's -- an empty list means we recorded no change, never that the section was never amended. For the publisher's own history, read amendmentHistory on the section. Cost: 1 credit.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"act_id":{"type":"string","maxLength":200,"minLength":3,"description":"Section identifier, e.g. `USC_T42_C21_S1983` (Title 42, Chapter 21, Section 1983, written 42 U.S.C. 1983). Take it from a search result rather than assembling it: the title and section are derivable from a citation but the CHAPTER is not, so hand-built ids usually 404.","examples":["CFR_T21_P314_S314_50"]},"limit":{"type":"integer","maximum":200,"minimum":1,"description":"Max changes to return on this page.","default":50,"examples":[50]},"sinceId":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"description":"Return only changes with an `id` greater than this: the cursor for polling forward into new changes. Ids are a monotonic sequence, so this is exact, immune to clock skew, and cannot drop two changes that share a timestamp. Carry `cursor` forward."},"beforeId":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"description":"Return only changes with an `id` less than this: the cursor for walking BACK through history, which is what a newest-first reader needs. Pass the smallest `id` on your last page."},"changeKind":{"anyOf":[{"items":{"type":"string","enum":["added","amended","removed"]},"type":"array"},{"type":"null"}],"description":"Filter to these kinds. Repeat the parameter to pass several (`?changeKind=amended&changeKind=removed`). Omit for all three."},"order":{"type":"string","enum":["asc","desc"],"description":"`desc` (default) is newest first, the natural reading order for a history. Use `asc` to replay a section's life forward, or when catching up from a cursor.","default":"desc"}},"required":["act_id"]}},{"name":"get_section_cited_by","description":"The USC and CFR sections whose text cross-references a given section: the inverse of the crossReferences already returned on a section lookup. Use to find where a definition or requirement is actually invoked, or to gauge how load-bearing a provision is across the code. Cost: 2 credits.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"act_id":{"type":"string","maxLength":200,"minLength":3,"description":"Section identifier, e.g. `USC_T42_C21_S1983` (Title 42, Chapter 21, Section 1983, written 42 U.S.C. 1983). Take it from a search result rather than assembling it: the title and section are derivable from a citation but the CHAPTER is not, so hand-built ids usually 404.","examples":["USC_T42_C21_S1983"]},"limit":{"type":"integer","maximum":100,"minimum":1,"description":"Maximum citing sections to return.","default":25,"examples":[25]}},"required":["act_id"]}},{"name":"get_section_cross_state","description":"Provisions in OTHER states that address the same subject as a given state statute section, ranked by similarity. State statutes only. Use for fifty-state surveys, multi-jurisdiction compliance, or to check whether a client's home-state rule is typical or an outlier. Cost: 6 credits.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"act_id":{"type":"string","maxLength":200,"minLength":3,"description":"Section identifier, e.g. `USC_T42_C21_S1983` (Title 42, Chapter 21, Section 1983, written 42 U.S.C. 1983). Take it from a search result rather than assembling it: the title and section are derivable from a citation but the CHAPTER is not, so hand-built ids usually 404.","examples":["USC_T42_C21_S1983"]},"limit":{"type":"integer","maximum":25,"minimum":1,"description":"Maximum states to return, one provision each.","default":5,"examples":[5]}},"required":["act_id"]}},{"name":"get_section_definitions","description":"The term definitions that govern a section, parsed from its chapter's definitions section. Use whenever a provision turns on a term of art ('covered entity', 'security', 'employer') and you need the statute's own definition rather than the ordinary meaning. Cost: 4 credits.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"act_id":{"type":"string","maxLength":200,"minLength":3,"description":"Section identifier, e.g. `USC_T42_C21_S1983` (Title 42, Chapter 21, Section 1983, written 42 U.S.C. 1983). Take it from a search result rather than assembling it: the title and section are derivable from a citation but the CHAPTER is not, so hand-built ids usually 404.","examples":["USC_T42_C21_S1983"]}},"required":["act_id"]}},{"name":"get_section_neighbors","description":"The sections immediately before and after a given section within its own chapter or code, in statutory order. Use to read a provision in context, to find a definitions or penalties sibling, or to check whether the operative language continues into the next section. Cost: 2 credits.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"act_id":{"type":"string","maxLength":200,"minLength":3,"description":"Section identifier, e.g. `USC_T42_C21_S1983` (Title 42, Chapter 21, Section 1983, written 42 U.S.C. 1983). Take it from a search result rather than assembling it: the title and section are derivable from a citation but the CHAPTER is not, so hand-built ids usually 404.","examples":["USC_T42_C21_S1983"]},"limit":{"type":"integer","maximum":10,"minimum":1,"description":"How many sections to return on EACH side.","default":3,"examples":[3]}},"required":["act_id"]}},{"name":"get_sections_batch","description":"Metadata for up to 50 sections in one call, by a list of act_ids. Same fields as get_us_statute_section. Use instead of looping that tool when you already hold several act_ids, for example every result of one search. Sections that are not found are skipped and not charged. Cost: 2 credits.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"actIds":{"items":{"type":"string"},"type":"array","maxItems":50,"minItems":1,"description":"Section identifiers from a prior search, up to 50 per call. Duplicates are collapsed and order is preserved. DO NOT BUILD THESE FROM A CITATION: the chapter/article segments exist only in the data, so assembled ids miss. To start from a citation, use resolve_statute_citation.","examples":[["USC_T42_C21_S1983","CFR_T17_P240_S240_10b5_1"]]},"includeBody":{"type":"boolean","description":"Return each section's full text inline on `body`, instead of metadata only. Adds the ordinary body price per row that returns text, so 20 ids resolving 20 bodies is 40 + 120 = 160 credits. Rows whose text cannot be resolved come back with `body: null` and are not charged for it, so read `creditsConsumed` rather than computing the total. Without this, use `/us/statutes/section/{actId}/body` one id at a time.","default":false,"examples":[true]}},"required":["actIds"]}},{"name":"get_us_statute_section","description":"Metadata for one US statute, regulation or rule section by act_id: citation, title hierarchy, breadcrumb, amendment history, and links to HTML, PDF and XML. Does NOT include the section text -- use get_us_statute_section_text for that. Good for confirming you have the right section before paying for its full body. Cost: 2 credits.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"act_id":{"type":"string","maxLength":200,"minLength":3,"description":"Section identifier, e.g. `USC_T42_C21_S1983` (Title 42, Chapter 21, Section 1983, written 42 U.S.C. 1983). Take it from a search result rather than assembling it: the title and section are derivable from a citation but the CHAPTER is not, so hand-built ids usually 404.","examples":["USC_T42_C21_S1983"]}},"required":["act_id"]}},{"name":"get_us_statute_section_text","description":"The full text of a US statute, regulation or rule section by act_id. Returns styled HTML (with cross-references and paragraph numbering as officially published) and plain text. Use when you need the actual statutory language to quote, draft against, or analyze rather than just cite. Cost: 6 credits.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"act_id":{"type":"string","maxLength":200,"minLength":3,"description":"Section identifier, e.g. `USC_T42_C21_S1983` (Title 42, Chapter 21, Section 1983, written 42 U.S.C. 1983). Take it from a search result rather than assembling it: the title and section are derivable from a citation but the CHAPTER is not, so hand-built ids usually 404.","examples":["CFR_T17_P240_S240_10b5_1"]},"format":{"type":"string","enum":["both","html","plain","content","operative"],"description":"Which representations to return. The default `both` carries a long section's text twice, so `plain` or `html` roughly halves the payload at the same price. `content` returns only the operative text, about 1 KB instead of 30 KB on a long section, but ONLY United States Code sections can be split: on any other corpus it returns no text, so check for null.","default":"both","examples":["operative"]},"structured":{"type":"boolean","description":"When true, also return `markdown` and a `subsections` tree parsed from the text for pincite addressing. Same cost.","default":false,"examples":[true]},"asOf":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},{"type":"null"}],"format":"date","description":"Text as it stood on this date (`YYYY-MM-DD`), same cost. A RECONSTRUCTION from observed changes, not an archive: read the response's `asOf.isBounded` before citing it, since false means the answer is limited by when capture began, not by the law. A section we cannot rebuild returns `source: \"unavailable\"` and is refunded.","examples":["2026-01-15"]}},"required":["act_id"]}},{"name":"get_watch_change_diff","description":"The full text of a changed section BEFORE and AFTER one specific change, as whole documents ready to diff. Only meaningful where hasDiff is true on the change list. A missing side is not an error: hasBefore and hasAfter say which text is present, so render 'diff unavailable' rather than treating null as a failure. Unlike the rest of the law-change tools this one returns section text, so check its cost before looping over a change list. Cost: 4 credits.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"watch_id":{"type":"string"},"change_id":{"type":"integer"}},"required":["watch_id","change_id"]}},{"name":"list_boards","description":"List every watchable board: a tracked corpus source such as the Federal Register, the CFR, or one state's statutes, with its refresh cadence. A board is identified by corpusType plus state (state is null for federal). Use to discover what can be subscribed to before calling create_watch. Free.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"corpusType":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Only boards for this corpus type, matched case-insensitively so the uppercase spelling used by the statutes endpoints (`CFR`) finds the board (`cfr`). An unknown value is an empty page with `total: 0`, not an error.","examples":["state_regulation"]},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"enum":["federal","al","ak","az","ar","ca","co","ct","de","dc","fl","ga","hi","id","il","in","ia","ks","ky","la","me","md","ma","mi","mn","ms","mo","mt","ne","nv","nh","nj","nm","ny","nc","nd","oh","ok","or","pa","pr","ri","sc","sd","tn","tx","ut","vt","va","wa","wv","wi","wy"],"description":"Only boards for this jurisdiction. Pass `federal` for the boards that have no state (USC, eCFR, the Federal Register). Omit for no jurisdiction filter -- which is NOT the same as `federal`.","examples":["tx"]},"limit":{"type":"integer","maximum":500,"minimum":1,"description":"Max boards to return. The default covers the whole registry today; check `total` rather than assuming it always will.","default":500},"offset":{"type":"integer","minimum":0,"description":"Number of boards to skip, for paging.","default":0}},"required":[]}},{"name":"list_statute_divisions","description":"Walk the statutory hierarchy: list the child divisions (titles, chapters, parts, or sections) under any level, in statutory order. Use to browse a code structurally when you do not yet know the section number, or to enumerate everything under a chapter. Cost: 1 credit.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"corpusType":{"type":"string","enum":["USC","CFR","STATE","REGULATION"],"description":"Corpus to browse: USC, CFR, STATE, or REGULATION.","examples":["USC"]},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"enum":["al","ak","az","ar","ca","co","ct","de","dc","fl","ga","hi","id","il","in","ia","ks","ky","la","me","md","ma","mi","mn","ms","mo","mt","ne","nv","nh","nj","nm","ny","nc","nd","oh","ok","or","pa","pr","ri","sc","sd","tn","tx","ut","vt","va","wa","wv","wi","wy"],"description":"2-letter jurisdiction code, required for STATE and REGULATION. Case-insensitive.","examples":["tx"]},"titleNumber":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}],"description":"USC/CFR title number to drill into.","examples":[42]},"code":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"State code identifier, e.g. `tx_pe` (browse `/us/statutes/divisions` with `corpusType=STATE&state=<code>` to list them).","examples":["tx_pe"]},"chapter":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Chapter identifier to drill into (USC and state codes).","examples":["21"]},"part":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Part identifier to drill into (CFR).","examples":["240"]},"excludeRepealed":{"type":"boolean","description":"Leave out sections whose status is affirmatively dead (repealed, superseded, renumbered and similar). A section carrying no recorded status is KEPT: a missing status is not evidence of repeal. Same vocabulary as the filter of this name on `POST /us/statutes/search`.","default":false},"actStatus":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"List only sections carrying this status, e.g. `repealed`. The inverse of `excludeRepealed`, and useful for auditing what a container holds that is no longer operative."},"cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Resume token from a previous response's `nextCursor`. Only meaningful at the level that lists sections. Omit it to start at the beginning of the container."}},"required":["corpusType"]}},{"name":"list_statutes_coverage","description":"Self-describing coverage matrix: every corpusType we hold and its per-jurisdiction section counts. Use before answering a jurisdiction question to check whether we actually cover that state and that body of law, so you can say so instead of searching a corpus that does not exist. Free.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"required":[]}},{"name":"list_watch_changes","description":"What a watched source added, amended or removed: section identifier, citation, title and detection time, newest first. Metadata only, never section text. Covers the board's whole captured history, not just since you subscribed. Safe to poll: it writes nothing and cannot suppress or double-fire a delivery. Page with sinceId and the returned cursor. Free.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"watch_id":{"type":"string"},"limit":{"type":"integer","maximum":200,"minimum":1,"description":"Max changes to return.","default":50},"sinceId":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"description":"Return only changes with an `id` greater than this. The cursor to build on: ids are a monotonic sequence, so this is exact, immune to clock skew, and cannot drop two changes that share a timestamp. Carry `meta.cursor` forward from your last page."},"beforeId":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"description":"Return only changes with an `id` below this: the cursor for walking BACK through history, where `sinceId` walks forward into new ones. Pass the smallest `id` on your last page."},"since":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Return only changes detected strictly after this ISO-8601 timestamp. Coarser than `sinceId` (a single refresh writes many rows at the same instant, and this drops all of them), but useful when all you kept was the `detectedAt` off a `changes[]` item in a webhook body. Prefer that item's `id` as `sinceId` where you still have it. Both may be combined.","examples":["2026-08-07T04:10:00Z"]},"changeKind":{"anyOf":[{"items":{"type":"string","enum":["added","amended","removed"]},"type":"array"},{"type":"null"}],"description":"Filter to these kinds. Repeat the parameter to pass several (`?changeKind=added&changeKind=amended`). Omit for all three."},"order":{"type":"string","enum":["asc","desc"],"description":"`desc` (default) is newest first, for showing a recent-activity list. Use `asc` when catching up from a cursor: walking forward means a page that hits `limit` leaves the gap at a known end.","default":"desc"}},"required":["watch_id"]}},{"name":"list_watch_deliveries","description":"Per-attempt delivery log for one watch: status code, error and attempt number, retained 90 days. Webhook watches only -- an email-only watch always returns an empty list, because email sends are not logged per attempt. Use to debug a webhook that is not arriving. Free.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"watch_id":{"type":"string"},"limit":{"type":"integer","maximum":200,"minimum":1,"description":"Max deliveries to return.","default":50}},"required":["watch_id"]}},{"name":"list_watches","description":"List the board watches you own, with their board, channel, destination, active state and the outcome of the last delivery attempt. Use to find a watchId for the other watch tools. Free.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"limit":{"type":"integer","maximum":200,"minimum":1,"description":"Max watches to return.","default":100},"offset":{"type":"integer","minimum":0,"description":"Number of watches to skip, for paging.","default":0}},"required":[]}},{"name":"resolve_statute_citation","description":"Resolve a Bluebook citation string ('42 U.S.C. 1983', '16 C.F.R. 444.1', 'Cal. Code Regs. tit. 22, 76227') to the exact section, confirmed, with an official source link and the act_id. Use this whenever the user gives you a citation rather than a question -- it is far more reliable than searching for the citation text. Cost: 2 credits.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"cite":{"type":"string","maxLength":200,"minLength":2,"description":"A Bluebook citation string, e.g. '42 U.S.C. 1983' or '16 C.F.R. 444.1'.","examples":["42 U.S.C. 1983"]},"state":{"anyOf":[{"type":"string","maxLength":2,"minLength":2},{"type":"null"}],"enum":["al","ak","az","ar","ca","co","ct","de","dc","fl","ga","hi","id","il","in","ia","ks","ky","la","me","md","ma","mi","mn","ms","mo","mt","ne","nv","nh","nj","nm","ny","nc","nd","oh","ok","or","pa","pr","ri","sc","sd","tn","tx","ut","vt","va","wa","wv","wi","wy"],"description":"Optional 2-letter jurisdiction to resolve WITHIN, e.g. `tx`. Some citation forms are shared: `8 CCR 1206-2` is Colorado and `22 CCR 76227` is California. A constraint, not a hint: a citation naming a different jurisdiction returns `resolved: false` rather than being forced into this one.","examples":["tx"]},"corpusType":{"anyOf":[{"type":"string"},{"type":"null"}],"enum":["CONSTITUTION","REGULATION","STATE","STATE_CONSTITUTION","STATE_RULES"],"description":"Optional corpus to resolve WITHIN: `STATE`, `REGULATION`, `STATE_RULES`, `CONSTITUTION`, `STATE_CONSTITUTION`. Narrows a citation whose form several corpora share; like `state`, a citation belonging to another corpus resolves to nothing instead.","examples":["REGULATION"]}},"required":["cite"]}},{"name":"resolve_statute_citations_batch","description":"Resolve up to 50 Bluebook citations in one call, returning the same confirmed section, official source link and act_id as the single-citation tool. Use when a document or answer cites several provisions: one call is far cheaper in both credits and latency than looping the single-citation tool. Cost: 2 credits.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"citations":{"items":{"type":"string"},"type":"array","maxItems":500,"minItems":1,"description":"Bluebook citation strings, up to 50 per call. Duplicates are collapsed and order preserved, so `results` lines up with the de-duplicated input. Priced PER CITATION at the single-resolve rate: batching is a round-trip and latency win, not a discount.","examples":[["42 U.S.C. 1983","16 C.F.R. 444.1","Cal. Civ. Code 1950.5"]]},"state":{"anyOf":[{"type":"string","maxLength":2,"minLength":2},{"type":"null"}],"enum":["al","ak","az","ar","ca","co","ct","de","dc","fl","ga","hi","id","il","in","ia","ks","ky","la","me","md","ma","mi","mn","ms","mo","mt","ne","nv","nh","nj","nm","ny","nc","nd","oh","ok","or","pa","pr","ri","sc","sd","tn","tx","ut","vt","va","wa","wv","wi","wy"],"description":"Optional two-letter jurisdiction to resolve every citation WITHIN. Applies to the whole batch: a batch spanning jurisdictions should omit it and let each citation name its own. Same semantics as the single-citation route -- a constraint, not a hint.","examples":["ca"]},"corpusType":{"anyOf":[{"type":"string"},{"type":"null"}],"enum":["CONSTITUTION","REGULATION","STATE","STATE_CONSTITUTION","STATE_RULES"],"description":"Optional corpus to resolve every citation WITHIN: `STATE` (statutory text, federal or state), `REGULATION` (administrative codes), `STATE_RULES` (court rules), `CONSTITUTION` (constitutional text), `STATE_CONSTITUTION` (constitutional text; a synonym of `CONSTITUTION` here, since `state` is what separates the two). Same semantics as the single-citation route.","examples":["REGULATION"]}},"required":["citations"]}},{"name":"search","description":"Generic corpus search over US primary law, returning `{id, title, url}` records for citation. Present so this server works in clients that require the standard search/fetch pair. If you can call `search_us_statutes`, prefer it: it filters by jurisdiction, corpus, date and status, which this cannot. Pair with `fetch` to read a result.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"query":{"type":"string"}},"required":["query"],"additionalProperties":false}},{"name":"search_us_statutes","description":"Semantic + keyword search across US primary law: the United States Code (USC), the Code of Federal Regulations (CFR), and all 50 states' statutes, regulations, constitutions and court rules. Use for any 'what does the law say' question. Filter by corpusType and titleNumber. Returns sections with citation, hierarchy and official source links. The returned act_id (e.g. 'USC_T42_C21_S1983') feeds every other statute tool -- do not hand-build one, they usually 404. Cost: 4 credits.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"query":{"type":"string","maxLength":500,"minLength":2,"description":"Search query in natural language.","examples":["insider trading penalties"]},"corpusType":{"anyOf":[{"type":"string","enum":["USC","CFR","STATE","CONSTITUTION","FEDERAL_RULES","STATE_CONSTITUTION","STATE_RULES","EXECUTIVE_ACTION","REGULATION","FEDERAL_REGISTER","FEDERAL_REGISTER_NOTICE","AGENCY_GUIDANCE","SENTENCING_GUIDELINES","US_TAX_TREATY","STATE_AGENCY_GUIDANCE","STATE_AG_OPINION","SESSION_LAW","STATUTE_COMPILATION","AGENCY_ADJUDICATION","CFR_ANNUAL","USC_ANNUAL"]},{"items":{"type":"string","enum":["USC","CFR","STATE","CONSTITUTION","FEDERAL_RULES","STATE_CONSTITUTION","STATE_RULES","EXECUTIVE_ACTION","REGULATION","FEDERAL_REGISTER","FEDERAL_REGISTER_NOTICE","AGENCY_GUIDANCE","SENTENCING_GUIDELINES","US_TAX_TREATY","STATE_AGENCY_GUIDANCE","STATE_AG_OPINION","SESSION_LAW","STATUTE_COMPILATION","AGENCY_ADJUDICATION","CFR_ANNUAL","USC_ANNUAL"]},"type":"array"},{"type":"null"}],"description":"Restrict to one corpus, or several as a list. Federal: `USC`, `CFR`, `CONSTITUTION`, `FEDERAL_RULES`, `FEDERAL_REGISTER`, `EXECUTIVE_ACTION`, `AGENCY_GUIDANCE`, `SENTENCING_GUIDELINES`, `US_TAX_TREATY`, `SESSION_LAW` (Statutes at Large, as enacted), `STATUTE_COMPILATION` (an act as amended through a stated later law), `AGENCY_ADJUDICATION` (federal administrative adjudication: DOJ Office of Legal Counsel opinions and MSPB decisions). Pair with `state`: `STATE`, `REGULATION`, `STATE_RULES`, `STATE_CONSTITUTION`, `STATE_AGENCY_GUIDANCE`. Omit for all.","examples":["CFR"]},"state":{"anyOf":[{"type":"string"},{"items":{"type":"string"},"type":"array"},{"type":"null"}],"enum":["federal","al","ak","az","ar","ca","co","ct","de","dc","fl","ga","hi","id","il","in","ia","ks","ky","la","me","md","ma","mi","mn","ms","mo","mt","ne","nv","nh","nj","nm","ny","nc","nd","oh","ok","or","pa","pr","ri","sc","sd","tn","tx","ut","vt","va","wa","wv","wi","wy"],"description":"Jurisdiction. A 2-letter code for one of the 52 supported US jurisdictions (50 states + DC + PR), or `federal` for USC / CFR / Constitution / federal rules. Pass a list to search several at once. Case-insensitive. Omit to search every jurisdiction.","examples":["ca"]},"code":{"anyOf":[{"type":"string"},{"items":{"type":"string"},"type":"array"},{"type":"null"}],"description":"Restrict to specific state statutory codes, e.g. `tx_pe` for the Texas Penal Code. Values are the `actId`s from list_statute_divisions. List allowed, across states. The only way to scope below a whole jurisdiction: `state=tx` alone searches all ~15 Texas codes.","examples":["tx_pe"]},"yearFrom":{"anyOf":[{"type":"integer","maximum":2100,"minimum":1700},{"type":"null"}],"description":"Only sections last amended in or after this year; pair with `yearTo` for a window. Tracks the publisher's own amendment credit, not when we rebuilt the corpus. About a fifth of sections carry no credit and are excluded once either bound is set.","examples":[2020]},"yearTo":{"anyOf":[{"type":"integer","maximum":2100,"minimum":1700},{"type":"null"}],"description":"Only sections last amended in or before this year. This filters the LAST amendment, so a section amended in 2025 is excluded by `yearTo=2024` even though it existed in 2024. A currency filter, not point-in-time retrieval.","examples":[2026]},"excludeRepealed":{"type":"boolean","description":"Drop sections whose own status says they are not operative (repealed, renumbered, transferred, expired, superseded, omitted, and the rest). Removes what we KNOW is dead; it does not promise the remainder is good law. Read `goodLawStatus` per result to tell them apart: `good_law` is checked, `unknown` is unchecked.","default":false,"examples":[true]},"actStatus":{"anyOf":[{"type":"string"},{"items":{"type":"string"},"type":"array"},{"type":"null"}],"enum":["abolished","deleted","expired","in_force","inactive","non_precedential","not_funded","not_yet_effective","omitted","proposed","recodified","recompiled","rejected","relocated","removed","renumbered","repealed","rescinded","reserved","revoked","superseded","terminated","transferred","unconstitutional","vacant","vacated","vetoed","withdrawn"],"description":"Positively scope to raw publisher statuses: `repealed` for dead law only, `in_force` for sections affirmatively marked current. The inverse of `excludeRepealed`, and what a compliance diff asking what was LOST needs. Combining a dead status with `excludeRepealed: true` is rejected 422.","examples":["repealed"]},"changedSince":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},{"type":"null"}],"format":"date","description":"Only sections we OBSERVED changing on or after this date (`YYYY-MM-DD`). Observed, not effective: the date we saw it, an upper bound on when it took effect. Capture began long after the corpus did and events sweep at 24 months, so empty means no captured change, never that nothing was amended.","examples":["2026-08-01"]},"agency":{"anyOf":[{"type":"string"},{"items":{"type":"string"},"type":"array"},{"type":"null"}],"description":"Federal Register agency slug, e.g. `environmental-protection-agency`. Pass a list to match any of several. Applies to `FEDERAL_REGISTER` and `EXECUTIVE_ACTION`; other corpora carry no agency, so combining this with them returns nothing.","examples":["environmental-protection-agency"]},"documentType":{"anyOf":[{"type":"string","enum":["final","proposed","presidential"]},{"type":"null"}],"description":"Federal Register document stage: `final` (a rule in force), `proposed` (an NPRM), or `presidential` (a Presidential Document, the `EXECUTIVE_ACTION` corpus). The same distinction appears in each row's `actId` prefix (`FR_RULE_` vs `FR_PRORULE_`).","examples":["final"]},"publishedFrom":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},{"type":"null"}],"format":"date","description":"Only return Federal Register documents published on or after this date (`YYYY-MM-DD`). This is the PUBLICATION date, which is not the same as `yearFrom`: that filters the version year of a section.","examples":["2024-01-01"]},"publishedTo":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},{"type":"null"}],"format":"date","description":"Only return Federal Register documents published on or before this date.","examples":["2024-12-31"]},"titleNumber":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter by USC/CFR title number (e.g., 17 for SEC, 42 for civil rights). Only meaningful for `USC`/`CFR`; ignored for state corpora whose titles are alphabetic (e.g. Texas `pe` = Penal Code).","examples":[17]},"chapter":{"anyOf":[{"type":"string"},{"items":{"type":"string"},"type":"array"},{"type":"null"}],"description":"One or more chapters within a title or code, e.g. `21` for USC Title 42 Chapter 21. Pass a hit's `parent.chapter` back to search its neighbors. Chapter numbers repeat across titles, so pair with `titleNumber` (USC) or `code` (state); an unpaired chapter is rejected.","examples":["21"]},"part":{"anyOf":[{"type":"string"},{"items":{"type":"string"},"type":"array"},{"type":"null"}],"description":"One or more parts within a title, e.g. `240` for 17 C.F.R. Part 240. The CFR counterpart to `chapter`: pass a hit's `parent.part` back. Pair with `titleNumber`; an unpaired part is rejected.","examples":["240"]},"source":{"anyOf":[{"type":"string"},{"items":{"type":"string"},"type":"array"},{"type":"null"}],"enum":["administrative_guidance","ag_precedent","agency_guidance","bia_precedent","bis_advisory_opinion","cfpb_circular","cfpb_enforcement_action","cfpb_supervisory_guidance","cftc_staff_letter","cms_iom","copyright_circular","copyright_compendium","cpsc_advisory_opinion","cpsc_secg","ddtc_commodity_jurisdiction","ddtc_guidance","dfars","dfars_pgi","doe_appliance_guidance","doj_business_review","doj_justice_manual","doj_leniency","eeoc_guidance","far","fcc_declaratory_ruling","fdic_fil","ferc_policy_statement","fincen_amla_material","fincen_boi_compliance_guide","fincen_boi_faq","fincen_boi_rule_qa","fincen_guidance","fincen_ruling","frap","frb_sr_letter","frbp","frcp","frcrp","fre","ftc_administrative_decision","ftc_advisory_opinion","ftc_advocacy_filing","ftc_hsr_interpretation","ftc_policy_statement","hhs_ocr_hipaa_faq","hhs_ocr_hipaa_guidance","hhs_ocr_resolution_agreement","immigration_admin_precedent","irs_announcement","irs_irm","irs_notice","irs_rev_proc","irs_rev_rul","irs_written_determination","merger_guidelines","mpep","mspb_nonprecedential","mspb_precedential","nlrb_advice_memo","nlrb_board_decision","nlrb_gc_memo","occ_bulletin","occ_interpretive_letter","ofac_faq","olc_opinion","sct","sec_commission_opinion","senate_treaty","senate_treaty_document","senate_treaty_resolution","ssa_ruling","state_financial_bulletin","state_insurance_bulletin","tmep","us_tax_treaty","us_tax_treaty_technical_explanation","uscis_policy_manual","whd_foh","whd_opinion_letter"],"description":"The named body of law within a `corpusType` that folds several together: `FEDERAL_RULES` into `frcp`/`fre`/`sct`, `CFR` into `far`/`dfars`, `AGENCY_GUIDANCE` into ~34 agency sources, `AGENCY_ADJUDICATION` into `olc_opinion`/`mspb_precedential`/`mspb_nonprecedential`. Every result carries its own `source`, so a hit's value can be passed straight back.","examples":["sct"]},"fields":{"anyOf":[{"items":{"type":"string"},"type":"array","uniqueItems":true},{"items":{"type":"string"},"type":"array"},{"type":"null"}],"enum":["abstract","actId","actStatus","action","adoptingCitations","agencies","agencySlugs","alternateCitations","amendmentHistory","amendmentNote","amendmentYears","amendmentsCount","articleName","articleNumber","audience","body","breadcrumb","caseName","chapter","chapterName","citation","citationShort","committeeNote","corpusType","court","crossReferencesCfr","crossReferencesUsc","currencyNote","currencyYear","currentThrough","datesText","displayLabel","displayPath","documentNumber","documentSubtype","documentTypeLabel","docxUrl","edition","effectiveDate","effectiveDateRaw","excerpt","expirationDate","expirationDateRaw","externalUrl","federalRegisterCitations","forum","frCommentsCloseOn","frCorrectionOf","frCorrections","frDocketIds","frEffectiveOn","frEndPage","frRegulationIdNumbers","frRegulationsDotGovUrl","frRelatedDocuments","frSignificant","frStartPage","frVolume","goodLawStatus","govInfoHtmlUrl","govInfoPdfUrl","granuleId","history","htmlUrl","implementingRegulations","issueDate","issueDateRaw","issuingAgency","languageCode","lastAmendedDate","lastAmendedYear","lawImplemented","licenseNote","originalEnactmentDate","originalEnactmentDateRaw","packageId","parent","part","partName","pdfUrl","popularName","president","priorEffectiveDates","program","publicLawCites","publicLaws","publicationDate","publisherKey","referencedShortTitles","relatedCitations","relatedDocuments","releaseDate","relevanceScore","renumberedTo","renumberedToLabel","requesters","rescindedOn","rescindedOnRaw","reviewDate","ruleSet","ruleSetCode","sectionNumber","sectionTitle","settlementAmount","signingDate","signingDateRaw","source","sourceCharEnd","sourceCharStart","sourceCredit","sourceNote","sourcePageEnd","sourcePageStart","state","stateHtmlUrl","statutoryAuthority","subchapter","subchapterName","subject","subjectNumber","subpart","subpartName","subtitle","subtitleName","supersededBy","supersedes","supersessionActions","textUrl","title","titleName","titleNumber","topLevelTitle","topics","transferredTo","transferredToLabel","versionId","volume","wordCount","xmlUrl","year"],"description":"Return only these result fields, e.g. `[\"title\", \"excerpt\"]`. A result carries 40+ fields, most null on any given row. `actId` and `citation` are always included. Unknown names are rejected 422. Omit for the full object.","examples":[["title","excerpt","state"]]},"limit":{"type":"integer","maximum":50,"minimum":1,"description":"Number of results to return per page.","default":10},"offset":{"type":"integer","maximum":70,"minimum":0,"description":"How many results to skip, for paging. Every page of a query is cut from one ranking, so results never repeat or go missing between pages. The deepest reachable result is `offset` + `limit`; check `hasMore`.","default":0},"includeBody":{"type":"boolean","description":"Return each hit's full text inline on `body`, instead of one `/section/{actId}/body` call per hit. Buys latency, not a discount: the 4-credit search PLUS 6 credits for every row that returns text, so ten rows is 64. ⚠️ It multiplies with `limit`; 50 rows is 304 credits in one call. Rows with no text are not charged, so read `creditsConsumed`. Prefer this over a bigger `excerptChars`: an excerpt is windowed around the match and can start mid-section, so it is not safe to quote.","default":false,"examples":[true]},"excerptChars":{"type":"integer","maximum":4000,"minimum":100,"description":"Characters of matching text to include in each result's `excerpt`. The excerpt is a ranking preview; use `/us/statutes/section/{actId}/body` for the full text. Default 500.","default":500},"matchType":{"type":"string","enum":["any","all","phrase"],"description":"`any` (default) is hybrid semantic + keyword ranking, for natural-language questions. `all` requires every query term; `phrase` matches an exact phrase, for a defined term. To pull up one section, pass its citation as the query and it resolves to that section at rank 1.","default":"any","examples":["phrase"]}},"required":["query"]}},{"name":"test_watch","description":"Send a synthetic notification to a watch's destination to verify signing, outbound auth and reachability before relying on it. Test deliveries are deliberately not persisted, so they never appear in list_watch_deliveries and never move the watch's last-notified timestamp. Rate limited by a short cooldown. Free.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"watch_id":{"type":"string"}},"required":["watch_id"]}},{"name":"update_watch","description":"Change a watch's destination, signing secret, outbound auth, or active state. Set isActive false to pause notifications while keeping the watch's config and history. The channel itself cannot be changed. Free.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"watch_id":{"type":"string"},"isActive":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Pause (false) or resume (true) the watch."},"webhookUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"New webhook URL. Only valid on a webhook/both channel watch. Re-validated against the SSRF blocklist. Cannot be cleared."},"webhookSecret":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"New signing secret, or empty string to stop signing deliveries. Only valid on a webhook/both channel watch."},"scope":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"description":"Replace the alert's narrowing. Three mutually exclusive forms. Hierarchy prefix: `{\"title\": \"21\", \"part\": \"314\"}`, where every level set must match and `title` is required whenever a narrower level is set. Exact section: `{\"actId\": \"CFR_T21_P314_S314_50\"}`, the only form EVERY source accepts. Named source: `{\"source\": \"fdic_fil\"}`, on `agency_guidance`, `agency_manuals` and `cfr` only. Omitting the field leaves the current scope unchanged.","examples":[{"part":"314","title":"21"}]},"emailAddress":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"New email address. Only valid on an email/both channel watch. Cannot be cleared."},"webhookAuth":{"anyOf":[{"properties":{"scheme":{"type":"string","enum":["none","bearer","basic","header"],"description":"`bearer` sends `Authorization: Bearer <secret>`. `basic` sends `Authorization: Basic <secret>` with the secret already base64-encoded by you. `header` sends `<headerName>: <secret>`, for gateways that read something like `X-Api-Key`. `none` removes any credential currently stored.","default":"none"},"secret":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The credential value. Stored encrypted and never returned. Required when setting a scheme for the first time or changing scheme; on PATCH you may omit it to keep the stored one while changing only `headerName`."},"headerName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Header to send the credential on. Required for `header`, and rejected for every other scheme. Cannot be `Authorization` (use `bearer`/`basic`), a transport header, or one of ours.","examples":["X-Api-Key"]}},"type":"object","description":"How a delivery should authenticate itself to your endpoint.\n\nSEPARATE FROM `webhookSecret`, and the distinction is the point.\n`webhookSecret` signs the body so you can prove it is intact and ours.\nThis sends a credential so your gateway can reject anything else before\nit reaches your handler. Most integrations want the second, many want\nboth, and the two are set independently."},{"type":"null"}],"description":"Replace the outbound credential config, sent as a WHOLE object rather than field by field: a scheme without a credential is not a partial edit, it is a broken config. `{\"scheme\": \"none\"}` removes auth. Keeping the scheme and omitting `secret` retains the stored credential."}},"required":["watch_id"]}}],"scan":{"score":84,"grade":"B","scanned_at":"2026-09-20T16:20:26.798Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-20T16:20:26.770Z","components":{"code":{"score":-1,"max":25,"notes":["remote-only server, no package to scan"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 1674ms"]},"poisoning":{"score":13,"max":15,"notes":["27 tool descriptions checked"]},"auth":{"score":8,"max":15,"notes":["API key sent as a header"]},"maintenance":{"score":15,"max":15,"notes":["last push 1 days ago"]},"identity":{"score":7,"max":10,"notes":["registry namespace matches repository owner"]}},"findings":[{"id":"poison.long-description","severity":"low","component":"poisoning","title":"Unusually long tool description (over 2,000 characters)","evidence":"tool get_credit_balance: …Returns the credits this API key's account can spend right now. **Free.** This endpoint is never charged, so you can poll it to drive alerting or a pre-flight check without the check itself costing you anything. It is rate limited like every other key-authenticated route. **Authentication:** any valid `vq_key_` key. No particular scope is required. ## What the number means `creditsRemaining` is derived from your live credit buckets under the same expiry rule the billing path applies, so it is what a call would actually be allowed to spend, not a cached figure that a nightly job later corrects. It is the same field name metered responses use, so you can read `creditsRemaining` the same way everywhere. ## Not all credits behave alike Read `bySource` before assuming a balance is durable. `subscription` credits are use-it-or-lose-it and are forfeited at the end of the period, while `payg` credits you purchased burn last and persist. `nextExpiry` tells you what is about to be forfeited and when, which is the one thing a balance alone cannot. ## Two separate ceilings Credits are how MUCH you may spend; `rateLimit` is how FAST you may call. They are independent, so a healthy balance does not exempt you from throttling and staying under the rate limit does not pay for a call. `rateLimit` has your plan applied and lets you size a client before issuing a request. Every response also carries `X-RateLimit-Limit`, `X-RateLimit-Remaining` and `X-RateLimit-Reset` for the per-minute window, plus `X-RateLimit-Limit-Day` and `X-RateLimit-Remaining-Day` for the daily backstop; those report the same ceilings with your live headroom. ## Example ```bash curl https://api.vaquill.ai/api/v1/credits/balance \\ -H \"Authorization: Bearer $VAQUILL_API_KEY\" ``` ```json { \"creditsRemaining\": 103039.0, \"usdRemaining\": 1030.39, \"bySource\": [ { \"source\": \"payg\", \"credits\": 102539.0 }, { \"source\": \"subscription\", \"credits\": 500.0 } ], \"nextExpiry\": { \"at\": \"2026-10-01T00:00:00Z\", \"credits\": 500.0 }, \"plan\": \"business\", \"totalPurchased\": 150000.0, \"totalConsumed\": 46961.0, \"asOf\": \"2026-09-19T12:34:56Z\" } ```…"}],"inputs":{"probes":[{"url":"https://mcp.vaquill.ai/s/_","reachable":true,"authRequired":false,"latencyMs":1674,"serverInfo":{"name":"Vaquill Legal Research","version":"4.0.5"}},{"url":"https://mcp.vaquill.ai/in/s/_","reachable":true,"authRequired":false,"latencyMs":1104,"serverInfo":{"name":"Vaquill Legal Research (IN)","version":"4.0.5"}}],"packages":[],"repo":{"found":true,"owner":"Vaquill-AI","repo":"vaquill-mcp","archived":false,"pushedAt":"2026-09-19T12:12:30Z","stars":7,"forks":1,"openIssues":1,"ownerType":"Organization","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/257602533?v=4","ownerCreatedAt":"2026-01-27T18:06:45Z","license":"MIT"},"icon":{"url":"https://avatars.githubusercontent.com/u/257602533?v=4&s=128","source":"github"},"presence":{"stars":7,"forks":1,"downloadsWeek":null,"license":"MIT","lastPushAt":"2026-09-19T12:12:30.000Z","score":29}}}},"grade_history":[],"reviews":[]}