Vaquill
REMOTE · MCP.VAQUILL.AI · 2 COMPONENTS · SCANNED SEP 21
Search US and Indian statutes, regulations, constitutions, and court rules.
Available components
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
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- Authorisation not fully verified: no authorisation is required to call this server, and 21 tool(s) never declared a destructiveHint. The MCP spec treats an absent hint as destructive by default, so we cannot call this surface safe. See how to fix → View diagnostics → Unverified
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- HSTS check failed: the Strict-Transport-Security header is absent. See how to fix → View diagnostics → Fail
- DNSSEC is configured correctly; the domain's records validate against the full chain to the root. View diagnostics → Pass
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
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
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
claude mcp add --transport http vaquill-ai-vaquill-mcp 'https://mcp.vaquill.ai/in/s/_'
{
"mcpServers": {
"vaquill-ai-vaquill-mcp": {
"url": "https://mcp.vaquill.ai/in/s/_"
}
}
} {
"servers": {
"vaquill-ai-vaquill-mcp": {
"type": "http",
"url": "https://mcp.vaquill.ai/in/s/_"
}
}
} [mcp_servers.vaquill-ai-vaquill-mcp] url = "https://mcp.vaquill.ai/in/s/_"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"vaquill-ai-vaquill-mcp": {
"type": "remote",
"url": "https://mcp.vaquill.ai/in/s/_",
"enabled": true
}
}
} openclaw mcp add vaquill-ai-vaquill-mcp --url 'https://mcp.vaquill.ai/in/s/_' --transport streamable-http
mcp_servers:
vaquill-ai-vaquill-mcp:
url: "https://mcp.vaquill.ai/in/s/_" {
"McpServers": {
"vaquill-ai-vaquill-mcp": {
"Transport": "http",
"Url": "https://mcp.vaquill.ai/in/s/_"
}
}
} assistant mcp add vaquill-ai-vaquill-mcp -t streamable-http -u 'https://mcp.vaquill.ai/in/s/_'
{
"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.
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
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/_ |
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 →
fetch Fetch Indian Enactment ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
get_act_amendments Act Amendment History ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| act_id | string | yes | 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… |
| page | integer | – | 1-based page number. |
| pageSize | integer | – | Results per page (1-200). |
| section | – | – | Keep 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. |
| type | – | – | Amendment 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 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.
| Name | Type | Req | Description |
|---|---|---|---|
| act_id | string | yes | 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… |
| section_number | string | yes | Section 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 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.
| Name | Type | Req | Description |
|---|---|---|---|
| act_id | string | yes | 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… |
| section_number | string | yes | Section 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 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".
| Name | Type | Req | Description |
|---|---|---|---|
| act_id | string | yes | 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… |
Structured output declared, but exposes no named fields.
No examples provided.
get_act_structure 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`.
| Name | Type | Req | Description |
|---|---|---|---|
| act_id | string | yes | 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… |
Structured output declared, but exposes no named fields.
No examples provided.
get_act_text 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.
| Name | Type | Req | Description |
|---|---|---|---|
| act_id | string | yes | 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… |
Structured output declared, but exposes no named fields.
No examples provided.
get_corresponding_provisions IPC/CrPC to BNS/BNSS Mapping ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| act_code | string | yes | Either 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 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 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 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.
| Name | Type | Req | Description |
|---|---|---|---|
| region | – | – | 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 s… |
Structured output declared, but exposes no named fields.
No examples provided.
get_section_history 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`).
| Name | Type | Req | Description |
|---|---|---|---|
| act_id | string | yes | 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… |
| asOf | – | – | Split the recorded amendments around a date (YYYY-MM-DD). Returns a timeline, never reconstructed text. |
| limit | integer | – | Events per page. |
| offset | integer | – | Zero-based offset. |
| section_number | string | yes | Section 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 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.
| Name | Type | Req | Description |
|---|---|---|---|
| act_id | string | yes | 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… |
| limit | – | – | DEPRECATED alias for `pageSize`, kept working for clients written against the original shape. Send one or the other, not both. |
| page | integer | – | 1-based page number. |
| pageSize | – | – | Rows per page (1-100). Defaults to 25. |
Structured output declared, but exposes no named fields.
No examples provided.
india_act_definitions 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.
| Name | Type | Req | Description |
|---|---|---|---|
| act_id | string | yes | 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… |
| limit | – | – | DEPRECATED alias for `pageSize`, kept working for clients written against the original shape. Send one or the other, not both. |
| page | integer | – | 1-based page number. |
| pageSize | – | – | Rows per page (1-100). Defaults to 25. |
Structured output declared, but exposes no named fields.
No examples provided.
india_act_subordinate 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.
| Name | Type | Req | Description |
|---|---|---|---|
| act_id | string | yes | 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… |
| limit | – | – | DEPRECATED alias for `pageSize`, kept working for clients written against the original shape. Send one or the other, not both. |
| page | integer | – | 1-based page number. |
| pageSize | – | – | Rows per page (1-100). Defaults to 25. |
Structured output declared, but exposes no named fields.
No examples provided.
india_section_references 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.
| Name | Type | Req | Description |
|---|---|---|---|
| act_id | string | yes | 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… |
| section_number | string | yes | Section 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 Act Filter Values ~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 Browse Indian 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.
| Name | Type | Req | Description |
|---|---|---|---|
| category | – | – | Jurisdictional 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… |
| department | – | – | Issuing 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… |
| page | integer | – | 1-based page number. |
| pageSize | integer | – | Results per page (1-100). |
| search | – | – | Keep 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. |
| sort | string | – | Sort 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`. |
| state | – | – | Jurisdiction slug. `central` is a value here, for Union legislation. Live counts per jurisdiction are on GET /acts/coverage. |
| status | – | – | The publisher's lifecycle status for the act. Their claim, not our verdict: see GET /acts/{actId}/status. Values: `in_force`, `repealed`, `superseded`, `spent`. |
| yearFrom | – | – | Earliest 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… |
| yearTo | – | – | Latest year of enactment to include, inclusive. |
Structured output declared, but exposes no named fields.
No examples provided.
resolve_india_citation 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.
| Name | Type | Req | Description |
|---|---|---|---|
| asAtDate | – | – | The 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… |
| cite | string | yes | One citation string. |
| state | – | – | Narrow 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 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.
| Name | Type | Req | Description |
|---|---|---|---|
| asAtDate | – | – | The 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… |
| citations | array | yes | Citation strings, as a lawyer would type them. |
| state | – | – | Narrow to one jurisdiction. Required for a State-universal title. |
Structured output declared, but exposes no named fields.
No examples provided.
search Search Indian Legislation ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| query | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
search_acts Search Indian 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.
| Name | Type | Req | Description |
|---|---|---|---|
| actStatus | – | – | Filter 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… |
| actTitle | – | – | Filter by words in the act's title. Each word must appear, so `Bharatiya Nyaya` narrows to the Sanhita. |
| category | – | – | Jurisdictional class. `repealed` and `spent` are accepted for backward compatibility and resolve against `actStatus` instead. Values: `central`, `state`, `regulatory`, `repealed`, `spent`. |
| department | – | – | Issuing 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… |
| excludeRepealed | boolean | – | Drop 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. |
| isSubordinate | – | – | True for subordinate instruments only (rules, notifications, circulars, orders); false for principal acts only. Omit for both. |
| legalSubject | – | – | Filter 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`, `… |
| matchType | string | – | How 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… |
| page | integer | – | 1-based page number. `page * pageSize` may not exceed 100; narrow the query with filters to reach deeper matches. |
| pageSize | integer | – | Results per page (1-50). |
| provisionType | – | – | Filter by what the provision DOES. Accepts one value or a list. Values: `mandatory`, `general`, `prohibitory`, `overriding`, `discretionary`, `declaratory`. |
| query | string | yes | Search query. |
| sectionNumber | – | – | Filter 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… |
| sectionType | – | – | Filter 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… |
| state | – | – | Jurisdiction slug. `central` is a value here, for Union legislation. Live counts per jurisdiction are on GET /acts/coverage. |
| yearFrom | – | – | Earliest 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… |
| yearTo | – | – | Latest year of enactment to include, inclusive. |
Structured output declared, but exposes no named fields.
No examples provided.
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.