PERM Tracker
Server Details
PERM, prevailing wage and H-1B case status, DOL's queue and the visa bulletin, from federal records
- Status
- Healthy
- Uptime
- 100.0% over 25 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 6 tools
Each tool targets a distinct query type: employer-wide statistics, individual case lookup, DOL queue status, decision estimates, sponsor search, and visa bulletin data. The only potential overlap is timing information between estimate_decision and queue_status, but the descriptions clearly separate per-case estimation from global queue reporting. Search_sponsors and employer_profile are complementary rather than duplicative.
All tool names use consistent snake_case and are highly readable. However, three names follow a verb_noun pattern (estimate_decision, lookup_case, search_sponsors) while three use noun phrases (employer_profile, queue_status, visa_bulletin), so the naming is not uniformly action-oriented. This is a minor deviation rather than a confusing mix of conventions.
Six tools are well-scoped for a read-only PERM/DOL tracker. Each tool answers a distinct core question and none feels redundant or extraneous. The count sits comfortably within the ideal 3–15 range.
The server covers employer search and profiling, individual case lookup across multiple DOL case types, current queue status, decision estimates, and visa bulletin data. A minor gap is the lack of flexible case discovery or listing by employer, occupation, or date range beyond aggregate employer profiles or known case numbers. Agents can still work around this for most core workflows.
Available Tools
6 toolsemployer_profileAn employer's, law firm's or occupation's PERM recordARead-onlyIdempotentInspect
Cases in DOL's published files (certified, denied, median days to a decision, filings in the last 12 months, and for an occupation the median offered wage), plus how many of its cases are pending at DOL right now and at which stage. Find the slug with search_sponsors first. Example: {"kind": "employer", "slug": "microsoft-corporation"}.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | One of "employer", "law firm" or "occupation" (singular). | |
| slug | Yes | From search_sponsors, e.g. google-llc. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive, closed-world behavior. The description adds non-obvious value by distinguishing the data's provenance and freshness: static DOL published files (certified, denied, medians, 12-month filings) versus live pending counts 'right now' and their stage. It does not mention pagination or rate limits, but for a read-only lookup that is minor.
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?
Three dense sentences, front-loaded with the payload and followed by the prerequisite and an example — no filler. The parenthetical enumeration is long but each item earns its place by defining the return shape in the absence of an output 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?
With no output schema, the description must convey return values, and it does so concretely (certified, denied, median days, 12-month filings, median offered wage, pending counts and stage). Combined with the enum kind and the search_sponsors prerequisite, an agent has enough to call it correctly; only minor gaps around error cases or empty results remain.
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 is 3, but the description adds real meaning: it supplies a concrete invocation example ({"kind": "employer", "slug": "microsoft-corporation"}) and reinforces that the slug is derived from search_sponsors. It stops short of clarifying edge cases (e.g., singular 'law firm' vs plural), but the added example and provenance note push it above baseline.
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 names a specific resource (PERM records for employers, law firms, or occupations) and enumerates the concrete payload (certified/denied counts, median days to decision, 12-month filings, median offered wage, pending counts by stage). It also distinguishes itself from the sibling search_sponsors, which is the discovery tool that produces the required slug, so an agent can tell the two apart 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?
It gives a clear prerequisite — 'Find the slug with search_sponsors first' — which is exactly the sequencing an agent needs. However, it does not draw boundaries against lookup_case or queue_status (other case-level siblings), so an agent must still infer that this is the aggregate profile lookup rather than an individual case lookup.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
estimate_decisionEstimate a PERM decision dateARead-onlyIdempotentInspect
When a pending PERM case is likely to be decided, with a range, the model used and its caveats. Pass a case number, or a filing date for a case in analyst review. An estimate, not a promise. Examples: {"case_number": "G-100-26045-123456"} or {"filed": "2026-01-15"}.
| Name | Required | Description | Default |
|---|---|---|---|
| filed | No | Filing date, YYYY-MM-DD, when there's no case number. | |
| case_number | No | A PERM case number. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnly, idempotent, non-destructive, closed-world). The description adds substantive behavioral context on top: that output includes a range, the underlying model, and its caveats, and the explicit hedge "An estimate, not a promise." That framing is not derivable from the 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?
Three short sentences plus two inline examples, front-loaded with the returned content before the input guidance. No filler, though the opening sentence is a fragment that reads slightly awkwardly.
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 two-parameter, read-only, no-output-schema tool, the description covers both input paths, the return content, and the reliability caveat. An agent has enough to call it correctly; only rival-tool selection guidance 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 already 100%, but the description adds meaning the schema lacks: the conditional rule that a filing date applies only to cases in analyst review, plus worked examples for each parameter. That is genuine value beyond the field descriptions.
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 title and description state a specific verb (estimate) and resource (PERM decision date), and the opening clause specifies the returned content (range, model, caveats). It is clearly distinguishable from lookup_case or queue_status by scope, though it never names those siblings 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?
"When a pending PERM case is likely to be decided" plus "Pass a case number, or a filing date for a case in analyst review" gives implied conditions for use and the two input paths. However, it never says when to prefer this over queue_status or lookup_case, so alternative-routing guidance is absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lookup_caseLook up a caseARead-onlyIdempotentInspect
One DOL case by number: status, filing date, employer, job and, once decided, DOL's decided record. PERM (G-100-...), prevailing wage (P-100- to P-203-...), H-1B LCA (I-200-...) and H-2A, H-2B or CW-1 numbers. Example: {"case_number": "G-100-26045-123456"}.
| Name | Required | Description | Default |
|---|---|---|---|
| case_number | Yes | As DOL prints it, e.g. G-100-26045-123456. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world behavior, so the safety profile is covered. The description adds real behavioral context beyond that: the decided record only appears 'once decided', implying pending cases return no decision details.
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?
Compact and front-loaded: the core action and its outputs come first, followed by format coverage and an example. Dense but every clause carries information; the trailing example is useful rather than padding.
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 single-parameter read tool whose annotations carry the safety profile, this is nearly complete. The description enumerates return fields, compensating for the absent output schema. Minor gap: no mention of behavior for unrecognized or not-yet-decided case numbers.
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 case_number parameter is already documented. The description goes further, enumerating the valid number prefixes/formats (G-100, P-100 to P-203, I-200, H-2A/H-2B/CW-1) and giving a concrete example, which meaningfully aids correct invocation.
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: looking up one DOL case by number, and enumerates the returned fields (status, filing date, employer, job, decided record). It differentiates implicitly from bulk siblings like search_sponsors, but does not name an alternative explicitly, so it stops short of a 5.
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: the description establishes that you need a DOL case number and lists which program families the lookup covers (PERM, prevailing wage, H-1B LCA, H-2A/H-2B/CW-1). There is no explicit when-to-use vs. when-not-to-use guidance or named alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
queue_statusPERM and prevailing wage queuesARead-onlyIdempotentInspect
DOL's processing times today: the month each PERM and prevailing wage queue is working on, average days to a decision, and how many PERM cases are pending from each filing month. Takes no arguments: {}.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive, closed-world behavior, so the safety profile is covered. The description adds real value beyond that by disclosing what the payload contains (working month, average days to decision, pending counts) and that it is a 'today' snapshot, which matters since no output schema exists.
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 tightly packed sentence that front-loads the resource and then the returned fields; every clause earns its place. The trailing 'Takes no arguments: {}' is redundant with the schema and is the only waste.
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 status tool, the description covers both the resource and the return contents, compensating for the absent output schema. Nothing an agent needs in order 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?
Zero parameters, so the baseline is 4. The description's 'Takes no arguments: {}' merely restates the empty schema and adds no meaning, but nothing is required of it either.
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 names the exact data set (PERM and prevailing wage queue processing times) and enumerates the specific fields returned: current working month, average days to decision, and pending case counts by filing month. That content is unmistakably distinct from siblings like visa_bulletin and lookup_case, so an agent can route without opening any 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?
The phrase 'DOL's processing times today' implies the usage context, but there is no explicit when-to-use or when-not-to-use guidance, and no mention of the plausible alternative estimate_decision, which also deals with decision timing. The agent must infer the boundary itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_sponsorsFind an employer, law firm or occupationARead-onlyIdempotentInspect
Search DOL's PERM records by name. Returns each match's record and the slug that employer_profile takes. Example: {"kind": "employer", "name": "Microsoft"}.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | One of "employer", "law firm" or "occupation" (singular). | |
| name | Yes | Part of the name, 2 to 120 characters, e.g. Microsoft. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so safety is covered. The description adds value by disclosing the return shape ('each match's record and the slug') and confirming it is a multi-match lookup rather than an exact resolution.
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?
Three short sentences, front-loaded with the verb and resource, followed by return content and a concrete example. No filler and the example earns its place by disambiguating input shape.
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?
There is no output schema, so the description reasonably compensates by naming what each match contains (record + slug). For a 2-parameter search with 100% schema coverage, this is close to complete; only exact-match vs fuzzy behavior is left implicit.
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 both parameters (including the kind enum and name length bounds) are already fully documented in the schema. The description's JSON example restates the input format rather than adding new semantics, so the baseline of 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?
States a specific verb (Search) and resource (DOL's PERM records) scoped by name, which cleanly distinguishes it from siblings like employer_profile and lookup_case. The title's broader 'employer, law firm or occupation' is narrowed into the actual searchable entity.
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?
Implies the workflow context by stating the result includes 'the slug that employer_profile takes', effectively routing the agent to the follow-up tool. It does not explicitly state when NOT to use it (e.g., when you already have a slug), so it stops short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
visa_bulletinVisa bulletinARead-onlyIdempotentInspect
A visa bulletin's employment and family final action and dates for filing charts, as printed. The newest by default; months back to June 2005. Examples: {} for the newest, or {"month": "2026-10"}.
| Name | Required | Description | Default |
|---|---|---|---|
| month | No | YYYY-MM. Leave out for the newest. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnly, idempotent, non-destructive, closed-world, so the safety profile is already covered. The description adds the historical range (back to June 2005) and default behavior, which is useful operational context, but omits return format details or any rate/availability constraints.
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?
Two sentences with no filler, and the default/range information is front-loaded. The example snippets are compact and directly actionable.
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 single optional-parameter read-only tool with full schema coverage and no output schema, the description supplies the necessary default behavior, historical range, and usage examples. It could be stronger with a brief hint about the return structure or pagination, but is largely complete.
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 schema description coverage is 100% and fully documents the single maxLength:7 month parameter in YYYY-MM format. The description's examples reinforce this but add no new syntax or constraint beyond what is already in the schema; 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 states a specific resource and its scope (employment and family final action and dates for filing charts) and notes the default (newest) and range (back to June 2005). It doesn't differentiate from the sibling tools like queue_status, but those appear to be distinct resources enough that confusion is unlikely.
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?
It provides example invocations that clarify when to pass no arguments versus a month. However, it doesn't articulate when an agent should use this tool versus alternatives like queue_status or estimate_decision, leaving usage inferential.
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
employer_profile - First observed
estimate_decision - First observed
lookup_case - First observed
queue_status - First observed
search_sponsors - First observed
visa_bulletin
Related MCP Connectors
USCIS fees, processing times, form editions, alerts, and the Visa Bulletin. Not legal advice.
H-1B MCP — US H-1B visa sponsorship & wage data from DOL Labor Condition Application (LCA)…
PERM MCP — US green-card labor certification data from DOL PERM (Program Electronic Review…
H1B visa salary disclosures + compensation benchmarks — real numbers, not estimates.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceProvides US H-1B visa sponsorship, LCA wages, and top sponsors by role for recruiting and talent data.201 npmMIT
- 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 gradedqualityCmaintenanceEnables querying U.S. Department of Labor PERM (ETA-9089) disclosure data to check whether an employer sponsors green cards, see disclosed offered-wage statistics for a role, employer, city, or year, and rank employers by filing count for a given job title. Results include coverage status so callers can distinguish a genuine negative from data that has not loaded or is outside the mirrored fiscal-year window.147 npmMIT
- AlicenseNot gradedqualityDmaintenanceEnables searching and analyzing H-1B visa sponsoring companies using U.S. Department of Labor data. Supports filtering by job role, location, and salary with natural language queries to find direct employers and export results.17MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.