immigrationhelp
Server Details
Find DOJ-authorized immigration legal help near you.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-06-18
- URL
TDQS
Scored across 6 tools
Each tool has a clearly distinct purpose: get_listing fetches a single provider by slug, search_listings searches with filters, and the list_* tools enumerate different metadata resources (categories, places, sources). get_stats provides aggregate counts. No two tools appear to do the same thing.
All tools use snake_case with a verb_noun pattern. The verbs (get, list, search) are used consistently according to the operation type. Minor singular/plural differences (get_listing vs list_categories) follow natural semantics.
Six tools is well within the ideal range for a read-only directory API. Each tool covers a distinct and necessary function without redundancy.
The surface covers the full read-only lifecycle for a provider directory: fetching a single listing, searching listings, listing metadata (categories, places, sources), and getting stats. No obvious gaps for a public data API.
Available Tools
6 toolsget_listingARead-onlyIdempotentInspect
Get one published immigration legal provider by its slug.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | The listing slug. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and a closed world, so the safety profile is fully covered. The description adds the meaningful 'published' qualifier, implying unpublished or unknown slugs are not returned, but it does not state the failure behavior for a missing slug.
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?
A single tight sentence with zero filler, and the key constraint ('published') is placed before the lookup key rather than buried.
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 simple single-entity read with rich annotations and no output schema, the description covers the essentials. It could go slightly further by indicating what is returned or how a missing slug behaves, but nothing critical to invoking it correctly is absent.
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% for the single slug parameter, and the schema already enforces the pattern and length constraints. The description adds no format or sourcing detail beyond what the schema provides, so the baseline 3 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?
The description gives a specific verb (Get) and resource (one published immigration legal provider) and states the lookup key (slug), which cleanly separates it from the list_* and search_listings siblings. It stops short of naming those siblings explicitly, so it is clear but not fully differentiated.
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?
Usage is only implied: 'by its slug' tells the agent a slug is required, which in practice comes from search_listings, but no alternative or when-not-to-use condition is stated. There is no explicit guidance about preferring search_listings when only a name is known.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_statsARead-onlyIdempotentInspect
Get the number of published immigration legal providers, places and categories, and when the data last changed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is fully covered by structured data. The description adds the useful scoping detail that counts cover only 'published' providers and that the response includes a last-changed timestamp, but nothing about refresh/auth behavior or response shape. Value added is modest against the annotation baseline.
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?
A single front-loaded sentence with no filler; the counted resources and the recency field are stated in one pass with nothing redundant.
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 no output schema, the description must carry the return-value burden, and it does name the four things returned (provider, place, and category counts, plus last-changed). It stops short of describing the response structure or whether counts are global, which is a minor gap for a zero-parameter stats call.
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?
The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. The description appropriately confines itself to describing the returned aggregates instead of inventing parameter detail.
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 description states a specific verb ('Get the number of') and enumerates the exact resources counted: published immigration legal providers, places, and categories, plus a freshness signal. This clearly separates it from siblings like list_places or list_categories, which return records rather than aggregate counts, though the distinction is implied rather than stated.
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?
Usage is only implied: an agent can infer this is an overview/count tool to call before drilling into listings, but the description never says when to prefer it over get_listing or search_listings, nor when not to use it. No alternatives or prerequisites are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_categoriesARead-onlyIdempotentInspect
List categories with their immigration legal provider counts.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, closed-world and non-destructive, so the safety profile is covered. The description adds useful return context (counts are included per category) but says nothing about ordering, completeness, or whether counts are live.
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?
One sentence, front-loaded with the action and the payload; no filler whatsoever.
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 trivial, no-param, no-output-schema enumeration tool, the description tells the agent what it gets back. Minor omissions (ordering, whether counts reflect all providers) keep it short of a 5.
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?
The tool takes zero parameters, so there is nothing for the description to document; the baseline for a no-parameter tool 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?
Specific verb+resource ('List categories') plus a distinguishing detail: each category comes with immigration legal provider counts. That separates it from siblings like list_places and list_sources, though the description never explicitly names those alternatives.
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?
Usage is only implied — an agent can infer this is the enumeration call for categories, but there is no statement of when to prefer it over siblings or any prerequisites/exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_placesARead-onlyIdempotentInspect
List countries, regions and cities that have immigration legal providers.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and a closed-world scope, so the safety profile is fully covered. The description's only added behavioral value is the scoping constraint that only places with providers appear, and it says nothing about return shape or ordering.
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?
A single front-loaded sentence with no filler; the scope qualifier comes right after the verb+resource and every word earns its place.
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 zero-parameter, fully-annotated read tool this is nearly sufficient; the one gap is that with no output schema the description does not indicate whether the result is a flat list, a hierarchy, or identifiers vs names.
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?
The tool takes no parameters, so there is nothing for the description to document — baseline is 4. The description does not need to add parameter meaning, and it correctly omits any.
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 (list) and a precisely-scoped resource, spelling out that 'places' means countries, regions and cities, and that only those with immigration legal providers are returned. It is distinguishable from list_categories and list_sources by resource, though it never explicitly contrasts with them.
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?
There is no guidance on when to reach for this tool versus siblings like search_listings or list_categories, and no stated prerequisites. The filtering scope implies it is a reference/enumeration call, but the agent must infer that.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_sourcesARead-onlyIdempotentInspect
List where the immigration legal provider data comes from, with the license and refresh of each source.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds value the annotations cannot: it discloses the shape of the returned content (license and refresh per source), which matters because no output schema is provided.
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?
A single sentence with zero filler, front-loaded with the action and resource, then the payload detail. Nothing repeats the name or restates the schema.
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 zero-argument, read-only listing tool with no output schema, the description covers the essentials and hints at return fields. It could go slightly further on return structure (e.g. ordering or what a 'source' record looks like), but nothing an agent needs in order to call it 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?
The tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline for a no-parameter tool applies. No misleading parameter language is present.
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?
Names a specific verb ('List') and resource ('where the immigration legal provider data comes from'), and specifies what each entry contains: license and refresh. That resource is unique among the siblings (get_listing, get_stats, list_categories, list_places, search_listings), so an agent can route to it without ambiguity.
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?
Usage is implied rather than stated: the tool clearly returns provenance/metadata rather than listings themselves, and needs no arguments, so the agent can infer when it applies. However, there is no explicit when-to-use guidance, no statement of when-not to use it, and no named alternative for related metadata (e.g. get_stats vs this).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_listingsARead-onlyIdempotentInspect
Search published immigration legal providers by text, place and category.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Search text, with at least one letter or digit. Matches name, categories, attributes, description and place. Typos fall back to close matches. | |
| city | No | City slug, from /places. | |
| sort | No | `relevance` needs `q` and is the default with it. `name` is the default without `q`. `recent` is newest first. | |
| limit | No | Items per page. | |
| cursor | No | `page.nextCursor` from the previous response. Opaque. Send the same filters and `limit`. | |
| region | No | Region slug, from /places. | |
| country | No | ISO 3166-1 alpha-2 country code, any case. A country the directory does not cover, as listed in /places, gives 400. | |
| category | No | Category slug, from /categories. A parent slug also matches its children. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, closed-world behavior, so the safety profile is covered. The description adds one genuinely useful behavioral fact — only "published" providers are returned — but says nothing about pagination, result shape, or match/fallback behavior beyond what the schema states.
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?
A single front-loaded sentence with no filler; the scope qualifier "published" is placed where it is immediately visible. Nothing is wasted.
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 8 optional parameters and no output schema, the description is adequate but thin — it never hints at the returned result set or pagination model that an agent must understand to page correctly. The rich per-parameter schema carries most of the missing load.
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 documents all 8 parameters, including slug formats, cursor reuse, and sort defaults. The description's mention of "text, place and category" adds only a loose mapping to parameter groups and no format or semantics beyond 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 (Search) and a specific resource (published immigration legal providers) plus the facets it searches by. The word "Search" plus facets implicitly separates it from the list_* siblings, though no sibling is named explicitly.
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?
Usage is only implied: an agent can infer this is the tool for querying providers by text/place/category. There is no statement of when to prefer this over get_listing (single lookup) or list_places/list_categories, and no prerequisites or exclusions.
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.
6 tool updates
- First observed
get_listing - First observed
get_stats - First observed
list_categories - First observed
list_places - First observed
list_sources - First observed
search_listings
Related MCP Connectors
U.S. immigration law research: BIA/AAO/circuit cases, INA/CFR, USCIS policy, crimmigration.
Find, compare and contact licensed U.S. lawyers from public bar data. Not legal advice.
USCIS fees, processing times, form editions, alerts, and the Visa Bulletin. Not legal advice.
Find a food pantry near a US location (ZIP or City, ST) from ~17,000 pantries. Free.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables searching for ICE detainee locations using AI-powered natural language queries, with support for bulk operations, multilingual searches, and legal report generation for families and legal representatives.5MIT
- AlicenseAqualityDmaintenanceMCP server for US immigration guidance — live Visa Bulletin, priority date checker, and immigration term explanations powered by official government data33MIT
- AlicenseAqualityDmaintenanceProvides AI assistants access to 991,000+ bar-verified U.S. attorney profiles for accurate lawyer search, verification, and referral without hallucination.714 npmMIT
- AlicenseAqualityCmaintenanceProvides immigration eligibility intelligence, enabling AI assistants to match user profiles to visas, compare pathways, and get country overviews using Transita's API.539 npmMIT
Glama MCP Gateway
Add one secure layer between your agents and this server.