Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

Vaquill

REMOTE · MCP.VAQUILL.AI · 2 COMPONENTS · SCANNED SEP 21

Search US and Indian statutes, regulations, constitutions, and court rules.

+3 this week 74 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →

Endpoint Security60
Transport & Reachability100
Schema Quality & AI Usability77
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 6867 tokens (~274/item across 25 items; 22 tools + 3 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management60
  • Stability observed for 18 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage99
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 97% of tool parameters carry a description.Partial
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • We read all 22 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 23 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a current MCP spec version (2026-07-28).Pass
Install

How do I install the Vaquill MCP server?

Vaquill is a hosted endpoint at https://mcp.vaquill.ai/in/s/_, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

remote · mcp.vaquill.ai

# add to Claude Code
claude mcp add --transport http vaquill-ai-vaquill-mcp 'https://mcp.vaquill.ai/in/s/_'
// .cursor/mcp.json
{
  "mcpServers": {
    "vaquill-ai-vaquill-mcp": {
      "url": "https://mcp.vaquill.ai/in/s/_"
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "vaquill-ai-vaquill-mcp": {
      "type": "http",
      "url": "https://mcp.vaquill.ai/in/s/_"
    }
  }
}
# ~/.codex/config.toml
[mcp_servers.vaquill-ai-vaquill-mcp]
url = "https://mcp.vaquill.ai/in/s/_"
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "vaquill-ai-vaquill-mcp": {
      "type": "remote",
      "url": "https://mcp.vaquill.ai/in/s/_",
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add vaquill-ai-vaquill-mcp --url 'https://mcp.vaquill.ai/in/s/_' --transport streamable-http
# ~/.hermes/config.yaml
mcp_servers:
  vaquill-ai-vaquill-mcp:
    url: "https://mcp.vaquill.ai/in/s/_"
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "vaquill-ai-vaquill-mcp": {
      "Transport": "http",
      "Url": "https://mcp.vaquill.ai/in/s/_"
    }
  }
}
# add to Vellum
assistant mcp add vaquill-ai-vaquill-mcp -t streamable-http -u 'https://mcp.vaquill.ai/in/s/_'
// mcp.json
{
  "mcpServers": {
    "vaquill-ai-vaquill-mcp": {
      "type": "http",
      "url": "https://mcp.vaquill.ai/in/s/_"
    }
  }
}

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 20 Sept 26 0
    • Tool “get_section_history” rewrote its description, which is the text the model reads security
    • Tool “get_act_structure” rewrote its description, which is the text the model reads security
    • Tool “india_act_cited_by” rewrote its description, which is the text the model reads security
    • Tool “india_act_definitions” rewrote its description, which is the text the model reads security
    • Tool “india_act_subordinate” rewrote its description, which is the text the model reads security
    • Server version: 4.0.3 → 4.0.5 functional
    • New tool “get_india_credit_balance” functional
  • 19 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 53 to 57. That category is still filling its 30-day observation window: 16 days of observed history at the previous scan, 17 at this one. The score rises as the window fills, whether or not the server changes.

  • 17 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 47 to 50. That category is still filling its 30-day observation window: 14 days of observed history at the previous scan, 15 at this one. The score rises as the window fills, whether or not the server changes.

  • 15 Sept 26 +1
    • Tool “india_section_references” rewrote its description, which is the text the model reads security
    • Tool “india_act_cited_by” rewrote its description, which is the text the model reads security
    • Tool “india_act_definitions” rewrote its description, which is the text the model reads security
    • Tool “india_act_subordinate” rewrote its description, which is the text the model reads security
    • Schema quality: 230 → 280 functional
    • “india_act_subordinate” added an optional parameter “page” cosmetic
    • “india_act_subordinate” added an optional parameter “pageSize” cosmetic
    • “india_act_cited_by” added an optional parameter “page” cosmetic
    • “india_act_cited_by” added an optional parameter “pageSize” cosmetic
    • “india_act_definitions” added an optional parameter “limit” cosmetic
    • “india_act_definitions” added an optional parameter “page” cosmetic
    • “india_act_definitions” added an optional parameter “pageSize” cosmetic
    • “india_section_references” reworded the description of “section_number” cosmetic
    • “list_acts” reworded the description of “category” cosmetic
    • “list_acts” reworded the description of “department” cosmetic
    • “list_acts” reworded the description of “page” cosmetic
    • “list_acts” reworded the description of “pageSize” cosmetic
    • “list_acts” reworded the description of “search” cosmetic
    • “list_acts” reworded the description of “sort” cosmetic
    • “list_acts” reworded the description of “state” cosmetic
    • “list_acts” reworded the description of “status” cosmetic
    • “list_acts” reworded the description of “yearFrom” cosmetic
    • “list_acts” reworded the description of “yearTo” cosmetic
    • “resolve_india_citation” reworded the description of “asAtDate” cosmetic
    • “resolve_india_citation” reworded the description of “state” cosmetic
    • “search_acts” reworded the description of “actStatus” cosmetic
    • “search_acts” reworded the description of “category” cosmetic
    • “search_acts” reworded the description of “legalSubject” cosmetic
    • “search_acts” reworded the description of “matchType” cosmetic
    • “search_acts” reworded the description of “pageSize” cosmetic
    • “search_acts” reworded the description of “provisionType” cosmetic
    • “search_acts” reworded the description of “sectionType” cosmetic
    • “search_acts” reworded the description of “yearFrom” cosmetic
    • “search_acts” reworded the description of “yearTo” cosmetic
    • “get_act_amendments” reworded the description of “page” cosmetic
    • “get_act_amendments” reworded the description of “pageSize” cosmetic
    • “get_act_amendments” reworded the description of “section” cosmetic
    • “get_act_amendments” reworded the description of “type” cosmetic
    • “get_corresponding_provisions” reworded the description of “act_code” cosmetic
    • “get_section_history” reworded the description of “section_number” cosmetic
    • “india_act_cited_by” reworded the description of “limit” cosmetic
    • “india_act_subordinate” reworded the description of “limit” cosmetic
  • 12 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 30 to 33. That category is still filling its 30-day observation window: 9 days of observed history at the previous scan, 10 at this one. The score rises as the window fills, whether or not the server changes.

  • 10 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 23 to 27. That category is still filling its 30-day observation window: 7 days of observed history at the previous scan, 8 at this one. The score rises as the window fills, whether or not the server changes.

  • 9 Sept 26 0
    • New tool “get_pricing_in” functional
    • Tool “get_act_amendments” changed its title: Get Act Amendments → Act Amendment History cosmetic
    • Tool “fetch” changed its title: Fetch → Fetch Indian Enactment cosmetic
    • Tool “list_acts” changed its title: List Acts → Browse Indian Acts cosmetic
    • Tool “search_acts” changed its title: Search Acts → Search Indian Acts cosmetic
    • Tool “search” changed its title: Search → Search Indian Legislation cosmetic
    • Tool “list_act_filters” changed its title: List Act Filters → Act Filter Values cosmetic
    • Tool “get_corresponding_provisions” changed its title: Get Corresponding Provisions → IPC/CrPC to BNS/BNSS Mapping cosmetic
    • Tool “get_act_text” changed its title: Get Act Text → Act Text cosmetic
  • 8 Sept 26 0
    • Schema quality: 130 → 234 functional
    • Schema quality: good → excellent functional
    • Server version: 4.0.1 → 4.0.3 functional
    • New tool “get_act_section” functional
    • New tool “get_act_section_body” functional
    • New tool “get_act_status” functional
    • New tool “get_act_structure” functional
    • New tool “get_coverage” functional
    • New tool “get_section_history” functional
    • New tool “india_act_cited_by” functional
    • New tool “india_act_definitions” functional
    • New tool “india_act_subordinate” functional
    • New tool “india_section_references” functional
    • New tool “resolve_india_citation” functional
    • New tool “resolve_india_citations_batch” functional
    • “search_acts” added an optional parameter “actStatus” cosmetic
    • “search_acts” added an optional parameter “excludeRepealed” cosmetic
    • “search_acts” added an optional parameter “isSubordinate” cosmetic
    • “search_acts” added an optional parameter “legalSubject” cosmetic
    • “search_acts” added an optional parameter “matchType” cosmetic
    • “search_acts” added an optional parameter “provisionType” cosmetic
    • “search_acts” added an optional parameter “sectionType” cosmetic
    • “list_acts” reworded the description of “sort” cosmetic
    • “list_acts” reworded the description of “department” cosmetic
    • “list_acts” reworded the description of “category” cosmetic
    • “get_act_amendments” reworded the description of “type” cosmetic
    • “search_acts” reworded the description of “sectionNumber” cosmetic
    • “search_acts” reworded the description of “state” cosmetic
    • “search_acts” reworded the description of “query” cosmetic
    • “search_acts” reworded the description of “department” cosmetic
    • “search_acts” reworded the description of “category” cosmetic
    • “search_acts” reworded the description of “actTitle” cosmetic
    • “list_acts” reworded the description of “status” cosmetic
    • “list_acts” reworded the description of “state” cosmetic
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 20 Sept 2026 · Probed https://mcp.vaquill.ai/in/s/_

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=mcp.vaquill.ai CN=YR2,O=Let's Encrypt,C=US 6 Sept 2026 5 Dec 2026 RSA 4096 SHA256-RSA 5634e4d6de8579b4f3b01c4fe243b9e8274
SANs: mcp.vaquill.ai
CN=YR2,O=Let's Encrypt,C=US (CA) CN=Root YR,O=ISRG,C=US 3 Sept 2025 2 Sept 2028 RSA 2048 SHA256-RSA 4ebd24947e24d394802d84a52fd5b319
CN=Root YR,O=ISRG,C=US (CA) CN=ISRG Root X1,O=Internet Security Research Group,C=US 13 May 2026 2 Sept 2032 RSA 4096 SHA256-RSA f24b6d17f9d9ad7cb1c9fea78782699f

Background: What to check on a remote MCP endpoint →

DNSSEC secure

Validation of mcp.vaquill.ai. Secure

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
ai. present 3799 8 Verified
vaquill.ai. present 2371 13 Verified
mcp.vaquill.ai. Verified address RRset verified with the apex keys
Authentication No authorisation required

The endpoint answered without asking for a token. Anyone who knows the URL can reach it.

Result No authorisation required
HTTP status 200

Background: How OAuth 2.1 works in the 2026 MCP spec →

Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://mcp.vaquill.ai/in/s/_ Verified 200
http (plaintext) http://mcp.vaquill.ai/in/s/_ HTTPS enforced 301 https://mcp.vaquill.ai/in/s/_
MCP tools · 22 exposed · ~6,735 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
fetch ~106

Fetch one Indian enactment by the `id` from a `search` result, returning `{id, title, text, url, metadata}`. Also accepts a source URL or a bare path. NOTE: the India corpus serves an enactment as publisher links rather than inline text, so `text` carries the title and `metadata` carries the PDF, HTML and plain-text URLs to read. Prefer `get_act_text` if you can call it.

NameTypeReqDescription
idstringyes

Structured output declared, but exposes no named fields.

No examples provided.

get_act_amendments ~346

The amendment history recorded against one enactment: substitutions, insertions and omissions, each with the amending Act and its effective date (e.g. 'Subs. by Act 22 of 2023, s. 44 (w.e.f. 13-11-2025)'). Use to check whether a provision still reads as enacted before relying on its text. An empty list means no amendment was recorded, NOT that the Act was never amended. Cost: 5 credits.

NameTypeReqDescription
act_idstringyesSection 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…
pageinteger1-based page number.
pageSizeintegerResults per page (1-200).
sectionKeep only footnotes attached to this section, written exactly as the publisher does. Alphanumeric suffixes are part of the number, not a sub-provision: `498A` is one section, not section 498 clause A.
typeAmendment action class. Served in the NOMINAL spelling; the corpus stores the verbal form (`substituted`) and either is accepted. Values: `substitution`, `insertion`, `omission`, `renumbering`, `addi…

Structured output declared, but exposes no named fields.

No examples provided.

get_act_section ~255

A single provision with its citation, its position in the act, the structural features its text carries, and what it points at. **Cost: 2 credits.** This does not return the provision's text. `GET /acts/{actId}/sections/{n}/body` does, and is priced separately because it reads the act document. `wordCount` is summed across every passage of the provision. `actsReferenced` is whitespace-normalised before deduplication, because the publisher's line breaks otherwise make one cited act look like two.

NameTypeReqDescription
act_idstringyesSection 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…
section_numberstringyesSection number exactly as the publisher writes it. Alphanumeric suffixes are part of the number, not a sub-provision: `498A` is one section, not section 498 clause A.

Structured output declared, but exposes no named fields.

No examples provided.

get_act_section_body ~316

The publisher's own text for one provision. **Cost: 3 credits.** Refunded when we hold the provision and cannot reproduce its text, because you asked for text and did not get it. The text is sliced out of the act document by the character offsets stored with each passage. It is never assembled by concatenating search passages: those carry a retrieval header that we synthesized (`Act: ... | India | State | In Force`), and serving that as statute would put our words inside a quotation of the law. **This text is as the publisher published it.** We do not apply amendments to it. `GET /acts/{actId}/sections/{n}/history` lists every amendment we hold for the provision, each with an `appliedStatus` saying whether it is reflected here. It is not.

NameTypeReqDescription
act_idstringyesSection 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…
section_numberstringyesSection number exactly as the publisher writes it. Alphanumeric suffixes are part of the number, not a sub-provision: `498A` is one section, not section 498 clause A.

Structured output declared, but exposes no named fields.

No examples provided.

get_act_status ~337

Everything we know about an act's standing, kept in three separate vocabularies that are deliberately never collapsed into one verdict. **Cost: 1 credit.** - `publisherStatus` is `act_status` exactly as India Code records it. Their word. - `servedStatus` is ours: whether this API answers for the act, or has retired it as withdrawn by the publisher or as a duplicate of one we kept. - `repealClaim` is the publisher's repeal record WITH its source, and with the caveat that we do not verify whether the repealing instrument was itself brought into force. That last distinction is not pedantry. India Code lists the Industrial Disputes Act, 1947 as repealed by Act 37 of 2020, the Industrial Relations Code, which has never been commenced. Serving that as flatly "repealed" would be wrong, so this endpoint does not. A retired act answers here with `servedStatus: retired` and the reason, rather than 404ing, because "we deliberately withdrew this" is a more useful answer than "no such thing".

NameTypeReqDescription
act_idstringyesSection 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…

Structured output declared, but exposes no named fields.

No examples provided.

get_act_structure ~230

The act's own shape: its chapters and parts where the publisher gives any, and the provisions under each. **Cost: 2 credits.** `hasHierarchy` is false for most acts and that is not an error: the publisher gives many acts no chapter or part divisions at all, and for those `nodes` is a flat list of sections. The free `GET /acts/coverage` publishes how many acts do carry a hierarchy, as `depth.actsWithStructure`. Section numbers are sorted numerically with their alphabetic suffixes kept attached, so `498A` follows `498` and `10` follows `2`.

NameTypeReqDescription
act_idstringyesSection 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…

Structured output declared, but exposes no named fields.

No examples provided.

get_act_text ~142

Source links for one enactment: the plain-text, PDF and HTML renderings, plus how many sections it holds. Use when the user wants to read or cite the Act itself rather than a matched section. Cost: 3 credits.

NameTypeReqDescription
act_idstringyesSection 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…

Structured output declared, but exposes no named fields.

No examples provided.

get_corresponding_provisions ~225

Map a repealed Indian criminal code to the 2023 code that replaced it, section by section: IPC to BNS and CrPC to BNSS, in force from 1 July 2024. Pass either side ('ipc' or 'bns' both work). Use whenever a source, a pleading or the user cites an old section number, so you answer under the provision actually in force rather than the repealed one. 'iea'/'bsa' return 404 until that mapping lands. Cost: 1 credit.

NameTypeReqDescription
act_codestringyesEither side of a recodification pair, matched case-insensitively so `IPC` and `ipc` are the same request. `ipc`/`bns` and `crpc`/`bnss` each return the same mapping; `iea`/`bsa` are accepted and 404…

Structured output declared, but exposes no named fields.

No examples provided.

get_coverage ~256

Describe the corpus behind this API: how many acts and provisions it holds, how they break down by jurisdiction, regulator and status, and how DEEP that holding goes. **Cost: free.** Read the `depth` block before building on this API. It answers four independent questions, because "we hold the act" and "we hold what amended it" are different claims and only one of them is true for most of the corpus: - `actsWithText` is every act we serve; - `actsWithAmendmentEvents` is the much smaller set for which we hold parsed amendment records; - `actsClaimingAmendmentsWithoutEvents` is the known gap between them, published so that an empty amendment list is legible as a gap rather than as a claim that nothing ever changed. Two different kinds of count appear here and they are labelled. `passages` in the breakdown lists is faceted live and exact right now. The act-level numbers in `totals` and `depth` come from a full distinct-act scan, and `measuredOn` says when it ran. Do not divide one into the other.

Input schema present but exposes no named parameters.

Structured output declared, but exposes no named fields.

No examples provided.

get_india_credit_balance ~239

Returns the credits this API key's account can spend right now. **Free.** Never charged, so it is safe to poll for low-balance alerting or to pre-flight a batch job. **Authentication:** any valid `vq_key_` key. No particular scope is required. Credits are account-wide and are **not** split by jurisdiction: the same balance funds the India legislation endpoints and the United States primary-law endpoints, from one ledger. This route and the United States `GET /api/v1/credits/balance` therefore report the same number, and spending on either surface moves both. Read `bySource` before assuming a balance is durable: `subscription` credits are use-it-or-lose-it at the period end, while `payg` credits you purchased persist and burn last. `nextExpiry` tells you what is about to be forfeited and when. ## Example ```bash curl https://api.vaquill.ai/api/v1/in/credits/balance \ -H "Authorization: Bearer $VAQUILL_API_KEY" ```

Input schema present but exposes no named parameters.

Structured output declared, but exposes no named fields.

No examples provided.

get_pricing_in ~142

Credit-to-price conversion rate and per-endpoint costs for the India legislation surface (`/in/acts/*`). **No authentication required.** 1 credit = $0.01 USD, billed in USD. Pass `?region=US` to price the United States primary-law surface instead: it is the same credit balance and the same key.

NameTypeReqDescription
regionJurisdiction 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 s…

Structured output declared, but exposes no named fields.

No examples provided.

get_section_history ~546

The amendment record for a single provision: what changed, which Act changed it, which of that Act's sections did so, when it took effect where the publisher records a date, and the wording it replaced where the publisher quotes it. **Cost: 2 credits.** An empty history for a provision we hold IS the answer and is charged; the `coverage` block tells you whether it is empty because nothing changed or because we hold no parsed record. **Read `appliedStatus` on every event.** It is `not_applied` throughout, because the text this API serves is the publisher's published text and we do not edit it. That is a deliberate, stated position rather than an omission: you should never have to infer currency from silence. **`asOf` returns a TIMELINE, not text.** We hold amendment events and no versioned text, so there is no honest way to render this provision as it stood on a date. Passing `asOf` tells you how many recorded amendments had taken effect by then, how many had not, and how many carry no date at all. `isBounded` true means we hold no recorded event affecting that date, which is not the same as there having been none. Coverage is real and uneven: many acts carry a non-zero amendment count with no parseable footnote behind it, and about half the records we do hold carry no effective date. Read the `coverage` block on this response for the provision you asked about, and the free `GET /acts/coverage` for the corpus-wide split (`depth.actsWithAmendmentEvents` against `depth.actsClaimingAmendmentsWithoutEvents`).

NameTypeReqDescription
act_idstringyesSection 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…
asOfSplit the recorded amendments around a date (YYYY-MM-DD). Returns a timeline, never reconstructed text.
limitintegerEvents per page.
offsetintegerZero-based offset.
section_numberstringyesSection number exactly as the publisher writes it. Alphanumeric suffixes are part of the number, not a sub-provision: `498A` is one section, not section 498 clause A.

Structured output declared, but exposes no named fields.

No examples provided.

india_act_cited_by ~383

Inbound citations: provisions elsewhere in the corpus that name this act. **Cost: 2 credits.** A confident "nothing cites this" is the answer and is charged. 🔴 **Matched on the act's TITLE, not on an identifier**, because that is what the corpus stores. A citing document that wrote the title differently is missed, and the publisher's own line breaks make that measurable. Read `matchBasis` and treat the result as a floor rather than a complete set. A foundational act can be cited by thousands of provisions, so the answer is PAGED with `page` + `pageSize`, the same as the rest of this API. `total` is the number of distinct citing PROVISIONS across all pages, not the size of the page you were served (`returned`) and not the number of matching passages: one provision is stored as many passages, so `total` is the smaller number. `totalIsExact` goes false only if the corpus scan behind that count hits its ceiling, which no act in the corpus currently reaches.

NameTypeReqDescription
act_idstringyesSection 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…
limitDEPRECATED alias for `pageSize`, kept working for clients written against the original shape. Send one or the other, not both.
pageinteger1-based page number.
pageSizeRows per page (1-100). Defaults to 25.

Structured output declared, but exposes no named fields.

No examples provided.

india_act_definitions ~318

The terms an act defines, and the provision that defines them. **Cost: 2 credits.** Refunded when the act holds no extracted definitions, because the caller asked for definitions and did not get any. ⚠️ Coverage is thin and stated rather than implied: extracted defined terms exist for a minority of served acts. An empty answer here means we did not extract them, NOT that the act defines nothing. `definitionSections` is returned separately so you can read the defining provision directly even when no terms were extracted from it. `terms` is paged with `page` + `pageSize`, because a long definitions clause can run to thousands of entries. `definitionSections` is short and is NOT paged, so it repeats in full on every page.

NameTypeReqDescription
act_idstringyesSection 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…
limitDEPRECATED alias for `pageSize`, kept working for clients written against the original shape. Send one or the other, not both.
pageinteger1-based page number.
pageSizeRows per page (1-100). Defaults to 25.

Structured output declared, but exposes no named fields.

No examples provided.

india_act_subordinate ~304

Subordinate instruments the publisher records as made under this act: rules, regulations, notifications and orders. **Cost: 2 credits.** An act with no subordinate instruments on record is the answer and is charged. 🔴 Resolved by the parent's TITLE. The stored `parent_act_id` is India Code's own identifier and does not address this corpus, so a hard link would resolve to nothing. Title matching reaches a served parent for most instruments that name one, and `matchBasis` says so on every response. Paged with `page` + `pageSize`. `total` counts distinct INSTRUMENTS across all pages, not the rows on this page (`returned`) and not matching passages.

NameTypeReqDescription
act_idstringyesSection 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…
limitDEPRECATED alias for `pageSize`, kept working for clients written against the original shape. Send one or the other, not both.
pageinteger1-based page number.
pageSizeRows per page (1-100). Defaults to 25.

Structured output declared, but exposes no named fields.

No examples provided.

india_section_references ~319

Outbound citations: the other enactments this provision names, and the sections of its own act it cross-refers to. **Cost: 2 credits.** An empty result for a provision we hold IS the answer and is charged; a provision we do not hold is refunded. Act references are resolved to an `actId` where the title names something we serve, and returned with `resolved: false` where it does not. That is the honest split: the publisher names acts we may not hold, and a null id is a coverage fact rather than a parse failure. This route takes no query parameters and is not paged: one provision's own outbound edges are a short list. `totalActs` and `totalSections` are the full counts, and `truncated` says whether the row cap cut either list.

NameTypeReqDescription
act_idstringyesSection 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…
section_numberstringyesSection number exactly as the publisher writes it. Alphanumeric suffixes are part of the number, not a sub-provision: `498A` is one section, not section 498 clause A.

Structured output declared, but exposes no named fields.

No examples provided.

list_act_filters ~55

Self-describing filter vocabulary: every category, state, department and status the acts corpus actually holds, with counts. Call this before filtering, so a query uses a value that exists instead of returning empty because the spelling was wrong.

Input schema present but exposes no named parameters.

Structured output declared, but exposes no named fields.

No examples provided.

list_acts ~468

Browse and filter enactments rather than searching their text: by jurisdiction (central or a state), issuing regulator, year and status. Use when the user wants to know WHAT exists in an area before asking what it says, or to confirm an Act's exact title before citing it. Cost: 1 credit.

NameTypeReqDescription
categoryJurisdictional class of the instrument. `repealed` and `spent` are accepted for backward compatibility and resolve against the act's status instead. Values: `central`, `state`, `regulatory`, `repeale…
departmentIssuing body. Deliberately NOT an enumerated list: this field holds 943 distinct values and mixes clean regulator slugs (`sebi`, `rbi`, `moefcc`) with free-text state department names (`Law Departmen…
pageinteger1-based page number.
pageSizeintegerResults per page (1-100).
searchKeep only acts whose title contains this substring, matched case-insensitively. A title filter, not a search over the text: use POST /acts/search for that.
sortstringSort order. `popular` is DEPRECATED and behaves as `year_desc`: it ordered by a read counter held only in the retired store. Values: `year_desc`, `year_asc`, `title_asc`, `title_desc`, `popular`.
stateJurisdiction slug. `central` is a value here, for Union legislation. Live counts per jurisdiction are on GET /acts/coverage.
statusThe publisher's lifecycle status for the act. Their claim, not our verdict: see GET /acts/{actId}/status. Values: `in_force`, `repealed`, `superseded`, `spent`.
yearFromEarliest year of enactment to include, inclusive. Matched against the publisher's own year field, which is occasionally corrupt, so there is no lower bound and a value below 1800 is a legitimate way…
yearToLatest year of enactment to include, inclusive.

Structured output declared, but exposes no named fields.

No examples provided.

resolve_india_citation ~486

Turn a citation a lawyer would type into the provision it names. **Cost: 2 credits.** A malformed citation is a 422 and is NOT charged. Every other outcome is, including `not_found`: a confident negative is the answer. Accepts what Indian practice actually writes, not what a style guide prescribes. Three published standards exist and they disagree about element order, while the most common real form, `u/s 302 IPC`, appears in none of them. So order does not matter, and all of these work: u/s 302 IPC Section 302 of the Indian Penal Code, 1860 s.302 IPC S. 376(2)(g), IPC clause (a) of sub-section (1) of section 302 IPC O. 39 R. 1 CPC Art. 21 of the Constitution Regulation 24 of the SEBI (LODR) Regulations, 2015 Maharashtra Act No. LXXVII of 2018 🔴 **Read `status` before reading `candidates`.** `ambiguous` is a real answer and it is charged, because narrowing a citation to two named enactments is the work. The commonest cause is the 2023 recodification: after 1 July 2024, `s. 302` names both IPC 302 (murder) and BNS 302 (uttering words to wound religious feelings), while BNS 103 is murder. Both codes are live law simultaneously for the lifetime of pending trials, so this endpoint will not choose for you. Send `asAtDate` and it will. `r/w` ("read with") is split into separate citations and each is resolved.

NameTypeReqDescription
asAtDateThe date the conduct or document belongs to, as YYYY-MM-DD. This is how a caller says which side of the 2023 recodification they mean: without it, a criminal section number resolves to BOTH the old c…
citestringyesOne citation string.
stateNarrow to one jurisdiction. Required for a State-universal title, where the same short title names a different act in each State.

Structured output declared, but exposes no named fields.

No examples provided.

resolve_india_citations_batch ~216

The same resolver over a list, for when you would otherwise loop. **Cost: 2 credits per DISTINCT citation.** Batching buys a round trip, never a discount. Duplicates are collapsed before pricing, so sending the same citation twice is charged once. Each citation is refunded individually when we fail on it; one citation failing never refunds or voids the others. Up to 50 distinct citations, and up to 500 before deduplication. Unknown fields on the body are refused rather than ignored.

NameTypeReqDescription
asAtDateThe date the conduct or document belongs to, as YYYY-MM-DD. This is how a caller says which side of the 2023 recodification they mean: without it, a criminal section number resolves to BOTH the old c…
citationsarrayyesCitation strings, as a lawyer would type them.
stateNarrow to one jurisdiction. Required for a State-universal title.

Structured output declared, but exposes no named fields.

No examples provided.

search ~85

Generic corpus search over Indian Central and State legislation, returning `{id, title, url}` records for citation. Present so this server works in clients that require the standard search/fetch pair. Prefer `search_acts` if you can call it: it filters by category, state, year and status. Pair with `fetch` to read a result.

NameTypeReqDescription
querystringyes

Structured output declared, but exposes no named fields.

No examples provided.

search_acts ~961

Search Indian legislation down to the individual section: Central and State Acts plus the instruments of the principal regulators (SEBI, RBI, MCA, IRDAI, TRAI, DGFT). Use for any 'what does Indian law say' question. Supports boolean and phrase queries; filters by category, state, year and status. Returns sections with title, chapter and a sourceUrl pointing at the publisher's own document. The returned actId (e.g. 'IND_central_2065') feeds every acts tool. Cost: 2 credits.

NameTypeReqDescription
actStatusFilter by the publisher's lifecycle status. Accepts one value or a list. This is the publisher's claim, not our verdict: see GET /acts/{actId}/status. Values: `in_force`, `repealed`, `superseded`, `s…
actTitleFilter by words in the act's title. Each word must appear, so `Bharatiya Nyaya` narrows to the Sanhita.
categoryJurisdictional class. `repealed` and `spent` are accepted for backward compatibility and resolve against `actStatus` instead. Values: `central`, `state`, `regulatory`, `repealed`, `spent`.
departmentIssuing body. Deliberately NOT an enumerated list: this field holds 943 distinct values and mixes clean regulator slugs (`sebi`, `rbi`, `moefcc`) with free-text state department names (`Law Departmen…
excludeRepealedbooleanDrop provisions whose act the publisher records as repealed or spent. Off by default, because repealed law is still law that was in force and is routinely the thing being researched.
isSubordinateTrue for subordinate instruments only (rules, notifications, circulars, orders); false for principal acts only. Omit for both.
legalSubjectFilter by subject area, classified at ingest. Accepts one value or a list. Values: `administrative_law`, `banking_finance`, `civil_procedure`, `constitutional_law`, `corporate_law`, `criminal_law`, `…
matchTypestringHow query terms must appear in the provision text. `any` (the default) leaves hybrid ranking to do the work; `all` keeps only provisions containing EVERY query term; `phrase` keeps only those contain…
pageinteger1-based page number. `page * pageSize` may not exceed 100; narrow the query with filters to reach deeper matches.
pageSizeintegerResults per page (1-50).
provisionTypeFilter by what the provision DOES. Accepts one value or a list. Values: `mandatory`, `general`, `prohibitory`, `overriding`, `discretionary`, `declaratory`.
querystringyesSearch query.
sectionNumberFilter by exact section number. The publisher's own numbering, which is not an integer: `498A`, `376DA` and `2-A` all occur, and the alphabetic suffix is part of the number rather than a sub-provisio…
sectionTypeFilter by structural kind of the passage. Accepts one value or a list. Values: `amendment_provision`, `article`, `body`, `chapter_heading`, `definition_clause`, `definitions`, `part_heading`, `preamb…
stateJurisdiction slug. `central` is a value here, for Union legislation. Live counts per jurisdiction are on GET /acts/coverage.
yearFromEarliest year of enactment to include, inclusive. Matched against the publisher's own year field, which is occasionally corrupt, so there is no lower bound and a value below 1800 is a legitimate way…
yearToLatest year of enactment to include, inclusive.

Structured output declared, but exposes no named fields.

No examples provided.

Common questions

What is the Vaquill MCP server?

Vaquill is an MCP server listed in the public MCP registry as io.github.Vaquill-AI/vaquill-mcp. Search US and Indian statutes, regulations, constitutions, and court rules. This page covers its hosted endpoint (https://mcp.vaquill.ai/in/s/_).

Is the Vaquill MCP server safe to use?

Vaquill scores 74 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the Vaquill MCP server expose?

Vaquill exposes 22 tools: fetch, get_act_amendments, get_act_section, get_act_section_body, get_act_status, and 17 more. Their descriptions and schemas cost roughly 6,735 tokens of context every time the server is loaded.

Does the Vaquill MCP server require authentication?

No. We connected to Vaquill without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

Is the Vaquill MCP server still maintained?

Vaquill is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.