Hudson Corpus — MCP endpoint

The Iowa legal corpus,
inside your AI tools.

The corpus behind Hudson research, exposed as a production MCP endpoint at https://app.hudsonlegal.tech/mcp. Ten grounded, read-only tools — citation lookup, hybrid search, version history, brief auditing — for Claude Desktop, Claude Code, and any MCP-capable agent.

01 — Connect

One config block away.

Two ways in. Clients that speak OAuth 2.0 discover the endpoint, register themselves, and send you through a consent screen — no key to copy. Everything else sends a key you create in your account. Either way the whole corpus shows up in your assistant's tool list.

Claude Desktop — claude_desktop_config.jsonapp.hudsonlegal.tech/mcp
{
  "mcpServers": {
    "hudson-corpus": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://app.hudsonlegal.tech/mcp",
               "--header", "X-API-Key:${HUDSON_CORPUS_KEY}"],
      "env": { "HUDSON_CORPUS_KEY": "<your key>" }
    }
  }
}
Claude Code — one commandapp.hudsonlegal.tech/mcp
claude mcp add --transport http hudson-corpus \
  https://app.hudsonlegal.tech/mcp --header "X-API-Key: <your key>"

Every request carries either an OAuth Bearer token or an X-API-Key — stateless JSON over HTTPS, so it works the same from a laptop, a CI job, or an agent fleet.

02 — The tools

Ten tools. All read-only. All grounded.

Every response carries an official-source URL and an as-of-date stamp, so an agent can't accidentally cite stale text — the same discipline the human-facing product holds itself to.

lookup_citation

A precise citation — '714.16', '§ 714.16(2)(a)', 'Chapter 232' — returns the current text. Ambiguous cites return candidates, never a silent substitute.

search_statutes

Hybrid semantic search across the Code, court rules, and caselaw — full-text + fuzzy + vector, reranked. Case hits carry good-law treatment flags.

get_version_history

Every version of a section with effective dates and the session law that enacted each change.

get_section_at_date

The text of a section as it stood on a given date — for the facts as they were, not as they are.

get_cross_references

Every provision that cites a section, so a change's blast radius is one call away.

get_definitions

Defined terms in scope for a chapter or across the Code — the statutory meaning, not the dictionary's.

list_recent_amendments

Everything that changed since a date — the current-awareness sweep, as a tool call.

validate_citations

Every citation in a block of text, checked against the corpus and flagged valid, repealed, or unresolvable.

verify_quote

A quoted passage checked verbatim against the cited source — the anti-hallucination primitive.

audit_brief

The full pass over a brief: citations validated, quotes verified, currency checked — one call.

03 — Under the hood

Built so agents can't go wrong quietly.

Stamped, sourced responses

official_url, as_of_date, and effective dates on every response — the provenance travels with the data.

Treatment-aware caselaw

Case hits carry good-law flags — overruled and superseded decisions are marked before your agent relies on them.

Candidates, not guesses

When a citation doesn't resolve unambiguously, the tool returns the candidate list. A silent substitution is a bug class we refuse by design.

Stateless by design

Plain JSON over HTTPS, no sessions to manage — every call independently authenticated and safe to retry.

OAuth 2.0 or a key

A full OAuth 2.0 authorization server — dynamic client registration, PKCE, a consent screen, refresh and revocation — or a static key you create and revoke in your account.

Read-only surface

Every tool is a read-only query over the corpus. There is no write path — nothing an agent can break.

Point your agent at the corpus.

Create a key, paste the config, and your assistant is doing grounded Iowa research in minutes. Building something bigger on it? We should talk.