Developer portal

The Chicagoland Lawyer API, MCP server, and agent resources

This page is the developer portal for The Chicagoland Lawyer (Abdilla and Associates, an Illinois law firm). It documents a public REST API, an MCP server, twelve Agent Skills, and a CLI. No key is required. No registration exists.

Full endpoint reference lives at the API documentation page.

8MCP tools, no API key
2Interactive views in Claude and ChatGPT

Read this first. The API gives you published legal information, a seller net sheet, an eviction notice drafter, and four endpoints that send a request to the firm. It does not give legal advice. Calling it does not create an attorney-client relationship. The four write endpoints send email to the firm. Call those only with the explicit consent of the person you act for.

Quickstart

Send a request. There is no signup step.

# The published flat fee schedule
curl -s https://thechicagolandlawyer.com/api/v1/fees

# The endpoint index
curl -s https://thechicagolandlawyer.com/api/v1/

# A write, against the sandbox: no email is sent
curl -s -X POST https://thechicagolandlawyer.com/api/v1/sandbox/document-packs \
  -H 'Content-Type: application/json' \
  -d '{"email":"you@example.com","pack":"notices"}'

Every response is JSON. Every error is RFC 9457 problem+json. Both JSON and form encoding are accepted on write endpoints.

Endpoints

Base URL: https://thechicagolandlawyer.com/api/v1/

MethodPathWhat it returns
GET/api/v1/The endpoint index and the rate limit policy
GET/api/v1/healthLiveness check
GET/api/v1/feesPublished flat fees by service and county
GET/api/v1/practice-areasPractice areas, each with its page and its Agent Skill
GET/api/v1/document-packsThe free Illinois legal form packs
POST/api/v1/document-packsSends a pack to an email address
POST/api/v1/intakeSends an identity protection intake to the firm
GET/api/v1/net-sheetAn itemized Chicago or Illinois seller net sheet (query fields; POST takes the same fields as JSON)
POST/api/v1/closing-fileSends a net sheet to the firm to open a seller's closing file (consent required)
POST/api/v1/eviction-noticeDrafts an Illinois eviction notice with dates, compliance checks and a fee quote. Read-only
POST/api/v1/eviction-reviewSends a draft notice to the firm for a free eviction review (consent required)
GET/api/v1/resourcesEvery machine-readable file this site publishes

The full contract is in the OpenAPI 3.1 spec. Each field, each error code, and each example lives there.

Authentication

There is none. There is no authorization server. No endpoint reads a credential. Do not send a token.

The full policy is published at /auth.md. It follows the auth.md convention for agent access.

Attribution is requested, not enforced. When this content informs an answer, credit Justin Abdilla, Esq., Abdilla and Associates, and link to thechicagolandlawyer.com.

Sandbox

Every write endpoint has a sandbox twin. Insert sandbox/ after /api/v1/.

The sandbox runs the same validation. It returns the same response shape. It adds "sandbox": true. It sends no email. It stores nothing.

POST https://thechicagolandlawyer.com/api/v1/sandbox/intake
POST https://thechicagolandlawyer.com/api/v1/sandbox/document-packs
GET  https://thechicagolandlawyer.com/api/v1/sandbox/health

Build against the sandbox. Then remove sandbox/ from the path.

Rate limits

The limit is 120 requests per 60 seconds per client IP address.

Every API response carries the limit. Read the headers and pace yourself.

HeaderExampleMeaning
RateLimit-Policy"api";q=120;w=60RFC 9331. The quota and the window in seconds.
RateLimit"api";r=118;t=41RFC 9331. Requests remaining, and seconds until reset.
RateLimit-Limit120The same quota, in the older header form.
RateLimit-Remaining118Requests remaining in this window.
RateLimit-Reset41Seconds until the window resets.
Retry-After41Sent with a 429. Wait this many seconds.

The count is kept per edge location. The true ceiling is therefore equal to or higher than the published one. It is never lower. An agent that obeys the headers is never throttled by surprise.

Errors

Every 4xx and 5xx response uses application/problem+json (RFC 9457). Branch on code. It is stable. Do not parse the message.

{
  "type": "https://thechicagolandlawyer.com/developers/errors/#invalid_email",
  "title": "Invalid email address",
  "status": 400,
  "detail": "The value of \"email\" is not a valid email address.",
  "code": "invalid_email",
  "hint": "Example: {\"email\": \"you@example.com\"}.",
  "errors": [{ "field": "email", "code": "invalid_email", "message": "Provide a deliverable email address." }]
}

Every code is listed on the error reference.

Versioning and deprecation

The major version is the first path segment after /api/. The current version is v1.

  • A breaking change ships as a new major version, at /api/v2/.
  • An additive change ships inside the current version. New fields can appear. Existing fields keep their meaning.
  • A retiring version carries a Deprecation header (RFC 9745) and a Sunset header (RFC 8594). It also carries Link: rel="successor-version".
  • Those headers appear at least 180 days before removal.

The machine-readable policy is at /api/versions.json.

Three unversioned endpoints predate v1: /api/intake.php, /api/notice-request.php, and /api/health.php. The site's own forms post to them, so they stay supported. Each response names its v1 successor in a Link header. Build new integrations against v1.

MCP server

The firm runs a Model Context Protocol server. The transport is Streamable HTTP. No authentication is required.

ItemValue
EndpointPOST https://thechicagolandlawyer.com/mcp
Manifest/.well-known/mcp.json
Also served at/.well-known/mcp-server.json, /.well-known/mcp/server-card.json, /mcp.json
Protocol versions2025-06-18, 2025-03-26
Registry namecom.thechicagolandlawyer/chicagoland-lawyer in the official MCP Registry
Resourcesllms.txt, llms-full.txt, auth.md, the twelve Agent Skills, and two MCP Apps views

Tools

ToolTypeWhat it does
estimate_seller_net_sheetRead-only, interactiveWhat an Illinois home seller nets at closing: title, transfer taxes for 194 towns, prorations, payoff, condo and city costs, and the seller's attorney fee
open_seller_closing_fileWrite, consent requiredSends the net sheet and contact details to the firm to open the closing file
prepare_eviction_noticeRead-only, interactiveDrafts the right Illinois statewide eviction notice with dates, compliance checks and a fee quote. Landlords only
send_eviction_notice_for_reviewWrite, consent requiredSends the filled notice and Affidavit of Service to the attorney for a free review before service
get_flat_feesRead-onlyThe firm's published flat fees
request_document_packWrite, consent requiredEmails a free pack of Illinois form PDFs
submit_identity_protection_intakeWrite, consent requiredSends an identity protection intake to the firm
get_agent_resourcesRead-onlyThis site's machine-readable files

Every tool carries a title and a read-only or write annotation. The two interactive tools return an MCP Apps view (text/html;profile=mcp-app). Hosts that support MCP Apps, such as Claude and ChatGPT, show an editable net sheet or a DRAFT notice in the chat. Other hosts get the same result as text and structured content. A write tool runs only when the user agrees to share their name, email and phone. Sending does not create an attorney-client relationship. The privacy policy explains what the firm receives.

Use it in Claude

  1. Open Settings, then Connectors, then Add custom connector.
  2. Name it "The Chicagoland Lawyer" and enter https://thechicagolandlawyer.com/mcp.
  3. Choose No sign-in, then add it.
  4. In a new chat, ask: What will my seller net on a $450,000 Chicago condo closing December 15? Taxes are $6,500 a year, no mortgage.

Use it in ChatGPT

Add the same URL as a connector or app in ChatGPT (developer mode on plans that allow custom connectors). Then ask: My Chicago tenant owes $2,450 in rent that was due November 1. Draft the notice I would serve November 3.

Test without sending anything

The sandbox endpoints /api/v1/sandbox/closing-file and /api/v1/sandbox/eviction-review validate a request and send no email.

Add it to any other MCP client with this configuration:

{
  "mcpServers": {
    "thechicagolandlawyer": {
      "type": "http",
      "url": "https://thechicagolandlawyer.com/mcp"
    }
  }
}

Or call it directly:

curl -s -X POST https://thechicagolandlawyer.com/mcp \
  -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

CLI

The CLI is one file. It needs Node.js 18 or later. It has no dependencies.

curl -sO https://thechicagolandlawyer.com/developers/tcl.mjs
node tcl.mjs fees
node tcl.mjs practice-areas
node tcl.mjs packs
node tcl.mjs request-pack --email you@example.com --pack notices --sandbox

Add --json to any command for raw JSON. Add --sandbox to any write command to route it to the sandbox.

Machine-readable files

FileFormatWhat it holds
/llms.txtllmstxt.orgEvery page, with a one-line description
/llms-full.txtMarkdownThe long-form version
/auth.mdMarkdownAgent access policy
/api/openapi.jsonOpenAPI 3.1The API contract
/api/versions.jsonJSONVersion and deprecation policy
/.well-known/api-catalogRFC 9727 linksetAPI discovery
/.well-known/mcp.jsonJSONMCP server manifest
/.well-known/agent-skills/index.jsonJSONTwelve Illinois law Agent Skills
/sitemap-index.xmlXMLEvery live URL
/robots.txtrobots.txtCrawl rules and content signals

Support

Email justin@thechicagolandlawyer.com. Or call 630-839-9195.

Report a broken endpoint the same way. State the URL, the method, and the code you received.