Skip to main content
The primary-law plugin packages the Vaquill MCP server together with ten research commands and a skill that teaches Claude how to use them. It installs into Claude Code from the Vaquill plugin marketplace. Source: github.com/Vaquill-AI/vaquill-plugin.
The plugin is Claude Code only. It does not run in Cowork, claude.ai, or Claude Desktop. For those, use the Claude Connector, which needs no environment variable and no local shell.

Install

1

Add the marketplace

2

Install the plugin

3

Set your API key where a new shell will see it

The plugin reads VAQUILL_API_KEY from the process environment. Create a key at app.vaquill.ai/settings under API Keys, then:
~/.zshrc is not enough. It is sourced only for interactive shells, and Claude Code’s child processes are not always interactive. ~/.zshenv is sourced for every zsh invocation. On bash, use ~/.bash_profile plus ~/.bashrc. A bare export typed into a terminal dies with that shell.Check it reaches a new shell, which is what actually matters:
Use the :+ form. ${VAR:-...} prints the key itself into your transcript.
4

Fully quit and relaunch Claude Code

Environment is inherited once, at process start. None of these pick up a new variable: /reload, MCP servers reconnecting, a new session in the same window, or reinstalling the plugin.Quit Claude Code itself (/exit or Ctrl+D) and run claude again from a shell that has the variable. pgrep -f claude must return a different pid than before.
5

Make one live call

Never write the key into .mcp.json, a committed .env, or any file under version control. Reading the key from an environment variable keeps it out of the repo.

Verify it works

A successful connection does not show the credential works.The server completes the MCP handshake and lists all of its tools with no credential at all. Authentication is enforced at the API call behind each tool, not at the protocol layer. A “Connected” status and a full tool list are therefore both consistent with a completely broken credential.That holds with no Authorization header at all, with an unexpanded ${VAQUILL_API_KEY} template, and with an invalid key. claude mcp list showing Connected, and a full tool list in /mcp, prove nothing about the key.
The only real smoke test is one live call, and the cheapest is free:
“Use Vaquill to list statutes coverage for California.”
list_statutes_coverage costs 0 credits. A 401 means the key never reached the server. A normal response means setup is done.

Commands

The plugin adds ten slash commands. Each one states its own caveats in its output.

The research skill

The plugin also ships a us-statute-research skill. Claude loads it when a question calls for primary law, and it carries the judgement that the tool descriptions cannot: how to scope a search, when a citation needs resolving before it can be read, and why an empty result is more often a malformed act_id than a gap in coverage.

Key caps and rotation

  • Active key caps are low. Business allows 5 keys; every other plan allows 2. The console’s own Playground mints a key when it cannot reuse one, so one integration key plus Playground use already reaches the cap of 2.
  • Rotation differs by plan. Business can create the new key before revoking the old one, so there is no gap. Other plans must revoke first and accept downtime.
A key provisioned by the Claude Connector does not count against this cap, and does not appear in your dashboard key list.

Troubleshooting

An empty result set is not an authentication problem. Since an outage returns 503 with a refund, an empty 200 is a real answer.

Attribution

On the Pro plan, attribution is required: a visible “Legal data by Vaquill AI” credit, linked to the site, wherever the data is surfaced. Business waives it. If you are building something customer-facing on Pro, treat it as a licence term.
Last modified on November 7, 2026