ImmigrationLayer
Server Details
USCIS fees, processing times, form editions, alerts, and the Visa Bulletin. Not legal advice.
- Status
- Healthy
- Uptime
- 99.9% over 20 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 8 tools
Each tool targets a clearly distinct resource or query mode: form editions, fees, processing times, visa bulletin charts, DV cutoffs, bulletin notes, form changes, and keyword alerts. The descriptions explicitly route ambiguous-sounding cases, such as check_form_edition versus list_form_changes, and list_form_changes versus search_alerts.
All tools use consistent snake_case verb_noun naming with semantically appropriate verbs such as check, get, list, and search. The visa bulletin variants are named predictably with clear suffixes (_dv, _notes).
Eight tools is well-scoped for a published immigration reference-data server. Each tool covers a distinct data lookup area, and there is no obvious filler or redundancy.
The surface covers core published reference data: form editions, fees, processing times, visa bulletin charts, DV cutoffs, bulletin notes, edition changes, and alerts. Minor gaps remain, such as general form metadata or a complete visa bulletin table lookup, but agents can work around most needs.
Available Tools
8 toolscheck_form_editionCheck form editionARead-onlyInspect
Returns the edition of one USCIS form that USCIS accepts today, with its accept-from and reject-from dates. Use it to check which edition of a form USCIS accepts, with the date of that answer. If USCIS has announced a newer edition it does not accept yet, announced_edition gives that edition and its accept-from date. For edition changes across all forms since a date, use list_form_changes. Covers I-90, I-129, I-130, I-131, I-140, I-485, I-539, I-765, and N-400; any other form returns not_found. Free, no sign-in required. Limit: 20 calls per minute per IP, then rate_limited. Not legal advice. Source: the form's page on uscis.gov, or a dated web.archive.org capture of that page.
| Name | Required | Description | Default |
|---|---|---|---|
| form | Yes | USCIS form number exactly as USCIS writes it, uppercase with the hyphen, e.g. "I-765". "i765" and "I765" do not match |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| as_of | Yes | |
| source_url | Yes | |
| content_hash | Yes | |
| not_legal_advice | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish a safe read-only, closed-world operation, and the description adds substantial context beyond them: no sign-in, a 20-calls-per-minute-per-IP limit with a rate_limited response, the not_found path for unsupported forms, the announced_edition field for a future edition not yet accepted, and source attribution to uscis.gov or a dated web.archive.org capture. That is exactly the behavioral texture annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the return value, then usage, sibling routing, coverage, access terms, limits, and provenance. Every sentence carries operational information, though the tail end ("Not legal advice" plus source attribution) adds length after the key facts are already delivered.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value structure needn't be explained, and the description covers the remaining risks: valid versus invalid inputs, the announced_edition edge case, rate limiting, and source provenance. Nothing an agent needs in order to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already specifies the exact uppercase hyphenated format with a counterexample. The description still adds value by enumerating which form identifiers are actually valid, converting the string parameter into an implicit enum and telling the agent what happens outside it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource up front: returns the currently accepted edition of one USCIS form plus its accept-from and reject-from dates. It also distinguishes the sibling list_form_changes by scope (single form vs. all forms since a date), so an agent can route correctly without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use it ("check which edition of a form USCIS accepts, with the date of that answer") and names the alternative with its triggering condition ("For edition changes across all forms since a date, use list_form_changes"). It further bounds applicability by listing the nine supported forms and stating any other form returns not_found.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_feeGet filing feeARead-onlyInspect
Returns a published government fee and its effective date. For US (the default), the general filing fee for a USCIS form and filing method. I-129, I-131, and I-907 have no general filing fee: pass category. For I-131, the label this tool uses: a short name of the Appendix B heading, a colon, and the item selector, such as "Reentry Permit: Part 1., Item Number 1." For I-129 and I-907, the category argument says how to name the classification. US covers I-90, I-130, I-140, I-485, I-539, I-765, and N-400, paper and online, and I-129, I-131, and I-907 by category; only some G-1055 categories are covered, and an uncovered one returns no fee. An I-129 amount is the filing fee G-1055 lists for that row. Fees G-1055 lists apart from it are not in the amount. An I-907 amount is the premium processing fee only, not the fee for the form it accompanies. Any other form returns not_found. For GB, the fee for a published Home Office fee category; pass the section heading as category when the name appears in more than one section. For AU, a visa application charge component that Migration Regulations 1994, Schedule 1 states for a visa subclass, from the item's table for any other applicant or its only charge table. Pass the subclass as form, such as "189", and the component as category, such as "Base application charge"; category is required when the subclass has more than one component. 500 and 590 are subclasses whose charge Schedule 1 states in item 1222. Other amounts apply to some applicants; notes names the item and compilation. amount_cents is in the minor unit of currency. filing is "unspecified" when the source states no filing channel. It does not say which fee applies to a case. For a USCIS form's current edition, use check_form_edition. Requires sign-in at https://immigrationlayer.com/login and an active plan. Without a plan it returns subscription_required. Limit: 30 calls per minute per account, shared by all paid tools, then rate_limited. Not legal advice. Sources: for US, the USCIS fee schedule (Form G-1055), the 2024 USCIS fee rule (89 FR 6194), and, for I-907, the 2026 premium processing fee rule (91 FR 1059); for GB, the Home Office visa regulations revised table on gov.uk, used under the Open Government Licence v3.0; for AU, Migration Regulations 1994, Schedule 1. Australian charges are based on content from the Federal Register of Legislation, CC BY 4.0.
| Name | Required | Description | Default |
|---|---|---|---|
| form | Yes | For US, the USCIS form number exactly as USCIS writes it, e.g. "I-765"; "i765" and "I765" do not match. For GB, the published Home Office fee category name. For AU, the three-digit visa subclass, such as "500". | |
| filing | No | How the form is filed: "paper" (mailed) or "online" (USCIS online account). Required for US. Ignored for GB and AU. | |
| country | No | ISO 3166-1 alpha-2 country code. "US" (default), "GB", or "AU". | |
| category | No | For US I-131, a short name of the Appendix B heading, a colon, and the item selector, such as "Reentry Permit: Part 1., Item Number 1." For US I-129, the classification label exactly as G-1055 Appendix A prints it, such as "If you are filing H-1B or H-1B1 petitions."; for a small employer row, that label, a space, and "If you are filing as a Small Employer or Nonprofit." For US I-907, the classification label exactly as G-1055 prints it, such as "H-2B or R nonimmigrant classification". Required for I-129, I-131, and I-907. For GB, the published section heading. Required when the fee category name appears in more than one section. For AU, the charge component exactly as the item states it, such as "Base application charge"; required when the subclass has more than one. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| as_of | Yes | |
| source_url | Yes | |
| content_hash | Yes | |
| not_legal_advice | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavior beyond the read-only annotations: sign-in and active-plan requirements, subscription_required and rate_limited errors, 30-calls-per-minute limit, not_found/no-fee outcomes, amount semantics, and filing-channel unspecified behavior. These details are directly useful to an agent invoking the tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded, but the description is very long and dense, with repeated parameter guidance and extensive source citations. It is complete yet not concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the multi-country fee lookup complexity, the description covers coverage limits, required category conditions, error behavior, authentication, rate limits, and source context. An output schema exists, so return-value details need not be fully elaborated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already carries the parameter semantics. The description largely repeats the form, filing, country, and category rules rather than adding much beyond the structured fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: returns a published government fee and effective date, with clear US/GB/AU coverage. It distinguishes itself from check_form_edition by directing current-edition lookups there.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit usage context by country, notes that it does not determine which fee applies to a case, and names check_form_edition as the alternative for current editions. It also explains fallback behavior for uncovered categories and unsupported forms.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_processing_timeGet processing timeARead-onlyInspect
Returns a published processing time for one form or visa route, category, and office. For US (the default), the USCIS processing-time estimate: the time within which 80% of cases were completed, in months, weeks, or days. Use it when the user asks for USCIS's published processing time for a form. It reports past completions, not how long a given case will take. Pass form, category, and office exactly as the USCIS processing times tool lists them. Every US estimate on file has both a category and an office, so omitting either returns not_found. For GB, UK Visas and Immigration's published processing time for a visa route, as the page words it. Pass the route as form, such as "Skilled Worker", and office "inside the UK" or "outside the UK". Pass the page's section heading as category when the route appears in more than one section. A time the page marks with "*" carries the page's footnote in category_notes. It does not say how long a given application will take. For AU, the "90% processed in" figure the Department of Home Affairs global visa processing times page publishes for a visa subclass and stream, as the page words it. The page bases it on recently decided applications. Pass the three-digit subclass as form, such as "500", and the stream as the page lists it as category; category is required when the subclass has more than one stream. Omit office. category_notes carries the page's caveat and any note the page gives for that subclass and stream. It does not say how long a given application will take. For Visa Bulletin waits, use get_visa_bulletin. Requires sign-in at https://immigrationlayer.com/login and an active plan. Without a plan it returns subscription_required. Limit: 30 calls per minute per account, shared by all paid tools, then rate_limited. Not legal advice. Source: for US, the USCIS processing times tool (egov.uscis.gov); for GB, the UK Visas and Immigration visa processing times pages on gov.uk for applications inside and outside the UK; for AU, the Department of Home Affairs global visa processing times page (immi.homeaffairs.gov.au). UK processing-time data contains public sector information licensed under the Open Government Licence v3.0. Australian processing-time data: Australian Government Department of Home Affairs, licensed under CC BY 3.0 AU (https://creativecommons.org/licenses/by/3.0/au/). ImmigrationLayer extracted and reformatted it.
| Name | Required | Description | Default |
|---|---|---|---|
| form | Yes | For US, the USCIS form number exactly as USCIS writes it, e.g. "I-765"; "i765" and "I765" do not match. For GB, the visa route exactly as the UKVI page lists it, e.g. "Skilled Worker". For AU, the three-digit visa subclass, such as "500". | |
| office | No | For US, the USCIS office exactly as the processing times tool lists it, e.g. "Service Center Operations (SCOPS)", "National Benefits Center", or a field office such as "Houston TX". For GB, "inside the UK" or "outside the UK". Required for GB. Omit for AU. | |
| country | No | ISO 3166-1 alpha-2 country code. "US" (default), "GB", or "AU". | |
| category | No | For US, the eligibility category exactly as the USCIS processing times tool lists it, e.g. "Based on an approved asylum application [(a)(5)]" for I-765. For GB, the page's section heading, such as "Popular work visas"; required when the route appears in more than one section. For AU, the visa stream exactly as the page lists it, such as "Higher Education Sector"; required when the subclass has more than one stream. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| as_of | Yes | |
| source_url | Yes | |
| content_hash | Yes | |
| not_legal_advice | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well past the readOnly/openWorld annotations: discloses auth requirements (sign-in plus active plan), the exact failure codes (not_found, subscription_required, rate_limited), a concrete rate limit (30 calls/min shared across all paid tools), and that omitting category or office for US yields not_found. It also names source provenance and licensing, which matters for how the numbers should be cited.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded and the country-by-country structure is scannable, but the text is long and repeats 'It does not say how long a given application will take' three times. The trailing licensing paragraphs are necessary for attribution yet consume a large share of an already bloated description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists, so return values need not be explained. For a multi-country, multi-source lookup with auth gating and rate limits, the description covers everything an agent needs to call it correctly and interpret failures.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the per-country meaning of form/office/category is already fully documented — most of the description's parameter text duplicates it. It does add two things the schema does not: the not_found consequence of omitting category or office for US, and the fact that footnote data surfaces as category_notes. Useful but marginal over an already-complete schema, so baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Returns a published processing time for one form or visa route, category, and office') and immediately breaks it down per-country source (USCIS, UKVI, Home Affairs). It explicitly routes to a sibling ('For Visa Bulletin waits, use get_visa_bulletin'), so an agent can separate this from get_visa_bulletin and get_fee without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger ('Use it when the user asks for USCIS's published processing time for a form'), an explicit exclusion ('It reports past completions, not how long a given case will take'), a named alternative for the adjacent need, and per-country conditions that determine what to pass. Nothing about when-to-call is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_visa_bulletinGet Visa Bulletin chart entryARead-onlyInspect
Returns one family- or employment-based cutoff from a month's State Department Visa Bulletin: the Final Action Date or Date for Filing for a preference category and chargeability country. Use it when the user asks whether a priority date is current. date_or_status is a YYYY-MM-DD cutoff, "C" (current), or "U" (unavailable). For Diversity Visa lottery cutoffs, use get_visa_bulletin_dv. For the bulletin's advisory notes on future movement, use get_visa_bulletin_notes. A month or combination not on file returns not_found. Requires sign-in at https://immigrationlayer.com/login and an active plan. Without a plan it returns subscription_required. Limit: 30 calls per minute per account, shared by all paid tools, then rate_limited. Not legal advice. Source: the Department of State Visa Bulletin (travel.state.gov).
| Name | Required | Description | Default |
|---|---|---|---|
| chart | Yes | "final_action" for the Final Action Dates chart, "dates_for_filing" for the Dates for Filing chart | |
| month | Yes | Bulletin month as YYYY-MM, e.g. "2026-10". A month not yet published or loaded returns not_found | |
| country | Yes | Chargeability country, exact: "China" (mainland-born), "India", "Mexico", "Philippines", or "All Chargeability Areas", the bulletin column for countries without their own column | |
| category | Yes | Preference category code, exact: F1, F2A, F2B, F3, F4, EB-1, EB-2, EB-3, EB-3-OW (other workers), EB-4, EB-4-R (religious workers), EB-5 (unreserved), EB-5-RURAL, EB-5-HUA (high unemployment), or EB-5-INFRA |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| as_of | Yes | |
| source_url | Yes | |
| content_hash | Yes | |
| not_legal_advice | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/openWorld=false/destructive=false, and the description adds substantial context beyond them: sign-in requirement, plan gating, the subscription_required and not_found and rate_limited error paths, a 30/min shared rate limit, and the data source. This is exactly the behavioral detail an agent needs before calling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and trigger, then alternatives, then error/auth/rate-limit facts. Dense but every sentence carries operational value; only the trailing 'Not legal advice' and source line are marginally expendable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-required-param lookup with an output schema, the description covers the trigger, the sibling alternatives, the value encoding of the returned cutoff, and all failure modes (not_found, subscription_required, rate_limited). Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and each parameter already carries an enum or exact-value description, so the schema does the heavy lifting. The description's extra detail (the 'C'/'U'/'YYYY-MM-DD' cutoff values) describes the returned field rather than the inputs, so it adds little to parameter semantics beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Returns one family- or employment-based cutoff from a month's State Department Visa Bulletin') and names the exact dimensions (chart type, category, country). It explicitly distinguishes itself from get_visa_bulletin_dv and get_visa_bulletin_notes, so an agent can route correctly without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger ('Use it when the user asks whether a priority date is current') and names two alternatives with the conditions that select them (DV lottery cutoffs, advisory notes). Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_visa_bulletin_dvGet Diversity Visa lottery cutoffARead-onlyInspect
Returns the Diversity Visa (DV lottery) rank cutoff for one region in a month's Visa Bulletin, or a country exception the bulletin lists within that region. Use it when a DV selectee asks whether their case number is current. For family and employment chart dates, use get_visa_bulletin. For the bulletin's advisory notes, use get_visa_bulletin_notes. A month or region not on file returns not_found. Free, no sign-in required. Limit: 20 calls per minute per IP, then rate_limited. Not legal advice. Source: the Department of State Visa Bulletin (travel.state.gov).
| Name | Required | Description | Default |
|---|---|---|---|
| month | Yes | Bulletin month as YYYY-MM, e.g. "2026-10". A month not yet published or loaded returns not_found | |
| region | Yes | DV region, exact: "Africa", "Asia", "Europe", "North America", "Oceania", or "South America and the Caribbean" | |
| country | No | Chargeability country within the region; falls back to the region's "All" rate when the country has no listed exception, or when omitted |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| as_of | Yes | |
| source_url | Yes | |
| content_hash | Yes | |
| not_legal_advice | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing error semantics (a month or region not on file returns not_found), auth and cost ('free, no sign-in required'), and a concrete rate limit ('20 calls per minute per IP, then rate_limited'), plus the data source and a legal disclaimer. The annotations already carry the read-only/closed-world profile, so this is a genuinely additive disclosure; the only missing piece is whether the cutoff is a rank number versus a date field, which the output schema presumably covers.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five short sentences, front-loaded with the core behavior, then the routing to siblings, then failure mode, then operational facts. Every sentence carries distinct information; none repeats the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need no explanation, and the description still covers failure modes, rate limits, cost, and data provenance. The only gap is that it does not say whether a missing country exception falls back silently or is flagged, though the schema hints at the fallback.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so month format, the exact region list, and the country fallback behavior are already documented in the schema. The description's phrase about a 'country exception the bulletin lists within that region' reinforces the country parameter's semantics but adds little beyond what the schema states. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: returns the Diversity Visa rank cutoff for one region in a given month's bulletin, plus any country exception listed within that region. This is clearly separable from get_visa_bulletin (family/employment chart dates) and get_visa_bulletin_notes (advisory notes) without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives the triggering scenario explicitly ('use it when a DV selectee asks whether their case number is current') and names both alternatives with the conditions that select them. Nothing is left to inference about when this is the wrong tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_visa_bulletin_notesGet Visa Bulletin advisory notesARead-onlyInspect
Returns every lettered advisory note in a month's Visa Bulletin: the forward-looking text, e.g. "EB-1 India may become unavailable". Use it when the user asks whether dates are expected to advance, hold, or retrogress. For the chart dates themselves, use get_visa_bulletin or get_visa_bulletin_dv. An empty list means the month was loaded and had no notes; a month not on file returns not_found. Free, no sign-in required. Limit: 20 calls per minute per IP, then rate_limited. Not legal advice. Source: the Department of State Visa Bulletin (travel.state.gov).
| Name | Required | Description | Default |
|---|---|---|---|
| month | Yes | Bulletin month as YYYY-MM, e.g. "2026-10". A month not yet published or loaded returns not_found |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| as_of | Yes | |
| source_url | Yes | |
| content_hash | Yes | |
| not_legal_advice | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare a safe read-only, closed-world operation, and the description adds substantial context beyond them: empty-list vs not_found semantics, no auth or cost, a concrete rate limit (20/min per IP) with the resulting rate_limited error, and a data source. This is exactly the extra behavioral detail the agent cannot infer from annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and the routing guidance are front-loaded, and the trailing sentences each deliver a distinct operational fact (empty vs not_found, cost/auth, rate limit, disclaimer, source). No sentence is filler despite the density.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value shape needn't be documented, and the description still covers the two edge outcomes an agent must handle (empty list vs not_found). Combined with the rate-limit and auth notes, nothing needed to call this tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single 'month' parameter already carries the YYYY-MM pattern, an example, and the not_found caveat. The description restates the not_found behavior but adds no new syntax or format meaning, so the baseline 3 for schema-complete parameters applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource ('Returns every lettered advisory note in a month's Visa Bulletin') and immediately illustrates the content with a concrete example ('EB-1 India may become unavailable'). It explicitly distinguishes itself from the sibling chart tools get_visa_bulletin and get_visa_bulletin_dv.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger ('when the user asks whether dates are expected to advance, hold, or retrogress') and names the alternatives plus the condition that selects them ('For the chart dates themselves, use get_visa_bulletin or get_visa_bulletin_dv'). Both when-to-use and when-not-to-use are covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_form_changesList form changesARead-onlyInspect
Lists the form edition changes and the USCIS newsroom and Federal Register alerts ImmigrationLayer has recorded on or after a date, newest first. Edition changes cover the forms check_form_edition lists. Use it to catch up on what changed since a last check. For one form's current edition, use check_form_edition. To find alerts by keyword, use search_alerts. Returns at most 100 form edition changes and 100 alerts per page. Pass next_cursor as cursor, with the same since, to continue until next_cursor is null. Empty lists on the first page mean nothing was recorded since that date. Free, no sign-in required. Limit: 20 calls per minute per IP, then rate_limited. Not legal advice. Sources: uscis.gov form pages or dated web.archive.org captures of them, USCIS newsroom alerts, and Federal Register notices. The top-level source URL identifies the exact aggregate query, including the page cursor. Each alert and form change keeps its own source URL and content hash.
| Name | Required | Description | Default |
|---|---|---|---|
| since | Yes | ISO 8601 date or date-time, e.g. "2026-08-01" or "2026-08-01T09:30:00Z"; returns changes on or after this instant. A date means midnight UTC; a date-time without an offset is UTC. | |
| cursor | No | Opaque navigation cursor from the preceding page's next_cursor. Omit for the first page. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| as_of | Yes | |
| source_url | Yes | |
| content_hash | Yes | |
| not_legal_advice | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnly, non-destructive, closed-world), and the description adds substantial context beyond them: 100-item-per-resource page caps, cursor continuation rules, the meaning of empty first-page lists, free/no-sign-in access, and a concrete 20-calls-per-minute-per-IP limit with the rate_limited failure mode. Source provenance and the per-item source URL/content hash round it out.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and alternatives, and nearly every sentence carries operative information. The trailing provenance sentences about source URLs and content hashes are useful for verification but push the length near the limit for a two-parameter read tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return shape need not be explained. The description still covers pagination, rate limits, access cost, empty-result semantics, and data provenance — nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline would be 3, but the description adds real semantics: cursor must be passed as next_cursor with the same since value and paginated until next_cursor is null. That is a non-obvious usage constraint not visible in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence names a specific verb and two concrete resources (form edition changes plus USCIS newsroom and Federal Register alerts), states the ordering (newest first) and the scope (edition changes are exactly those check_form_edition covers). This distinguishes it clearly from check_form_edition and search_alerts without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states the use case ("catch up on what changed since a last check") and routes to both alternatives with their selecting conditions: check_form_edition for one form's current edition, search_alerts for keyword lookup. Both when-to-use and when-not-to-use are present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_alertsSearch alertsARead-onlyInspect
Searches published immigration announcements by keyword, newest first. For US (the default), USCIS newsroom alerts and Federal Register notices. Use it to find announcements about a form or topic, e.g. "I-765" or "fee". For GB, Home Office media statements and fact sheets that the Home Office in the media feed tags as immigration, matched by title. They are statements, not rule changes. GB results cover recent posts ImmigrationLayer has stored from the feed, not a full archive. Each GB item carries its feed categories and a licence attribution. Australian alerts list registered compilations of the Migration Regulations 1994, based on content from the Federal Register of Legislation, CC BY 4.0. AU titles state only the compilation number; search "compilation" to list them. Each AU item carries its start date and a licence attribution. To list everything published since a date without a keyword, use list_form_changes, which is free. Returns at most 100 matches per page. Pass next_cursor as cursor to continue until next_cursor is null. No match returns an empty list, not an error. Requires sign-in at https://immigrationlayer.com/login and an active plan. Without a plan it returns subscription_required. Limit: 30 calls per minute per account, shared by all paid tools, then rate_limited. Not legal advice. Sources: for US, USCIS newsroom alerts and Federal Register notices; for GB, the Home Office in the media blog feed (homeofficemedia.blog.gov.uk); for AU, the Federal Register of Legislation (legislation.gov.au). UK alert data contains public sector information licensed under the Open Government Licence v3.0. The top-level source URL identifies the exact aggregate query, including the page cursor; each result preserves its government URL, source, and content hash.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Keyword matched case-insensitively anywhere in an alert's title. A form number such as "I-765" also matches alerts tagged with that form. Summaries are not searched | |
| since | No | ISO 8601 date or date-time, e.g. "2026-08-01" or "2026-08-01T09:30:00Z"; limits results to alerts published on or after this instant. A date means midnight UTC; a date-time without an offset is UTC. | |
| cursor | No | Opaque navigation cursor from the preceding page's next_cursor. Omit for the first page. | |
| country | No | ISO 3166-1 alpha-2 country code. "US" (default), "GB" or "AU". |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| as_of | Yes | |
| source_url | Yes | |
| content_hash | Yes | |
| not_legal_advice | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only, closed-world, non-destructive profile, and the description goes well beyond them: sign-in and active-plan requirements, subscription_required failure mode, 30 calls/minute shared rate limit with rate_limited signal, 100-match page cap with next_cursor paging, and empty list rather than error. It stops short of describing result field shape, but an output schema exists to cover that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded and well organized by country, but bloated: the source list appears twice (inline per country and again in an explicit "Sources:" sentence), and provenance/licence paragraphs plus a disclaimer crowd out the operational content. Roughly a third of the text could be cut without losing decision-relevant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a multi-corpus search tool with a full output schema and complete annotations, everything an agent needs to call it correctly is present: required keyword, country behavior, pagination loop termination, auth and rate-limit failure modes, and the sibling alternative for date-only listing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all four parameters. The description still adds real semantics the schema lacks — country-dependent corpora, title-only matching for GB, the default of US, and the fact that summaries are not searched. Slight deduction because cursor/since behavior is largely left to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (searches published immigration announcements), the ordering (newest first), and enumerates exactly what corpus is searched per country (USCIS newsroom + Federal Register; Home Office media feed; Migration Regulations compilations). An agent can distinguish this from check_form_edition or get_fee purely from the text.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete usage example ("I-765" or "fee") and explicitly routes the no-keyword-by-date case to list_form_changes, even noting that alternative is free. It also warns that AU titles only carry compilation numbers and that searching "compilation" is the way to list them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
- Changed
search_alerts5 fields changed- changed
Input schema / properties / country / descriptionPrevious value: -"ISO 3166-1 alpha-2 country code. \"US\" (default) or \"GB\"."New value: +"ISO 3166-1 alpha-2 country code. \"US\" (default), \"GB\" or \"AU\"." - changed
Input schema / properties / country / enumPrevious value: -[ - "US", - "GB" -]New value: +[ + "US", + "GB", + "AU" +] - changed
Output schema / properties / data / properties / alerts / items / properties / attribution / descriptionPrevious value: -"Licence attribution for the source data. Present for GB, absent for US."New value: +"Licence attribution for the source data. Present for GB and AU, absent for US." - changed
Output schema / properties / data / properties / alerts / items / properties / source / enumPrevious value: -[ - "uscis_newsroom", - "federal_register", - "home_office_media" -]New value: +[ + "uscis_newsroom", + "federal_register", + "home_office_media", + "legislation_au" +] - added
Output schema / properties / data / properties / alerts / items / properties / start_dateAdded value: +{ + "description": "The date the compilation shows the Regulations as in force from (YYYY-MM-DD). Present for AU, absent for US and GB.", + "type": "string" +}
2 tool updates
- Changed
get_processing_time6 fields changed- changed
Input schema / properties / category / descriptionPrevious value: -"For US, the eligibility category exactly as the USCIS processing times tool lists it, e.g. \"Based on an approved asylum application [(a)(5)]\" for I-765. For GB, the page's section heading, such as \"Popular work visas\"; required when the route appears in more than one section."New value: +"For US, the eligibility category exactly as the USCIS processing times tool lists it, e.g. \"Based on an approved asylum application [(a)(5)]\" for I-765. For GB, the page's section heading, such as \"Popular work visas\"; required when the route appears in more than one section. For AU, the visa stream exactly as the page lists it, such as \"Higher Education Sector\"; required when the subclass has more than one stream." - changed
Input schema / properties / country / descriptionPrevious value: -"ISO 3166-1 alpha-2 country code. \"US\" (default) or \"GB\"."New value: +"ISO 3166-1 alpha-2 country code. \"US\" (default), \"GB\", or \"AU\"." - changed
Input schema / properties / country / enumPrevious value: -[ - "US", - "GB" -]New value: +[ + "US", + "GB", + "AU" +] - changed
Input schema / properties / form / descriptionPrevious value: -"For US, the USCIS form number exactly as USCIS writes it, e.g. \"I-765\"; \"i765\" and \"I765\" do not match. For GB, the visa route exactly as the UKVI page lists it, e.g. \"Skilled Worker\"."New value: +"For US, the USCIS form number exactly as USCIS writes it, e.g. \"I-765\"; \"i765\" and \"I765\" do not match. For GB, the visa route exactly as the UKVI page lists it, e.g. \"Skilled Worker\". For AU, the three-digit visa subclass, such as \"500\"." - changed
Input schema / properties / office / descriptionPrevious value: -"For US, the USCIS office exactly as the processing times tool lists it, e.g. \"Service Center Operations (SCOPS)\", \"National Benefits Center\", or a field office such as \"Houston TX\". For GB, \"inside the UK\" or \"outside the UK\". Required for GB."New value: +"For US, the USCIS office exactly as the processing times tool lists it, e.g. \"Service Center Operations (SCOPS)\", \"National Benefits Center\", or a field office such as \"Houston TX\". For GB, \"inside the UK\" or \"outside the UK\". Required for GB. Omit for AU." - changed
Output schema / properties / data / properties / attribution / descriptionPrevious value: -"Licence attribution for the source data. Present for GB, absent for US."New value: +"Licence attribution for the source data. Present for GB and AU, absent for US."
- Changed
search_alerts4 fields changed- added
Input schema / properties / countryAdded value: +{ + "description": "ISO 3166-1 alpha-2 country code. \"US\" (default) or \"GB\".", + "enum": [ + "US", + "GB" + ], + "type": "string" +} - added
Output schema / properties / data / properties / alerts / items / properties / attributionAdded value: +{ + "description": "Licence attribution for the source data. Present for GB, absent for US.", + "type": "string" +} - added
Output schema / properties / data / properties / alerts / items / properties / categoriesAdded value: +{ + "description": "The feed's category terms for the post. Present for GB, absent for US.", + "items": { + "type": "string" + }, + "type": "array" +} - changed
Output schema / properties / data / properties / alerts / items / properties / source / enumPrevious value: -[ - "uscis_newsroom", - "federal_register" -]New value: +[ + "uscis_newsroom", + "federal_register", + "home_office_media" +]
1 tool update
- Changed
get_fee7 fields changed- changed
Input schema / properties / category / descriptionPrevious value: -"For US I-131, a short name of the Appendix B heading, a colon, and the item selector, such as \"Reentry Permit: Part 1., Item Number 1.\" For US I-129, the classification label exactly as G-1055 Appendix A prints it, such as \"If you are filing H-1B or H-1B1 petitions.\"; for a small employer row, that label, a space, and \"If you are filing as a Small Employer or Nonprofit.\" For US I-907, the classification label exactly as G-1055 prints it, such as \"H-2B or R nonimmigrant classification\". Required for I-129, I-131, and I-907. For GB, the published section heading. Required when the fee category name appears in more than one section."New value: +"For US I-131, a short name of the Appendix B heading, a colon, and the item selector, such as \"Reentry Permit: Part 1., Item Number 1.\" For US I-129, the classification label exactly as G-1055 Appendix A prints it, such as \"If you are filing H-1B or H-1B1 petitions.\"; for a small employer row, that label, a space, and \"If you are filing as a Small Employer or Nonprofit.\" For US I-907, the classification label exactly as G-1055 prints it, such as \"H-2B or R nonimmigrant classification\". Required for I-129, I-131, and I-907. For GB, the published section heading. Required when the fee category name appears in more than one section. For AU, the charge component exactly as the item states it, such as \"Base application charge\"; required when the subclass has more than one." - changed
Input schema / properties / country / descriptionPrevious value: -"ISO 3166-1 alpha-2 country code. \"US\" (default) or \"GB\"."New value: +"ISO 3166-1 alpha-2 country code. \"US\" (default), \"GB\", or \"AU\"." - changed
Input schema / properties / country / enumPrevious value: -[ - "US", - "GB" -]New value: +[ + "US", + "GB", + "AU" +] - changed
Input schema / properties / filing / descriptionPrevious value: -"How the form is filed: \"paper\" (mailed) or \"online\" (USCIS online account). Required for US. Ignored for GB."New value: +"How the form is filed: \"paper\" (mailed) or \"online\" (USCIS online account). Required for US. Ignored for GB and AU." - changed
Input schema / properties / form / descriptionPrevious value: -"For US, the USCIS form number exactly as USCIS writes it, e.g. \"I-765\"; \"i765\" and \"I765\" do not match. For GB, the published Home Office fee category name."New value: +"For US, the USCIS form number exactly as USCIS writes it, e.g. \"I-765\"; \"i765\" and \"I765\" do not match. For GB, the published Home Office fee category name. For AU, the three-digit visa subclass, such as \"500\"." - added
Output schema / properties / data / properties / attributionAdded value: +{ + "description": "Licence attribution for the source data. Present for AU, absent for US and GB.", + "type": "string" +} - added
Output schema / properties / data / properties / notesAdded value: +{ + "description": "Where the source states the charge and what can change it. Present for AU, absent for US and GB.", + "type": "string" +}
1 tool update
- Changed
get_processing_time9 fields changed- changed
Input schema / properties / category / descriptionPrevious value: -"Eligibility category exactly as the USCIS processing times tool lists it, e.g. \"Based on an approved asylum application [(a)(5)]\" for I-765"New value: +"For US, the eligibility category exactly as the USCIS processing times tool lists it, e.g. \"Based on an approved asylum application [(a)(5)]\" for I-765. For GB, the page's section heading, such as \"Popular work visas\"; required when the route appears in more than one section." - added
Input schema / properties / countryAdded value: +{ + "description": "ISO 3166-1 alpha-2 country code. \"US\" (default) or \"GB\".", + "enum": [ + "US", + "GB" + ], + "type": "string" +} - changed
Input schema / properties / form / descriptionPrevious value: -"USCIS form number exactly as USCIS writes it, uppercase with the hyphen, e.g. \"I-765\". \"i765\" and \"I765\" do not match"New value: +"For US, the USCIS form number exactly as USCIS writes it, e.g. \"I-765\"; \"i765\" and \"I765\" do not match. For GB, the visa route exactly as the UKVI page lists it, e.g. \"Skilled Worker\"." - changed
Input schema / properties / office / descriptionPrevious value: -"USCIS office exactly as the processing times tool lists it, e.g. \"Service Center Operations (SCOPS)\", \"National Benefits Center\", or a field office such as \"Houston TX\""New value: +"For US, the USCIS office exactly as the processing times tool lists it, e.g. \"Service Center Operations (SCOPS)\", \"National Benefits Center\", or a field office such as \"Houston TX\". For GB, \"inside the UK\" or \"outside the UK\". Required for GB." - added
Output schema / properties / data / properties / attributionAdded value: +{ + "description": "Licence attribution for the source data. Present for GB, absent for US.", + "type": "string" +} - changed
Output schema / properties / data / properties / basis / descriptionPrevious value: -"What value measures, as USCIS states it"New value: +"What value measures, as the source states it" - changed
Output schema / properties / data / properties / category_notes / descriptionPrevious value: -"USCIS's own note on the category, or null"New value: +"The source's own note on the category, or null" - changed
Output schema / properties / data / properties / unit / descriptionPrevious value: -"Unit of value as USCIS states it, e.g. \"Months\", \"Weeks\", or \"Days\""New value: +"Unit of value as the source states it, e.g. \"Months\", \"weeks\", or \"Days\"" - changed
Output schema / properties / data / properties / value / descriptionPrevious value: -"The estimate, in unit"New value: +"The published time, in unit"
1 tool update
- Changed
get_fee1 field changed- changed
Input schema / properties / category / descriptionPrevious value: -"For US, a short name of the Appendix B heading, a colon, and the item selector, such as \"Reentry Permit: Part 1., Item Number 1.\" Required for I-131; other US forms have no category fees. For GB, the published section heading. Required when the fee category name appears in more than one section."New value: +"For US I-131, a short name of the Appendix B heading, a colon, and the item selector, such as \"Reentry Permit: Part 1., Item Number 1.\" For US I-129, the classification label exactly as G-1055 Appendix A prints it, such as \"If you are filing H-1B or H-1B1 petitions.\"; for a small employer row, that label, a space, and \"If you are filing as a Small Employer or Nonprofit.\" For US I-907, the classification label exactly as G-1055 prints it, such as \"H-2B or R nonimmigrant classification\". Required for I-129, I-131, and I-907. For GB, the published section heading. Required when the fee category name appears in more than one section."
1 tool update
- Changed
get_fee1 field changed- changed
Input schema / properties / category / descriptionPrevious value: -"For US, unsupported by the current dataset and returns not_found. For GB, the published section heading. Required when the fee category name appears in more than one section."New value: +"For US, a short name of the Appendix B heading, a colon, and the item selector, such as \"Reentry Permit: Part 1., Item Number 1.\" Required for I-131; other US forms have no category fees. For GB, the published section heading. Required when the fee category name appears in more than one section."
2 tool updates
- Changed
get_visa_bulletin2 fields changed- changed
Input schema / properties / country / descriptionPrevious value: -"Chargeability country, exact: \"China\" (mainland-born), \"India\", \"Mexico\", \"Philippines\", or \"All Chargeability Areas\" for every other country"New value: +"Chargeability country, exact: \"China\" (mainland-born), \"India\", \"Mexico\", \"Philippines\", or \"All Chargeability Areas\", the bulletin column for countries without their own column" - changed
Output schema / properties / data / properties / date_or_status / descriptionPrevious value: -"Cutoff date as YYYY-MM-DD, \"C\" (current: no wait), or \"U\" (unavailable)"New value: +"Cutoff date as YYYY-MM-DD, \"C\" (current), or \"U\" (unavailable), as the bulletin prints it"
- Changed
get_visa_bulletin_dv1 field changed- changed
Output schema / properties / data / properties / cutoff_or_status / descriptionPrevious value: -"Rank cutoff: a case number such as \"35000\", or \"C\" (current: every case number qualifies)"New value: +"Rank cutoff: a case number such as \"35000\", or \"C\" (current), as the bulletin prints it"
1 tool update
- Changed
get_fee9 fields changed- changed
Input schema / properties / category / descriptionPrevious value: -"Eligibility category; unsupported by the current dataset and returns not_found"New value: +"For US, unsupported by the current dataset and returns not_found. For GB, the published section heading. Required when the fee category name appears in more than one section." - added
Input schema / properties / countryAdded value: +{ + "description": "ISO 3166-1 alpha-2 country code. \"US\" (default) or \"GB\".", + "enum": [ + "US", + "GB" + ], + "type": "string" +} - changed
Input schema / properties / filing / descriptionPrevious value: -"How the form is filed: \"paper\" (mailed) or \"online\" (USCIS online account)"New value: +"How the form is filed: \"paper\" (mailed) or \"online\" (USCIS online account). Required for US. Ignored for GB." - changed
Input schema / properties / form / descriptionPrevious value: -"USCIS form number exactly as USCIS writes it, uppercase with the hyphen, e.g. \"I-765\". \"i765\" and \"I765\" do not match"New value: +"For US, the USCIS form number exactly as USCIS writes it, e.g. \"I-765\"; \"i765\" and \"I765\" do not match. For GB, the published Home Office fee category name." - changed
Input schema / requiredPrevious value: -[ - "form", - "filing" -]New value: +[ + "form" +] - changed
Output schema / properties / data / properties / amount_cents / descriptionPrevious value: -"Fee in US cents; 47000 is $470.00"New value: +"Fee in the minor unit of currency; 47000 with USD is $470.00." - added
Output schema / properties / data / properties / currencyAdded value: +{ + "description": "ISO 4217 code for amount_cents, e.g. \"USD\" or \"GBP\".", + "example": "USD", + "type": "string" +} - changed
Output schema / properties / data / properties / filing / enumPrevious value: -[ - "paper", - "online" -]New value: +[ + "paper", + "online", + "unspecified" +] - changed
Output schema / properties / data / requiredPrevious value: -[ - "form", - "filing", - "category", - "amount_cents", - "effective_date" -]New value: +[ + "form", + "filing", + "category", + "amount_cents", + "effective_date", + "currency" +]
1 tool update
- Changed
list_form_changes3 fields changed- added
Input schema / properties / cursorAdded value: +{ + "description": "Opaque navigation cursor from the preceding page's next_cursor. Omit for the first page.", + "maxLength": 4096, + "type": "string" +} - added
Output schema / properties / data / properties / next_cursorAdded value: +{ + "anyOf": [ + { + "maxLength": 4096, + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Pass this cursor with the same since to read the next page. Null means no more changes." +} - changed
Output schema / properties / data / requiredPrevious value: -[ - "form_editions", - "alerts" -]New value: +[ + "form_editions", + "alerts", + "next_cursor" +]
7 tool updates
- Changed
check_form_edition5 fields changed- changed
Input schema / properties / form / descriptionPrevious value: -"USCIS form number, e.g. \"I-765\""New value: +"USCIS form number exactly as USCIS writes it, uppercase with the hyphen, e.g. \"I-765\". \"i765\" and \"I765\" do not match" - added
Output schema / properties / data / properties / accept_from / descriptionAdded value: +"First date USCIS accepts this edition, YYYY-MM-DD" - added
Output schema / properties / data / properties / announced_edition / descriptionAdded value: +"The next edition USCIS has announced but does not accept yet; absent when none" - added
Output schema / properties / data / properties / edition_date / descriptionAdded value: +"Edition date printed on the form, MM/DD/YY" - added
Output schema / properties / data / properties / reject_from / descriptionAdded value: +"Date USCIS stops accepting this edition, YYYY-MM-DD; null when none is announced"
- Changed
get_fee5 fields changed- changed
Input schema / properties / category / descriptionPrevious value: -"Eligibility category; unsupported by the current dataset and returns unavailable"New value: +"Eligibility category; unsupported by the current dataset and returns not_found" - changed
Input schema / properties / filing / descriptionPrevious value: -"Filing method"New value: +"How the form is filed: \"paper\" (mailed) or \"online\" (USCIS online account)" - changed
Input schema / properties / form / descriptionPrevious value: -"USCIS form number, e.g. \"I-765\""New value: +"USCIS form number exactly as USCIS writes it, uppercase with the hyphen, e.g. \"I-765\". \"i765\" and \"I765\" do not match" - added
Output schema / properties / data / properties / amount_cents / descriptionAdded value: +"Fee in US cents; 47000 is $470.00" - added
Output schema / properties / data / properties / effective_date / descriptionAdded value: +"Date this fee took effect, YYYY-MM-DD"
- Changed
get_processing_time10 fields changed- changed
Input schema / properties / category / descriptionPrevious value: -"Eligibility category"New value: +"Eligibility category exactly as the USCIS processing times tool lists it, e.g. \"Based on an approved asylum application [(a)(5)]\" for I-765" - added
Input schema / properties / category / exampleAdded value: +"Based on an approved asylum application [(a)(5)]" - changed
Input schema / properties / form / descriptionPrevious value: -"USCIS form number, e.g. \"I-765\""New value: +"USCIS form number exactly as USCIS writes it, uppercase with the hyphen, e.g. \"I-765\". \"i765\" and \"I765\" do not match" - changed
Input schema / properties / office / descriptionPrevious value: -"USCIS field office or service center"New value: +"USCIS office exactly as the processing times tool lists it, e.g. \"Service Center Operations (SCOPS)\", \"National Benefits Center\", or a field office such as \"Houston TX\"" - added
Input schema / properties / office / exampleAdded value: +"Service Center Operations (SCOPS)" - added
Output schema / properties / data / properties / basis / descriptionAdded value: +"What value measures, as USCIS states it" - changed
Output schema / properties / data / properties / basis / examplePrevious value: -"Months"New value: +"80% of cases completed within" - added
Output schema / properties / data / properties / category_notes / descriptionAdded value: +"USCIS's own note on the category, or null" - added
Output schema / properties / data / properties / unit / descriptionAdded value: +"Unit of value as USCIS states it, e.g. \"Months\", \"Weeks\", or \"Days\"" - added
Output schema / properties / data / properties / value / descriptionAdded value: +"The estimate, in unit"
- Changed
get_visa_bulletin6 fields changed- changed
Input schema / properties / category / descriptionPrevious value: -"Preference category, e.g. \"F2A\""New value: +"Preference category code, exact: F1, F2A, F2B, F3, F4, EB-1, EB-2, EB-3, EB-3-OW (other workers), EB-4, EB-4-R (religious workers), EB-5 (unreserved), EB-5-RURAL, EB-5-HUA (high unemployment), or EB-5-INFRA" - changed
Input schema / properties / chart / descriptionPrevious value: -"Which chart to read"New value: +"\"final_action\" for the Final Action Dates chart, \"dates_for_filing\" for the Dates for Filing chart" - changed
Input schema / properties / country / descriptionPrevious value: -"Chargeability country"New value: +"Chargeability country, exact: \"China\" (mainland-born), \"India\", \"Mexico\", \"Philippines\", or \"All Chargeability Areas\" for every other country" - changed
Input schema / properties / month / descriptionPrevious value: -"Bulletin month as YYYY-MM, e.g. \"2026-10\""New value: +"Bulletin month as YYYY-MM, e.g. \"2026-10\". A month not yet published or loaded returns not_found" - added
Output schema / properties / data / properties / date_or_status / descriptionAdded value: +"Cutoff date as YYYY-MM-DD, \"C\" (current: no wait), or \"U\" (unavailable)" - changed
Output schema / properties / data / properties / date_or_status / examplePrevious value: -"01JAN21"New value: +"2021-01-01"
- Changed
get_visa_bulletin_dv3 fields changed- changed
Input schema / properties / month / descriptionPrevious value: -"Bulletin month as YYYY-MM, e.g. \"2026-10\""New value: +"Bulletin month as YYYY-MM, e.g. \"2026-10\". A month not yet published or loaded returns not_found" - changed
Input schema / properties / region / descriptionPrevious value: -"DV region, e.g. \"Africa\""New value: +"DV region, exact: \"Africa\", \"Asia\", \"Europe\", \"North America\", \"Oceania\", or \"South America and the Caribbean\"" - added
Output schema / properties / data / properties / cutoff_or_status / descriptionAdded value: +"Rank cutoff: a case number such as \"35000\", or \"C\" (current: every case number qualifies)"
- Changed
get_visa_bulletin_notes1 field changed- changed
Input schema / properties / month / descriptionPrevious value: -"Bulletin month as YYYY-MM, e.g. \"2026-10\""New value: +"Bulletin month as YYYY-MM, e.g. \"2026-10\". A month not yet published or loaded returns not_found"
- Changed
search_alerts1 field changed- changed
Input schema / properties / query / descriptionPrevious value: -"Keyword to search for"New value: +"Keyword matched case-insensitively anywhere in an alert's title. A form number such as \"I-765\" also matches alerts tagged with that form. Summaries are not searched"
8 tool updates
- First observed
check_form_edition - First observed
get_fee - First observed
get_processing_time - First observed
get_visa_bulletin - First observed
get_visa_bulletin_dv - First observed
get_visa_bulletin_notes - First observed
list_form_changes - First observed
search_alerts
Publisher details
- Operator
- Zentered Studios
- Operator website
- https://zentered-studios.com
- Vendor relationship
- Not applicable
- Documentation
- https://immigrationcontext.com
- Trust center
- Not applicable
- Restrictions
- Four tools are free with no sign-in. The other four need sign-in and an active plan.
Related MCP Connectors
PERM, prevailing wage and H-1B case status, DOL's queue and the visa bulletin, from federal records
USCIS processing times per form and office, plus whether your case can file an inquiry yet.
US green card priority date cutoffs from the Visa Bulletin, with a verdict for your date.
U.S. immigration law research: BIA/AAO/circuit cases, INA/CFR, USCIS policy, crimmigration.
Related MCP Servers
- AlicenseAqualityDmaintenanceMCP server for US immigration guidance — live Visa Bulletin, priority date checker, and immigration term explanations powered by official government data33MIT
- AlicenseAqualityDmaintenanceHelps independent inventors calculate USPTO fees, determine entity status, track patent deadlines, and understand procedural rules without needing an attorney.6Apache 2.0
- AlicenseNot gradedqualityDmaintenanceEnables searching and analyzing real H-1B visa sponsorship data from the U.S. Department of Labor, including job titles, salaries, locations, and company statistics.MIT
- AlicenseNot gradedqualityDmaintenanceRead-only MCP server for querying H-1B sponsoring employers from the USCIS dataset, providing tools to search employers, get year-by-year approvals, top sponsors, and trends across FY2009-2026.2MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.