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. The variable indirection exists precisely so the key never lands in the repo.

Verify it works

A green connection proves nothing. The server completes the handshake and lists all 25 tools 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, are both consistent with a completely broken credential.
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

Ten slash commands, each written to state its own caveats rather than leave you to infer them.

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, this is a licence term rather than a suggestion.
Last modified on September 8, 2026