MCP Server Documentation
Use ARS-25 directly inside Claude, Cursor, or any MCP-compatible AI assistant
What is MCP?
Model Context Protocol (MCP) is an open standard that lets AI assistants use external tools — like how your browser uses extensions. Instead of copy-pasting statute text into a chat window, MCP lets Claude search and read Arizona family law statutes directly.
AI Assistant
Claude, Cursor, or any MCP client
MCP Protocol
ARS-25 Data
Statutes, search, and analysis
Installation
Install prerequisites
You need Python 3.12+ and uv (a fast Python package manager).
macOS / Linux
curl -LsSf https://astral.sh/uv/install.sh | shWindows (PowerShell)
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"Clone the repository
git clone https://github.com/mfbaig35r/ars-25-mcp.gitInstall dependencies
cd ars-25-mcp && uv syncConnect to Claude Desktop
Open your Claude Desktop config file and add the ARS-25 server:
macOS — ~/Library/Application Support/Claude/claude_desktop_config.json
Windows — %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"ars-25": {
"command": "uv",
"args": [
"--directory", "/FULL/PATH/TO/ars-25-mcp",
"run", "python", "-m", "ars25_mcp"
]
}
}
}Replace /FULL/PATH/TO/ars-25-mcp with the actual path where you cloned the repository.
First run — build the database
Restart Claude Desktop, then ask Claude:
“Run ingest_statutes to build the statute database”
This is a one-time setup that takes about 3–5 minutes. It scrapes statutes from the Arizona Legislature website and builds a local search index.
Verify everything works
Once ingestion finishes, try asking Claude:
“What does section 25-403 say about custody factors?”
If you get back the statute text, you're all set!
Available Tools
The MCP server provides 6 tools that Claude can use. You don't need to call these directly — just ask Claude your question in plain English and it will pick the right tool automatically.
search_statutes
Semantic search across all Arizona family law statutes. Uses hybrid vector + full-text search to find relevant sections.
| Parameter | Type | Default | Description |
|---|---|---|---|
| query | string | required | Natural language search query |
| top_k | number | 10 | Number of results to return |
Example prompt
“What are the factors for child custody in Arizona?”
get_statute
Retrieve the full text of a specific statute section by its section number.
| Parameter | Type | Default | Description |
|---|---|---|---|
| section_number | string | required | Section number (e.g., "25-403") |
Example prompt
“Show me the full text of section 25-403”
list_statutes
List all statute sections within a specific chapter, with titles and section numbers.
| Parameter | Type | Default | Description |
|---|---|---|---|
| chapter | number | required | Chapter number (1-8) |
Example prompt
“List all statutes in chapter 4”
get_chapter_tree
Get the hierarchical structure of Title 25, showing chapters, articles, and section titles.
Example prompt
“Show me the full structure of Title 25”
ingest_statutes
One-time setup: scrapes statutes from the Arizona Legislature website, chunks them, generates embeddings, and builds the search database. Takes 3-5 minutes.
Example prompt
“Build the statute database”
get_ingestion_status
Check whether the statute database has been built and is ready for search.
Example prompt
“Is the statute database ready?”
How It Works
1. Scrape
Pull statute text from azleg.gov
2. Chunk
Split into searchable sections
3. Embed
Generate vector embeddings (all-MiniLM-L6-v2)
4. Search
Hybrid vector + full-text search via LanceDB
Everything runs on your machine — no API keys, no cloud services, no data ever leaves your computer.