# ImmigrationLayer — Developer Docs (full reference) > Context7 fixed stale library docs for coding agents. ImmigrationLayer does the same for USCIS > form editions, fees, processing times, and the Visa Bulletin. One URL, six tools, every answer > cited. Not legal advice. ## Quick start ### Claude Code Adds the server as a remote MCP connector over Streamable HTTP. ``` claude mcp add --transport http immigration-layer https://mcp.immigrationlayer.com/mcp ``` ### Cursor Add to .cursor/mcp.json. ``` { "mcpServers": { "immigration-layer": { "url": "https://mcp.immigrationlayer.com/mcp" } } } ``` ### curl The MCP endpoint speaks JSON-RPC over HTTP, not a plain REST GET - there is no REST API yet (tracked in #50). This calls check_form_edition, which needs no Authorization header. Gated tools need "Authorization: Bearer $API_KEY", an API key from your account page. ``` curl https://mcp.immigrationlayer.com/mcp \ -H "content-type: application/json" \ -H "accept: application/json, text/event-stream" \ -d '{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "check_form_edition", "arguments": { "form": "I-765" } } }' ``` ## Tools Generated from the same zod schemas workers/mcp registers each tool with. ### `check_form_edition` Current USCIS-accepted edition of a form, its accepted-from and rejected-from dates, and the alert that announced it. Free, no sign-in required. Not legal advice. Source: the form's page on uscis.gov. | Argument | Type | Required | Description | | --- | --- | --- | --- | | `form` | `string` | Yes | USCIS form number, e.g. "I-765" | ``` check_form_edition({ form: "I-765" }) ``` ```json { "data": { "form": "I-765", "edition_date": "09/15/26", "accept_from": "2026-09-15", "reject_from": null }, "as_of": "2026-09-15T00:00:00Z", "source_url": "https://www.uscis.gov/i-765", "content_hash": "sha256:example", "not_legal_advice": true } ``` ### `list_form_changes` Form edition and alert changes published since a date. Free, no sign-in required. Not legal advice. Source: uscis.gov form pages and the USCIS newsroom alerts page. | Argument | Type | Required | Description | | --- | --- | --- | --- | | `since` | `string` | Yes | ISO 8601 date/time; returns changes after this timestamp | ``` list_form_changes({ since: "2026-08-01" }) ``` ```json { "data": { "form_editions": [ { "kind": "inserted", "changed_at": "2026-09-15T00:00:00Z", "form": "I-765", "edition_date": "09/15/26", "accept_from": "2026-09-15", "reject_from": null, "source_url": "https://www.uscis.gov/i-765", "content_hash": "sha256:example" } ], "alerts": [ { "id": "alert_123", "published_at": "2026-08-14T00:00:00Z", "title": "USCIS to publish new editions of Form I-539 and Form I-765", "url": "https://www.uscis.gov/newsroom/alerts/example", "summary": null, "forms_json": "[\"I-539\",\"I-765\"]", "content_hash": "sha256:example" } ] }, "as_of": "2026-09-15T00:00:00Z", "source_url": "https://www.uscis.gov/i-765", "content_hash": "sha256:example", "not_legal_advice": true } ``` ### `get_fee` (sign-in required) Filing fee and effective date for a USCIS form. Requires sign-in at https://immigrationlayer.com. Not legal advice. Source: the USCIS fee schedule (Form G-1055). | Argument | Type | Required | Description | | --- | --- | --- | --- | | `form` | `string` | Yes | USCIS form number, e.g. "I-765" | | `filing` | `paper \| online` | Yes | Filing method | | `category` | `string` | No | Eligibility category, when the fee depends on it | ``` get_fee({ form: "I-765", filing: "online" }) ``` Not implemented yet - always returns a sign-in prompt. ### `get_processing_time` (sign-in required) USCIS processing-time estimate for a form (a percentile-basis figure, e.g. "80% of cases completed within N months"; unit varies by category). Requires sign-in at https://immigrationlayer.com. Not legal advice. Source: the USCIS processing times tool (egov.uscis.gov). | Argument | Type | Required | Description | | --- | --- | --- | --- | | `form` | `string` | Yes | USCIS form number, e.g. "I-765" | | `category` | `string` | No | Eligibility category | | `office` | `string` | No | USCIS field office or service center | ``` get_processing_time({ form: "I-765" }) ``` Not implemented yet - always returns a sign-in prompt. ### `get_visa_bulletin` (sign-in required) Monthly Visa Bulletin final-action or dates-for-filing chart entry. Requires sign-in at https://immigrationlayer.com. Not legal advice. Source: the Department of State Visa Bulletin (travel.state.gov). | Argument | Type | Required | Description | | --- | --- | --- | --- | | `month` | `string` | Yes | e.g. "2026-10" | | `chart` | `final_action \| dates_for_filing` | Yes | Which chart to read | | `category` | `string` | Yes | Preference category, e.g. "F2A" | | `country` | `string` | Yes | Chargeability country | ``` get_visa_bulletin({ month: "2026-10", chart: "final_action", category: "F2A", country: "India" }) ``` Not implemented yet - always returns a sign-in prompt. ### `search_alerts` (sign-in required) Search USCIS and DOS alerts and notices by keyword. Requires sign-in at https://immigrationlayer.com. Not legal advice. Source: the USCIS newsroom alerts page (uscis.gov/newsroom/alerts). | Argument | Type | Required | Description | | --- | --- | --- | --- | | `query` | `string` | Yes | Keyword to search for | | `since` | `string` | No | ISO 8601 date/time; limits results to alerts published after it | ``` search_alerts({ query: "I-765" }) ``` Not implemented yet - always returns a sign-in prompt. ## Auth `check_form_edition` and `list_form_changes` need no sign-in. Every other tool needs a caller identity: MCP clients (Claude, ChatGPT, Cursor, Claude Code) use OAuth with dynamic client registration; scripts use an API key from https://immigrationlayer.com/account, sent as `Authorization: Bearer ` on the same `/mcp` JSON-RPC endpoint. There is no separate REST API yet (tracked in https://github.com/zentered-studios/immigration-mcp/issues/50). ## Rate limits 20 calls per minute per IP for the two sign-in-free tools and the `changes` resource. No monthly quota is enforced yet (Stripe-backed plans are tracked in https://github.com/zentered-studios/immigration-mcp/issues/13). ## Versioning The server negotiates the MCP protocol version at connect time. A tool's name and required arguments won't change without a new tool name; optional arguments may be added. ## Changelog https://immigrationlayer.com/changes.rss and https://immigrationlayer.com/changes.json ## Related - [Home](https://immigrationcontext.com/index.md) - [immigrationlayer.com](https://immigrationlayer.com/llms.txt): tools, connect instructions, pricing, FAQ - [visacontext.com](https://visacontext.com/llms.txt): Visa Bulletin