Probative legal-marketing data
Server Details
Free, cited reference data for US law-firm marketing: lawyer advertising rules for all 50 states and DC, bar ad-filing fees, contingency fee caps, ethics opinions, ad-platform policies for legal services, federal MDL dockets and California courts. Every answer carries its source and the date it was checked. Read-only, no sign-in, CC BY 4.0. Published by Probative Growth, a marketing agency for law firms. Not legal advice.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 18 tools
The rule-oriented tools (get_rule, get_state_rules, search_rules, compare_states, list_rule_changes) have reasonably distinct jobs, but each dataset also gets both a bespoke tool (get_attorney_fee_caps, get_ca_court_filings, list_mdl_dockets, search_ethics_opinions, get_ad_platform_policies, get_spanish_demand_supply) and a generic access path (data_lookup, data_compare, data_search over the same datasets), so an agent can plausibly reach the same record two ways. get_ad_filing_requirements also overlaps with the ad-filing cells returned by get_state_rules. Descriptions do disambiguate in places (e.g. 'for lawyer advertising rules use search_rules', 'a lookup, not a fee calculator'), which keeps it from being worse.
Everything is snake_case, but the verb taxonomy is mixed: get_*, list_*, search_*, compare_*, a noun-first data_* family, plus bare 'cite' and 'whats_new'. The split between get_rule/get_state_rules and data_lookup for comparable resource fetches makes the pattern less predictable than it could be.
18 tools is on the heavy side and is inflated by the parallel bespoke-vs-generic access layer over seven datasets; the generic data_lookup/data_compare/data_search trio partially duplicates the named per-dataset tools. The scope (seven distinct datasets plus meta/citation tools) does justify a large surface, so it isn't gratuitous.
The surface covers the full lifecycle: discovery (list_datasets), retrieval (lookup/get), search, comparison, citation (cite), and change tracking (whats_new, list_rule_changes). Minor gaps exist—no dedicated tool to enumerate valid keys/jurisdictions/topics per dataset or to bulk-export a dataset—but agents can work around these via list_datasets and search.
Available Tools
18 toolsciteHow to citeARead-onlyIdempotentInspect
The citation sentence, credit line, DOI and URL to cite: for a whole dataset, for one state, or for one rule cell (dataset "rules" with state and topic), or for one record id in another dataset. CC BY 4.0 asks for credit and a link.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Other datasets: the record id | |
| state | No | rules only: two-letter code, or DC | |
| topic | No | rules only: topic key, e.g. filing | |
| dataset | No | Dataset id (list_datasets shows them) | rules |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | Yes | Credit line (attribution), citation, DOI, version, license (CC BY 4.0), disclaimer, notice and the page to cite |
| nextCursor | No | Pass as `cursor` to get the next page; null on the last page |
| provenance | Yes | Where this came from: the publisher of the dataset, the dataset and its version DOI, the record id, the original source (who published it and its URL), the day that source was last checked, and when this answer was retrieved |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint=false, so the safety profile is covered. The description adds the licensing context and the shape of the returned values, but says nothing about auth, rate limits, or fallback behavior when a requested scope has no citation.
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, front-loaded with the deliverable and then the scope variants; the licensing note at the end justifies the call. Dense but every clause carries information — no filler.
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 not be spelled out, and the annotations cover safety. The description fills the remaining need — what scopes exist and how to select them — leaving only minor gaps like the default dataset behavior.
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 baseline is 3, but the description earns credit above it by explaining how parameters combine: state+topic only apply to dataset 'rules', while id applies to 'other datasets'. That dependency is not stated in the per-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 description names a concrete deliverable — 'citation sentence, credit line, DOI and URL' — which no sibling tool (data_lookup, get_rule, search_rules) produces, so the agent can tell it apart. The phrasing is slightly compressed ('to cite: for a whole dataset…'), but the verb+resource is unambiguous.
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 enumerates the four calling modes (whole dataset, one state, one rule cell with state+topic, one record id) and attaches a reason to call it — 'CC BY 4.0 asks for credit and a link'. It does not explicitly exclude alternatives, but the mode list effectively maps intent to parameters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_statesCompare one rule across statesARead-onlyIdempotentInspect
One rule topic side by side across several states (or all 50 states and DC when states is left out), each with its status, sources and cell URL. Not legal advice.
| Name | Required | Description | Default |
|---|---|---|---|
| topic | Yes | filing: Ad filing or review; requiredContent: What each ad must include; waitingPeriod: Waiting period for targeted injury contact; claims: Results, testimonials and “specialist” claims; referral: Referral services and lead generators; language: Ads in Spanish and other languages; recording: Call-recording consent; texting: Texting and telemarketing law; privacy: Privacy and health-data law | |
| states | No | Two-letter codes. Leave out for every jurisdiction. |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | Yes | Credit line (attribution), citation, DOI, version, license (CC BY 4.0), disclaimer, notice and the page to cite |
| nextCursor | No | Pass as `cursor` to get the next page; null on the last page |
| provenance | Yes | Where this came from: the publisher of the dataset, the dataset and its version DOI, the record id, the original source (who published it and its URL), the day that source was last checked, and when this answer was retrieved |
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 bar is lower; the description still contributes by stating the response shape (status, sources, cell URL) and the default all-jurisdiction scope. The 'Not legal advice' note sets a useful expectation for how results should be presented.
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 carries the operation, scope default, and return contents, with the disclaimer tacked on briefly. No wasted phrasing.
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, the description needn't detail return values, yet it summarizes them anyway; combined with the enum documentation and the all-states default, an agent has enough to call it correctly. Only the relationship to sibling tools remains unaddressed.
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%, with the enum values and state-code formats fully documented in the schema, so baseline behavior is 3. The description's statement that omitting `states` yields all 50 states plus DC restates and reinforces the schema's 'leave out for every jurisdiction' rather than adding new syntax or constraints.
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 concrete operation on a concrete resource: one rule topic compared side by side across several states, with status, sources and cell URL. An agent can distinguish this from single-state lookups like get_rule or get_state_rules by the cross-state comparison framing, 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?
The description covers the key usage decision point: omitting `states` compares all 50 states and DC. It does not say when to prefer this over get_state_rules or data_compare, so routing between siblings is left to inference from the names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
data_compareCompare keys in a datasetARead-onlyIdempotentInspect
The records for up to 10 keys of one dataset side by side. Datasets and their keys: ca-courts (area, e.g. ALAMEDA, ALPINE, AMADOR, BUTTE); fees (jurisdiction, e.g. AK, AL, AR, AZ); filing (jurisdiction, e.g. AK, AL, AR, AZ); language (area, e.g. 10180, 10420, 10500, 10540); mdl (mdl, e.g. MDL-1358, MDL-1570, MDL-1663, MDL-1720); opinions (jurisdiction, e.g. ABA, AK, AL, AZ); platforms (platform, e.g. CHATGPT-ADS, GOOGLE-ADS, GOOGLE-LSA, LINKEDIN-ADS). Not legal advice.
| Name | Required | Description | Default |
|---|---|---|---|
| keys | Yes | ||
| dataset | Yes | Dataset id (list_datasets describes each one) |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | Yes | Credit line (attribution), citation, DOI, version, license (CC BY 4.0), disclaimer, notice and the page to cite |
| nextCursor | No | Pass as `cursor` to get the next page; null on the last page |
| provenance | Yes | Where this came from: the publisher of the dataset, the dataset and its version DOI, the record id, the original source (who published it and its URL), the day that source was last checked, and when this answer was retrieved |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare a safe, idempotent, closed-world read, so the description only needs incremental context — and it supplies real constraints: keys must all belong to a single dataset and are capped at 10. It also enumerates valid datasets and key formats, which reduces failed calls; return shape is left to the output schema, which is appropriate.
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 core action leads in one sentence, followed by a compact enumeration that earns its space by encoding valid key formats. The trailing 'Not legal advice' is boilerplate but negligible.
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 2-parameter read tool with an output schema and full annotation coverage, the description covers the action, the scoping limit, and per-dataset key syntax. Return values are handled by the output schema, so nothing an agent needs before calling 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 only 50% and the `keys` array carries no inline description, so the description compensates by naming the key field per dataset (area, jurisdiction, mdl, platform) and giving concrete example values for each. That meaningfully exceeds the bare enum list in the dataset param.
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 (compare) and resource (the records for up to 10 keys of one dataset) with the key scoping constraint front-loaded. It is distinguishable from data_lookup/data_search by the 'side by side, up to 10 keys' framing, though it never names those siblings to make the contrast explicit.
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 by 'up to 10 keys ... side by side', so an agent can infer this is for multi-item comparison rather than single lookups. However, with crowded siblings like data_lookup, data_search, and compare_states, the description gives no explicit when-to-use/when-not guidance or routing rules.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
data_lookupLook up one key in a datasetARead-onlyIdempotentInspect
The records for one key in one dataset, with sources, status and dates. Datasets and their keys: ca-courts (area, e.g. ALAMEDA, ALPINE, AMADOR, BUTTE); fees (jurisdiction, e.g. AK, AL, AR, AZ); filing (jurisdiction, e.g. AK, AL, AR, AZ); language (area, e.g. 10180, 10420, 10500, 10540); mdl (mdl, e.g. MDL-1358, MDL-1570, MDL-1663, MDL-1720); opinions (jurisdiction, e.g. ABA, AK, AL, AZ); platforms (platform, e.g. CHATGPT-ADS, GOOGLE-ADS, GOOGLE-LSA, LINKEDIN-ADS). Not legal advice.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | The key, e.g. TX, google-ads, 19100, MDL-2738 | |
| dataset | Yes | Dataset id (list_datasets describes each one) |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | Yes | Credit line (attribution), citation, DOI, version, license (CC BY 4.0), disclaimer, notice and the page to cite |
| nextCursor | No | Pass as `cursor` to get the next page; null on the last page |
| provenance | Yes | Where this came from: the publisher of the dataset, the dataset and its version DOI, the record id, the original source (who published it and its URL), the day that source was last checked, and when this answer was retrieved |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds only that results carry sources, status and dates plus a 'Not legal advice' disclaimer, and says nothing about behavior when a key is absent or invalid.
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 return shape is front-loaded in one clause, then the dataset/key table follows compactly. The long example lists are dense but each entry supports a distinct enum value, so little 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 an output schema present, the description needn't describe return values, and annotations cover safety. The remaining gap is not-found behavior and key case sensitivity, which an agent would still have to discover empirically.
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%, but the description goes beyond it by mapping each dataset to its key field and realistic example values (ca-courts -> area like ALAMEDA; mdl -> MDL-1358), which the generic schema example does not. This meaningfully reduces the chance of a malformed key.
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 ('The records for one key in one dataset') and enumerates the dataset scope, so an agent can tell it apart from data_search and data_compare. It does not explicitly name those siblings as alternatives, which keeps it 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?
It clearly implies the usage context: you must already know the exact dataset and key, and it supplies the valid key vocabulary per dataset. It stops short of stating when to prefer this over data_search or list_datasets.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
data_searchSearch the datasetsARead-onlyIdempotentInspect
Keyword search (deterministic, no model) across ca-courts, fees, filing, language, mdl, opinions, platforms, or only the datasets named. Returns the best-matching records with their dataset, sources and status. For lawyer advertising rules use search_rules. Not legal advice.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| datasets | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | Yes | Credit line (attribution), citation, DOI, version, license (CC BY 4.0), disclaimer, notice and the page to cite |
| nextCursor | No | Pass as `cursor` to get the next page; null on the last page |
| provenance | Yes | Where this came from: the publisher of the dataset, the dataset and its version DOI, the record id, the original source (who published it and its URL), the day that source was last checked, and when this answer was retrieved |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds critical behavioral details beyond the annotations, noting it is a '(deterministic, no model)' search and what the results contain (dataset, sources, status). It also includes the necessary legal disclaimer ('Not legal advice').
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 text is highly efficient. It manages to cover scope, constraints, methodology, and alternative tools in a few dense, informative sentences without repetition.
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?
The description provides enough context for an agent to decide whether this tool is appropriate for the user's request or if a sibling tool (like search_rules) should be used. It is highly effective despite the lack of detailed output formatting.
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?
Because schema description coverage is 0%, the description must compensate. It successfully lists all allowed dataset types within the scope of the tool, which is vital context that the structured schema alone does not convey.
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 is perfectly clear, defining the action (keyword search) and the specific resource scope (ca-courts, fees, filing, etc.). It clearly states that it searches across datasets and provides direct instruction to use a specific sibling tool for rules.
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 an explicit negative guideline: 'For lawyer advertising rules use search_rules.' This is the gold standard for usage guidelines, directly telling the agent which tool to use instead of this one.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ad_filing_requirementsBar ad filing requirements and fees for one stateARead-onlyIdempotentInspect
Whether a state's bar requires lawyers to file or submit ads for review, which ads, when (before or after first use), the standard, expedited and late fees in US dollars, the portal or method, how long to keep copies, and the rule cited. One record per state or DC, read from the state's rules of professional conduct and bar pages, each with its sources and the day they were read. Results summarize public sources for marketing planning; they are not legal advice.
| Name | Required | Description | Default |
|---|---|---|---|
| state | Yes | Two-letter code (TX) or DC; full names (Texas) also work |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | Yes | Credit line (attribution), citation, DOI, version, license (CC BY 4.0), disclaimer, notice and the page to cite |
| nextCursor | No | Pass as `cursor` to get the next page; null on the last page |
| provenance | Yes | Where this came from: the publisher of the dataset, the dataset and its version DOI, the record id, the original source (who published it and its URL), the day that source was last checked, and when this answer was retrieved |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond standard annotations by detailing the source of the data (rules of professional conduct, bar pages), the scope (one record per state/DC), and providing a critical caveat that the results are for 'marketing planning' and 'not legal advice'.
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 description is comprehensive but densely packed into a single, lengthy paragraph. While efficient, it sacrifices immediate scannability for thoroughness.
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?
It is extremely complete, covering the exact data points returned (fees, timelines, rules cited), the data's origin, and its intended legal status/limitations. No critical context is missing for the agent to use it successfully.
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?
With 100% schema coverage, the description acts as powerful semantic reinforcement. It clarifies the accepted formats for the 'state' parameter—specifically two-letter codes or full names—adding useful usage context.
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 purpose is highly specific: retrieving bar ad filing requirements and fees. It clearly distinguishes itself from general state rule lookups by focusing on advertising regulations for one state at a time.
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?
While it does not explicitly name sibling tools or provide explicit 'when/when-not' rules, its specificity implicitly guides the user to use this tool whenever they specifically require bar ad regulatory data versus general ethics searches.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ad_platform_policiesAd-platform policies for law-firm adsARead-onlyIdempotentInspect
The published advertising policies that apply to law-firm ads on Google Ads, Google Local Services Ads, Microsoft Advertising, Meta (Facebook and Instagram), LinkedIn, YouTube and ChatGPT ads: who may advertise, restricted categories (bail bonds, debt relief, legal services verification), creative, targeting, measurement and billing rules, each quoted from the platform's own policy page with the day it was read. Paginated with cursor. Results summarize public sources for marketing planning; they are not legal advice.
| Name | Required | Description | Default |
|---|---|---|---|
| area | No | Optional: one policy area | |
| limit | No | Records per page (1 to 25) | |
| query | No | Words to match, e.g. "bail bonds" or "verification" | |
| cursor | No | The nextCursor from the previous page; leave out for the first page | |
| platform | No | Optional: one platform key |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | Yes | Credit line (attribution), citation, DOI, version, license (CC BY 4.0), disclaimer, notice and the page to cite |
| nextCursor | No | Pass as `cursor` to get the next page; null on the last page |
| provenance | Yes | Where this came from: the publisher of the dataset, the dataset and its version DOI, the record id, the original source (who published it and its URL), the day that source was last checked, and when this answer was retrieved |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the description doesn't need to repeat safety. It adds real context beyond them: cursor pagination, that each rule is quoted from the platform's own page with the date it was read (freshness/provenance), and a scope disclaimer that output is not legal advice.
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 scope statement is front-loaded and dense with specifics, followed by two short sentences for pagination and the disclaimer. It is a long sentence but nearly every clause (platform list, categories, quoted-with-date) carries information an agent uses; only the exhaustive platform enumeration borders on excess.
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, the description needn't explain return values, and annotations cover the safety profile. It still supplies provenance, pagination and disclaimer context, so the remaining gap is only the absence of guidance on how query/area/platform interact when combined or how to choose this over sibling rule-lookup tools.
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 of the five parameters is documented in the schema with enums, bounds and a cursor definition. The description only reinforces pagination ('paginated with cursor') and the area/platform coverage, adding nothing the schema does not already provide, so 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 names the exact resource (published advertising policies for law-firm ads), enumerates the covered platforms and policy areas, and describes provenance. Nothing in the sibling list covers ad-platform policy, so an agent can route here 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?
It implies the context of use ('summarize public sources for marketing planning; they are not legal advice'), which is a useful framing. But it gives no explicit when-to-use vs. when-not guidance and does not name an alternative such as get_ad_filing_requirements or search_rules for agents that actually want compliance rules rather than platform policy.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_attorney_fee_capsLegal limits on attorney fees in one jurisdictionARead-onlyIdempotentInspect
Statutory and agency limits on what a lawyer may charge: workers' compensation in every state and DC; Social Security (SSDI and SSI), the Federal Tort Claims Act, VA, Longshore and other federal programs (jurisdiction US); medical-malpractice and general contingency-fee rules where read. Each record gives the cap type, percent, dollar cap or sliding scale, what it applies to, who approves the fee, the statute or rule cited with a quote, and the day it was read. A lookup, not a fee calculator. Results summarize public sources for marketing planning; they are not legal advice.
| Name | Required | Description | Default |
|---|---|---|---|
| program | No | Optional: only this program | |
| jurisdiction | Yes | Two-letter state code, DC, or US for federal programs; full state names also work |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | Yes | Credit line (attribution), citation, DOI, version, license (CC BY 4.0), disclaimer, notice and the page to cite |
| nextCursor | No | Pass as `cursor` to get the next page; null on the last page |
| provenance | Yes | Where this came from: the publisher of the dataset, the dataset and its version DOI, the record id, the original source (who published it and its URL), the day that source was last checked, and when this answer was retrieved |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive, closed-world lookup behavior. The description adds provenance ('public sources', 'day it was read'), coverage caveats ('where read'), and scope boundaries ('not a fee calculator', 'not legal advice'), though it does not discuss auth or rate limits.
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?
Four sentences, front-loaded with the scope and coverage list, with no filler. The first sentence is a dense semicolon-separated list that could be easier to scan, but the overall structure is efficient.
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 annotations covering safety and an output schema covering record structure, the description supplies enough scope, provenance, and caveats to call the tool correctly. The main gap is explicit sibling routing, though that is primarily a usage-guidelines concern.
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. The description clarifies that federal programs use jurisdiction US and workers' comp covers every state and DC, and notes 'where read' coverage for med-mal and contingency rules, but it does not explicitly explain the optional program parameter or add much 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?
Identifies the resource precisely as statutory and agency limits on attorney fees, then enumerates covered programs such as workers' comp, SSDI/SSI, FTCA, VA, Longshore, med-mal, and contingency rules. It does not explicitly name a sibling alternative, but the subject matter is clearly distinct from generic rule-lookup tools.
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 clear context with 'A lookup, not a fee calculator' and caveats such as 'not legal advice' and 'where read'. It does not explicitly say when to use this instead of get_state_rules, search_rules, or other siblings, so it stops short of full alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ca_court_filingsCalifornia court filings in one countyARead-onlyIdempotentInspect
Cases filed in one California county's superior court (or CA for the whole state) in fiscal year 2024-25, by case type: civil (including motor-vehicle injury and other injury and wrongful death), criminal, family, juvenile, probate, mental health and appeals, each with the prior year and the Judicial Council of California Court Statistics Report table it came from. Counts are cases, not people or clients. Results summarize public sources for marketing planning; they are not legal advice.
| Name | Required | Description | Default |
|---|---|---|---|
| group | No | Optional: one group of case types | |
| county | Yes | County name ("Los Angeles", "san-diego") or CA for the statewide row |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | Yes | Credit line (attribution), citation, DOI, version, license (CC BY 4.0), disclaimer, notice and the page to cite |
| nextCursor | No | Pass as `cursor` to get the next page; null on the last page |
| provenance | Yes | Where this came from: the publisher of the dataset, the dataset and its version DOI, the record id, the original source (who published it and its URL), the day that source was last checked, and when this answer was retrieved |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive and closed-world, so the description focuses on what annotations cannot express: the fixed fiscal-year window, the fact counts are cases rather than people or clients, the Judicial Council source tables, and the not-legal-advice caveat. That is meaningful added context beyond the structured fields.
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 leads with the resource and scope, then layers detail. It is dense but every clause (case types, source tables, case-vs-people, disclaimer) carries information; the taxonomical parenthetical is the only slightly overstuffed part.
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 and rich annotations, the description needn't explain return values, and it still covers source provenance, unit of count, and a legal disclaimer. The one remaining gap is guidance on pairing with sibling data tools.
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 county parameter is well documented, including the 'CA' statewide value, so the schema already does the heavy lifting. The description elaborates the case-type taxonomy (adding motor-vehicle injury, wrongful death, mental health) that partially overlaps the group enum, so it adds only marginal value.
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-like resource (cases filed in one California county's superior court) with scope (fiscal year 2024-25) and a case-type breakdown, so an agent knows exactly what data comes back. It does not name or contrast any sibling tool, but the resource is distinctive 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?
Usage is only implied: the description notes results are for marketing planning and are not legal advice, which hints at an appropriate context but never says when to pick this over compare_states, data_lookup, or data_search. No exclusions or alternatives are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ruleOne lawyer advertising rule in one stateBRead-onlyIdempotentInspect
One state's rule on one topic: the plain-English text, status (P/S/D/U), note, sources with dates, the cell URL and a one-sentence citation. Not legal advice.
| Name | Required | Description | Default |
|---|---|---|---|
| state | Yes | Two-letter code (TX), or DC. Full names (Texas) also work. | |
| topic | Yes | filing: Ad filing or review; requiredContent: What each ad must include; waitingPeriod: Waiting period for targeted injury contact; claims: Results, testimonials and “specialist” claims; referral: Referral services and lead generators; language: Ads in Spanish and other languages; recording: Call-recording consent; texting: Texting and telemarketing law; privacy: Privacy and health-data law |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | Yes | Credit line (attribution), citation, DOI, version, license (CC BY 4.0), disclaimer, notice and the page to cite |
| nextCursor | No | Pass as `cursor` to get the next page; null on the last page |
| provenance | Yes | Where this came from: the publisher of the dataset, the dataset and its version DOI, the record id, the original source (who published it and its URL), the day that source was last checked, and when this answer was retrieved |
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 useful return-field context and a "Not legal advice" caveat, but leaves status codes P/S/D/U unexplained and does not note behavior for missing or invalid state/topic combinations.
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 tightly written sentences front-load the resource and scope. The field list is slightly redundant given an output schema and the unexplained status abbreviations introduce minor noise.
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 fully documented parameters, an output schema, and annotations covering safety behavior, the description supplies enough to call the tool correctly. Its main gap is selection guidance against overlapping siblings, not execution completeness.
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%, with the state format and every topic enum value explicitly described in the schema. The description adds no parameter meaning beyond what the schema already provides, so 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 clearly states the resource and scope: one state's rule on one topic, including the text, status, note, sources, URL and citation. It does not explicitly distinguish itself from close siblings such as get_state_rules or search_rules, which costs it the fifth point.
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 implies an exact single-cell lookup but gives no explicit when-to-use guidance, exclusions, or alternatives. An agent must infer whether to use this versus get_state_rules or search_rules.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_spanish_demand_supplySpanish-language legal demand and lawyer supply in one areaARead-onlyIdempotentInspect
For one US state, DC, the US, or a metro area: people aged 5 and over, Spanish speakers, Spanish speakers who speak English less than very well, employed lawyers, Spanish-speaking lawyers, and how many Spanish speakers with limited English there are per Spanish-speaking lawyer. U.S. Census Bureau American Community Survey 5-year estimates, each with its margin of error, table and reliability flag. Results summarize public sources for marketing planning; they are not legal advice.
| Name | Required | Description | Default |
|---|---|---|---|
| area | Yes | A state code (TX), DC, US, a metro code (26420), or a metro name ("Houston") |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | Yes | Credit line (attribution), citation, DOI, version, license (CC BY 4.0), disclaimer, notice and the page to cite |
| nextCursor | No | Pass as `cursor` to get the next page; null on the last page |
| provenance | Yes | Where this came from: the publisher of the dataset, the dataset and its version DOI, the record id, the original source (who published it and its URL), the day that source was last checked, and when this answer was retrieved |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive, closed-world behavior, so the safety bar is low. The description adds genuine context beyond that: the source (ACS 5-year estimates), the presence of margins of error, table identifiers and reliability flags per figure, and an explicit 'not legal advice' caveat. The one thing missing is any note on result size or typical latency, but for a read-only statistical 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?
Scope is front-loaded in the first clause, the metric list follows, and provenance plus the disclaimer close it out — a logical order with little filler. The metric enumeration is dense but every item maps to a distinct returned figure, so it earns its length.
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, the description needn't enumerate return values, and it wisely spends its words instead on data vintage, error margins, and reliability flags, which an agent needs to interpret results responsibly. Annotations cover the safety profile. Nothing essential is missing for a one-parameter read-only statistical tool.
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% and the single 'area' parameter already documents accepted forms (state code, DC, US, metro code, metro name). The description's 'For one US state, DC, the US, or a metro area' reinforces the singular-area constraint but adds no syntax, format, or ambiguity resolution beyond 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 names a very specific resource — Spanish-speaker counts, limited-English counts, employed and Spanish-speaking lawyers, and the ratio between them — for a single geography. An agent can tell exactly what data comes back. It loses the top mark only because the retrieval verb is implied by the name rather than stated, and no sibling is named (though none of the listed siblings overlaps this niche).
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 opening phrase 'For one US state, DC, the US, or a metro area' sets the input scope, and the closing sentence signals the intended use (marketing planning, not legal advice). However, it never says when to prefer this over data_lookup, data_compare, or compare_states, nor does it state any exclusion or prerequisite. Usage is inferable but not guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_state_rulesLawyer advertising rules for one stateBRead-onlyIdempotentInspect
Every lawyer advertising rule we track for one US state or DC (ad filing, required content, waiting periods, claims and testimonials, referral and lead rules, other languages, call recording, texting law, privacy law), each with its plain-English text, status (P primary source, S secondary, D ABA model default, U open question), sources with the days they were read, and the state page URL to cite. Not legal advice.
| Name | Required | Description | Default |
|---|---|---|---|
| state | Yes | Two-letter code (TX), or DC. Full names (Texas) also work. |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | Yes | Credit line (attribution), citation, DOI, version, license (CC BY 4.0), disclaimer, notice and the page to cite |
| nextCursor | No | Pass as `cursor` to get the next page; null on the last page |
| provenance | Yes | Where this came from: the publisher of the dataset, the dataset and its version DOI, the record id, the original source (who published it and its URL), the day that source was last checked, and when this answer was retrieved |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so the safety profile is covered. The description adds useful interpretive context — the P/S/D/U status legend, the fact that sources carry read dates, and a cite-ready state page URL — but says nothing about coverage gaps (states with no rules), volume, or pagination.
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 resource is front-loaded correctly, but the single overlong sentence is bloated by a long parenthetical enumeration of rule categories that the output schema already surfaces. The status-code legend and citation note earn their place; the category list largely does not.
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 one-parameter read tool with rich annotations and an output schema, the description supplies scope, contents, status-code meaning, and a legal disclaimer — enough for correct invocation. The missing piece is routing guidance against siblings, which is an adjacent-dimension gap rather than a completeness failure.
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 documents that two-letter codes, 'DC', and full names are accepted. The description only reinforces 'one US state or DC', adding no new syntax or edge-case detail beyond the schema, so 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 clearly states the resource: every lawyer advertising rule tracked for one US state or DC, plus the facets returned (filing, waiting periods, testimonials, etc.). It is specific about scope but never contrasts itself with close siblings like get_rule, search_rules, or compare_states, so an agent must infer which retrieval tool to pick.
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 explicit when-to-use guidance and no named alternatives, despite many overlapping siblings (get_rule, search_rules, compare_states, data_lookup). The only constraint given is the closing 'Not legal advice' disclaimer; the agent is left to infer that this is the 'full dump for one state' option.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_datasetsList the datasetsARead-onlyIdempotentInspect
Every public dataset on this server: what it covers, its version, DOI, license (CC BY 4.0), credit line, last-checked date, the page to cite, its files and its tools.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | Yes | Credit line (attribution), citation, DOI, version, license (CC BY 4.0), disclaimer, notice and the page to cite |
| nextCursor | No | Pass as `cursor` to get the next page; null on the last page |
| provenance | Yes | Where this came from: the publisher of the dataset, the dataset and its version DOI, the record id, the original source (who published it and its URL), the day that source was last checked, and when this answer was retrieved |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint=false and destructiveHint=false, so the safety profile is covered. The description adds content-level disclosure the annotations can't: each record includes license (CC BY 4.0), credit line, last-checked date and the page to cite, which tells the agent this is a citable, provenance-rich listing. It stops short of stating ordering or pagination behavior.
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, front-loaded with the scope ('Every public dataset on this server') and then a compact colon list of included fields. No filler, no repetition of the title.
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 the description need not explain return values, yet it usefully previews the payload categories. For a zero-parameter read-only listing this is nearly complete; the only missing piece is whether the result is ordered or paginated when the catalog grows.
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 of 4 applies and there is no parameter syntax to compensate for. The description correctly spends no words on input arguments.
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 verb and resource — it returns every public dataset on the server — and enumerates the fields each entry carries (coverage, version, DOI, license, credit, files, tools). That is enough to distinguish it from siblings like mdl_search or cite, though it doesn't explicitly say so. The purpose is unambiguous without opening the 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 word 'Every' implies this is the full-catalog enumeration and therefore the natural entry point, but no when-to-use condition or alternative is named. With siblings such as mdl_search and mdl_lookup present, an explicit contrast ('use this to discover datasets, then mdl_lookup for details') would have removed the inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_mdl_docketsFederal MDL dockets by actions pendingARead-onlyIdempotentInspect
Federal multidistrict litigation (MDL) dockets from the Judicial Panel on Multidistrict Litigation's monthly pending-dockets reports, largest first: the docket number, title, court district, actions pending on the report date, total actions, and the change over the past year. Filter by words in the title (for example "hair relaxer" or "talcum") or ask for one docket (MDL-2738) to get its monthly history since 2019. Counts are court actions, not people. Paginated with cursor. Results summarize public sources for marketing planning; they are not legal advice.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Records per page (1 to 25) | |
| query | No | Words in the docket title or court, e.g. "hernia mesh" | |
| cursor | No | The nextCursor from the previous page; leave out for the first page | |
| docket | No | One docket, e.g. MDL-2738 or 2738; returns its monthly history |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | Yes | Credit line (attribution), citation, DOI, version, license (CC BY 4.0), disclaimer, notice and the page to cite |
| nextCursor | No | Pass as `cursor` to get the next page; null on the last page |
| provenance | Yes | Where this came from: the publisher of the dataset, the dataset and its version DOI, the record id, the original source (who published it and its URL), the day that source was last checked, and when this answer was retrieved |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description adds real value on top: provenance (JPML monthly reports), ordering (largest first), a semantic caveat that counts are court actions not people, cursor pagination, and a not-legal-advice disclaimer. These are exactly the traits an agent cannot infer from structured fields.
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 and ordering are front-loaded, and the trailing sentences on filtering modes and caveats are each doing work. It is dense and slightly long for two sentences, but no clause is disposable.
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 and all four parameters documented, the description only needs to cover data provenance, result interpretation, and pagination behavior — and it covers all three. Nothing required for correct invocation 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 is 3, but the description adds meaning beyond the schema: it clarifies that the docket parameter returns that docket's monthly history since 2019 and supplies natural query examples. This meaningfully enriches interpretation of the two filter parameters.
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: lists federal MDL dockets from the JPML's monthly pending-dockets reports, with the returned fields enumerated (docket number, title, district, actions pending, total actions, year-over-year change). No sibling tool overlaps this domain, and the sorted-largest-first ordering further pins down its identity.
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 explicit operating modes: filter by title words (with concrete examples like "hair relaxer") or request a single docket (MDL-2738) for monthly history since 2019. It lacks an explicit when-not or a named alternative, but no sibling covers this material, so the guidance is practically sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_rule_changesConfirmed changes to the rulesBRead-onlyIdempotentInspect
Confirmed changes to the lawyer advertising rules dataset, newest first, each with its date, state, the cells it touched and its primary source. Optional since (YYYY-MM-DD).
| Name | Required | Description | Default |
|---|---|---|---|
| since | No | Only changes on or after this day |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | Yes | Credit line (attribution), citation, DOI, version, license (CC BY 4.0), disclaimer, notice and the page to cite |
| nextCursor | No | Pass as `cursor` to get the next page; null on the last page |
| provenance | Yes | Where this came from: the publisher of the dataset, the dataset and its version DOI, the record id, the original source (who published it and its URL), the day that source was last checked, and when this answer was retrieved |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so safety is covered. The description adds two real behavioral facts beyond that: results are ordered newest first and only 'confirmed' changes are returned — but it says nothing about volume, pagination, or whether the full history is returned unprompted.
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 front-loaded sentence that states dataset, ordering, and return fields, plus a short parenthetical on the lone parameter. The field enumeration lightly duplicates the output schema, but nothing is padded.
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, rich annotations, and a single fully-described parameter, the description covers what the agent needs. The remaining gap is the absence of any statement about result limits or whether a bare call returns the entire history.
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% and the single parameter is already documented as 'Only changes on or after this day' with a pattern. The description merely restates the YYYY-MM-DD format, adding no new semantics such as inclusive/exclusive edge behavior. 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?
Names the specific resource (confirmed changes to the lawyer advertising rules dataset) and its ordering (newest first), which is enough to tell it apart from search_rules, get_rule, or whats_new. It never states an explicit verb such as 'list', leaving the agent to infer the operation from the title, but the resource scope is unambiguous.
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?
No guidance on when to call this versus siblings like whats_new or list_datasets, which are the obvious near-neighbors. The only usage signal is the optional `since` note, so the agent must guess the context on its own.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_ethics_opinionsBar ethics opinions on lawyer marketingARead-onlyIdempotentInspect
Ethics opinions from the ABA and state bars on lawyer marketing: lead generators and pay-per-lead, fee sharing, online reviews, lawyer platforms, trade names, solicitation, social media, testimonials, AI tools and more. Each record gives the issuing body, opinion number, date issued, whether it is still in force, its holding in plain words, the rules it applies, what to do, and a link to the opinion. Filter by state, topic or words; newest first within equal matches. Paginated with cursor. Results summarize public sources for marketing planning; they are not legal advice.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Records per page (1 to 25) | |
| query | No | Words to match, e.g. "Google reviews" or "pay per lead" | |
| state | No | Two-letter code, DC, or ABA for the American Bar Association | |
| topic | No | ||
| cursor | No | The nextCursor from the previous page; leave out for the first page | |
| in_force_only | No | Leave out opinions marked withdrawn or superseded |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | Yes | Credit line (attribution), citation, DOI, version, license (CC BY 4.0), disclaimer, notice and the page to cite |
| nextCursor | No | Pass as `cursor` to get the next page; null on the last page |
| provenance | Yes | Where this came from: the publisher of the dataset, the dataset and its version DOI, the record id, the original source (who published it and its URL), the day that source was last checked, and when this answer was retrieved |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive, closed-world behavior, so the bar is lower. The description still adds real value: it enumerates what each record contains (issuing body, number, date, in-force status, holding, rules applied, action, link), specifies sort order and cursor pagination, and discloses that entries summarize public sources and are not legal advice — a caveat that matters for reliance.
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 resource and scope in the first clause, and the coverage/record-shape/sorting/pagination/disclaimer information is compressed into two sentences. The long topic enumeration partly duplicates the schema's topic enum, costing some efficiency without adding new call guidance.
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, the description need not explain return values, and annotations cover the safety profile. What remains — subject scope, filter axes, sort order, pagination, and the not-legal-advice caveat — is all present, leaving nothing material an agent needs before calling.
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 83%, so the baseline is 3; the description goes slightly beyond by explaining the filtering axes (state, topic, words) and the newest-first ordering within equal matches, which clarifies how matches rank. It does not explain query matching semantics (substring, fuzzy, multi-word AND/OR) or cursor lifecycle beyond 'paginated with cursor'.
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: ethics opinions from the ABA and state bars, scoped explicitly to lawyer marketing topics (lead generators, fee sharing, reviews, AI tools, etc.). The scope is precise enough to separate it from general rule lookups, but no sibling tool (e.g. search_rules, get_state_rules) is named as a contrast, so differentiation is inferential.
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 clear operating context — filter by state, topic or words, results are newest-first and intended for marketing planning, and explicitly not legal advice. It does not state when to prefer a sibling (e.g. search_rules for the underlying rules themselves) or any exclusions, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_rulesSearch the lawyer advertising rulesARead-onlyIdempotentInspect
Keyword search over every rule cell. States (names, or capitalized codes like TX) and topics (filing, disclaimer, waiting period, testimonials, referral, Spanish, recording, texting, privacy) named in the query narrow the results. Deterministic keyword matching, no AI. Returns the best-matching cells with sources. Not legal advice.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | For example "Florida filing fee" or "testimonials in New York" |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | Yes | Credit line (attribution), citation, DOI, version, license (CC BY 4.0), disclaimer, notice and the page to cite |
| nextCursor | No | Pass as `cursor` to get the next page; null on the last page |
| provenance | Yes | Where this came from: the publisher of the dataset, the dataset and its version DOI, the record id, the original source (who published it and its URL), the day that source was last checked, and when this answer was retrieved |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, closed-world behavior, and the description adds genuinely new context: matching is deterministic with no AI, results are best-matching cells with sources, and output is not legal advice. It does not cover truncation or what happens with zero matches, which keeps it off a 5.
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?
Four short sentences, front-loaded with the core action and the query-interpretation rule. The closing "Not legal advice" disclaimer is boilerplate but defensible given the legal-domain subject matter.
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 detail is unnecessary and the description still notes sources are included. The main residual gap is the undocumented limit parameter and no note on match quality or empty-result behavior.
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 only 50%: query has an example but limit has no description anywhere. The description partly compensates by explaining that state names/codes and named topics in the query narrow results, but says nothing about how limit bounds the result set.
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?
"Keyword search over every rule cell" gives a specific verb (keyword search) and resource (rule cells), which separates it from sibling getters like get_rule and get_state_rules. It does not explicitly contrast itself with those siblings, so an agent must infer the search-vs-fetch distinction.
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 description explains how the query is interpreted and hints at what kinds of inputs work, but never states when to choose this over get_rule, get_state_rules, or compare_states. Usage is implied by the "keyword search" framing rather than spelled out with alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
whats_newWhat changedARead-onlyIdempotentInspect
Confirmed changes across the datasets, newest first, each with its date, what changed and its source. Optional since (YYYY-MM-DD) and datasets filter.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| since | No | ||
| datasets | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | Yes | Credit line (attribution), citation, DOI, version, license (CC BY 4.0), disclaimer, notice and the page to cite |
| nextCursor | No | Pass as `cursor` to get the next page; null on the last page |
| provenance | Yes | Where this came from: the publisher of the dataset, the dataset and its version DOI, the record id, the original source (who published it and its URL), the day that source was last checked, and when this answer was retrieved |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that this is a safe, read-only, idempotent, non-destructive, closed-world read. The description adds useful behavioral detail beyond that: results are ordered newest first, represent 'confirmed' changes, and include date, change description, and source. It does not mention the default limit or pagination behavior, but with annotations and an output schema present, the bar is lower.
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 tight sentences with the core return description front-loaded and optional filters noted afterward. Every sentence 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?
The output schema and annotations cover return values and safety, and the description covers ordering and two of three filters. However, it does not mention `limit`, the default page size, or how this tool relates to the overlapping `list_rule_changes` sibling, leaving some invocation context incomplete.
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 0%, so the description must carry parameter meaning. It explains the `since` format and that `datasets` is a filter, but it omits `limit` entirely even though the schema defines a default of 25 and a maximum of 100. The description partially compensates but leaves one of three parameters unaddressed.
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 — confirmed dataset changes — and adds scope details: newest first, with date, change, and source. It is clear what the tool returns, but it does not explicitly distinguish itself from the likely overlapping sibling list_rule_changes.
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 by 'whats_new' and the optional since/datasets filters, but the description never says when to choose this tool over list_rule_changes or list_datasets. No exclusions or alternative-routing guidance are provided.
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.
18 tool updates
- Changed
cite6 fields changed- added
Input schema / properties / id / maxLengthAdded value: +120 - added
Input schema / properties / state / maxLengthAdded value: +40 - added
Input schema / properties / topic / maxLengthAdded value: +40 - added
Output schema / properties / nextCursorAdded value: +{ + "description": "Pass as `cursor` to get the next page; null on the last page", + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / provenanceAdded value: +{ + "description": "Where this came from: the publisher of the dataset, the dataset and its version DOI, the record id, the original source (who published it and its URL), the day that source was last checked, and when this answer was retrieved", + "properties": { + "citeUrl": { + "description": "The page to cite", + "type": [ + "string", + "null" + ] + }, + "dataset": { + "description": "Dataset id", + "type": "string" + }, + "datasetTitle": { + "type": "string" + }, + "dateChecked": { + "description": "YYYY-MM-DD the record was last checked against its source", + "type": [ + "string", + "null" + ] + }, + "doi": { + "description": "Version DOI", + "type": [ + "string", + "null" + ] + }, + "doiUrl": { + "type": [ + "string", + "null" + ] + }, + "line": { + "description": "The same facts as one sentence, to quote under an answer", + "type": "string" + }, + "publisher": { + "description": "Publisher of the dataset", + "type": "string" + }, + "recordId": { + "description": "Stable id of the record", + "type": [ + "string", + "null" + ] + }, + "retrievedAt": { + "description": "ISO 8601 time this answer was served", + "type": "string" + }, + "source": { + "description": "The original source: statute, rule, bar opinion, court report, agency table or platform policy", + "type": [ + "string", + "null" + ] + }, + "sourceKind": { + "description": "primary or secondary", + "type": [ + "string", + "null" + ] + }, + "sourceUrl": { + "type": [ + "string", + "null" + ] + }, + "status": { + "description": "P primary source, S secondary, D default (no specific rule found), U open question", + "type": [ + "string", + "null" + ] + }, + "version": { + "description": "Dataset version", + "type": "string" + } + }, + "required": [ + "publisher", + "dataset", + "version", + "retrievedAt" + ], + "type": "object" +} - changed
Output schema / requiredPrevious value: -[ - "meta" -]New value: +[ + "meta", + "provenance" +]
- Changed
compare_states3 fields changed- added
Output schema / properties / nextCursorAdded value: +{ + "description": "Pass as `cursor` to get the next page; null on the last page", + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / provenanceAdded value: +{ + "description": "Where this came from: the publisher of the dataset, the dataset and its version DOI, the record id, the original source (who published it and its URL), the day that source was last checked, and when this answer was retrieved", + "properties": { + "citeUrl": { + "description": "The page to cite", + "type": [ + "string", + "null" + ] + }, + "dataset": { + "description": "Dataset id", + "type": "string" + }, + "datasetTitle": { + "type": "string" + }, + "dateChecked": { + "description": "YYYY-MM-DD the record was last checked against its source", + "type": [ + "string", + "null" + ] + }, + "doi": { + "description": "Version DOI", + "type": [ + "string", + "null" + ] + }, + "doiUrl": { + "type": [ + "string", + "null" + ] + }, + "line": { + "description": "The same facts as one sentence, to quote under an answer", + "type": "string" + }, + "publisher": { + "description": "Publisher of the dataset", + "type": "string" + }, + "recordId": { + "description": "Stable id of the record", + "type": [ + "string", + "null" + ] + }, + "retrievedAt": { + "description": "ISO 8601 time this answer was served", + "type": "string" + }, + "source": { + "description": "The original source: statute, rule, bar opinion, court report, agency table or platform policy", + "type": [ + "string", + "null" + ] + }, + "sourceKind": { + "description": "primary or secondary", + "type": [ + "string", + "null" + ] + }, + "sourceUrl": { + "type": [ + "string", + "null" + ] + }, + "status": { + "description": "P primary source, S secondary, D default (no specific rule found), U open question", + "type": [ + "string", + "null" + ] + }, + "version": { + "description": "Dataset version", + "type": "string" + } + }, + "required": [ + "publisher", + "dataset", + "version", + "retrievedAt" + ], + "type": "object" +} - changed
Output schema / requiredPrevious value: -[ - "meta" -]New value: +[ + "meta", + "provenance" +]
- Changed
data_compare3 fields changed- added
Output schema / properties / nextCursorAdded value: +{ + "description": "Pass as `cursor` to get the next page; null on the last page", + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / provenanceAdded value: +{ + "description": "Where this came from: the publisher of the dataset, the dataset and its version DOI, the record id, the original source (who published it and its URL), the day that source was last checked, and when this answer was retrieved", + "properties": { + "citeUrl": { + "description": "The page to cite", + "type": [ + "string", + "null" + ] + }, + "dataset": { + "description": "Dataset id", + "type": "string" + }, + "datasetTitle": { + "type": "string" + }, + "dateChecked": { + "description": "YYYY-MM-DD the record was last checked against its source", + "type": [ + "string", + "null" + ] + }, + "doi": { + "description": "Version DOI", + "type": [ + "string", + "null" + ] + }, + "doiUrl": { + "type": [ + "string", + "null" + ] + }, + "line": { + "description": "The same facts as one sentence, to quote under an answer", + "type": "string" + }, + "publisher": { + "description": "Publisher of the dataset", + "type": "string" + }, + "recordId": { + "description": "Stable id of the record", + "type": [ + "string", + "null" + ] + }, + "retrievedAt": { + "description": "ISO 8601 time this answer was served", + "type": "string" + }, + "source": { + "description": "The original source: statute, rule, bar opinion, court report, agency table or platform policy", + "type": [ + "string", + "null" + ] + }, + "sourceKind": { + "description": "primary or secondary", + "type": [ + "string", + "null" + ] + }, + "sourceUrl": { + "type": [ + "string", + "null" + ] + }, + "status": { + "description": "P primary source, S secondary, D default (no specific rule found), U open question", + "type": [ + "string", + "null" + ] + }, + "version": { + "description": "Dataset version", + "type": "string" + } + }, + "required": [ + "publisher", + "dataset", + "version", + "retrievedAt" + ], + "type": "object" +} - changed
Output schema / requiredPrevious value: -[ - "meta" -]New value: +[ + "meta", + "provenance" +]
- Changed
data_lookup3 fields changed- added
Output schema / properties / nextCursorAdded value: +{ + "description": "Pass as `cursor` to get the next page; null on the last page", + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / provenanceAdded value: +{ + "description": "Where this came from: the publisher of the dataset, the dataset and its version DOI, the record id, the original source (who published it and its URL), the day that source was last checked, and when this answer was retrieved", + "properties": { + "citeUrl": { + "description": "The page to cite", + "type": [ + "string", + "null" + ] + }, + "dataset": { + "description": "Dataset id", + "type": "string" + }, + "datasetTitle": { + "type": "string" + }, + "dateChecked": { + "description": "YYYY-MM-DD the record was last checked against its source", + "type": [ + "string", + "null" + ] + }, + "doi": { + "description": "Version DOI", + "type": [ + "string", + "null" + ] + }, + "doiUrl": { + "type": [ + "string", + "null" + ] + }, + "line": { + "description": "The same facts as one sentence, to quote under an answer", + "type": "string" + }, + "publisher": { + "description": "Publisher of the dataset", + "type": "string" + }, + "recordId": { + "description": "Stable id of the record", + "type": [ + "string", + "null" + ] + }, + "retrievedAt": { + "description": "ISO 8601 time this answer was served", + "type": "string" + }, + "source": { + "description": "The original source: statute, rule, bar opinion, court report, agency table or platform policy", + "type": [ + "string", + "null" + ] + }, + "sourceKind": { + "description": "primary or secondary", + "type": [ + "string", + "null" + ] + }, + "sourceUrl": { + "type": [ + "string", + "null" + ] + }, + "status": { + "description": "P primary source, S secondary, D default (no specific rule found), U open question", + "type": [ + "string", + "null" + ] + }, + "version": { + "description": "Dataset version", + "type": "string" + } + }, + "required": [ + "publisher", + "dataset", + "version", + "retrievedAt" + ], + "type": "object" +} - changed
Output schema / requiredPrevious value: -[ - "meta" -]New value: +[ + "meta", + "provenance" +]
- Changed
data_search3 fields changed- added
Output schema / properties / nextCursorAdded value: +{ + "description": "Pass as `cursor` to get the next page; null on the last page", + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / provenanceAdded value: +{ + "description": "Where this came from: the publisher of the dataset, the dataset and its version DOI, the record id, the original source (who published it and its URL), the day that source was last checked, and when this answer was retrieved", + "properties": { + "citeUrl": { + "description": "The page to cite", + "type": [ + "string", + "null" + ] + }, + "dataset": { + "description": "Dataset id", + "type": "string" + }, + "datasetTitle": { + "type": "string" + }, + "dateChecked": { + "description": "YYYY-MM-DD the record was last checked against its source", + "type": [ + "string", + "null" + ] + }, + "doi": { + "description": "Version DOI", + "type": [ + "string", + "null" + ] + }, + "doiUrl": { + "type": [ + "string", + "null" + ] + }, + "line": { + "description": "The same facts as one sentence, to quote under an answer", + "type": "string" + }, + "publisher": { + "description": "Publisher of the dataset", + "type": "string" + }, + "recordId": { + "description": "Stable id of the record", + "type": [ + "string", + "null" + ] + }, + "retrievedAt": { + "description": "ISO 8601 time this answer was served", + "type": "string" + }, + "source": { + "description": "The original source: statute, rule, bar opinion, court report, agency table or platform policy", + "type": [ + "string", + "null" + ] + }, + "sourceKind": { + "description": "primary or secondary", + "type": [ + "string", + "null" + ] + }, + "sourceUrl": { + "type": [ + "string", + "null" + ] + }, + "status": { + "description": "P primary source, S secondary, D default (no specific rule found), U open question", + "type": [ + "string", + "null" + ] + }, + "version": { + "description": "Dataset version", + "type": "string" + } + }, + "required": [ + "publisher", + "dataset", + "version", + "retrievedAt" + ], + "type": "object" +} - changed
Output schema / requiredPrevious value: -[ - "meta" -]New value: +[ + "meta", + "provenance" +]
- Added
get_ad_filing_requirements - Added
get_ad_platform_policies - Added
get_attorney_fee_caps - Added
get_ca_court_filings - Changed
get_rule3 fields changed- added
Output schema / properties / nextCursorAdded value: +{ + "description": "Pass as `cursor` to get the next page; null on the last page", + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / provenanceAdded value: +{ + "description": "Where this came from: the publisher of the dataset, the dataset and its version DOI, the record id, the original source (who published it and its URL), the day that source was last checked, and when this answer was retrieved", + "properties": { + "citeUrl": { + "description": "The page to cite", + "type": [ + "string", + "null" + ] + }, + "dataset": { + "description": "Dataset id", + "type": "string" + }, + "datasetTitle": { + "type": "string" + }, + "dateChecked": { + "description": "YYYY-MM-DD the record was last checked against its source", + "type": [ + "string", + "null" + ] + }, + "doi": { + "description": "Version DOI", + "type": [ + "string", + "null" + ] + }, + "doiUrl": { + "type": [ + "string", + "null" + ] + }, + "line": { + "description": "The same facts as one sentence, to quote under an answer", + "type": "string" + }, + "publisher": { + "description": "Publisher of the dataset", + "type": "string" + }, + "recordId": { + "description": "Stable id of the record", + "type": [ + "string", + "null" + ] + }, + "retrievedAt": { + "description": "ISO 8601 time this answer was served", + "type": "string" + }, + "source": { + "description": "The original source: statute, rule, bar opinion, court report, agency table or platform policy", + "type": [ + "string", + "null" + ] + }, + "sourceKind": { + "description": "primary or secondary", + "type": [ + "string", + "null" + ] + }, + "sourceUrl": { + "type": [ + "string", + "null" + ] + }, + "status": { + "description": "P primary source, S secondary, D default (no specific rule found), U open question", + "type": [ + "string", + "null" + ] + }, + "version": { + "description": "Dataset version", + "type": "string" + } + }, + "required": [ + "publisher", + "dataset", + "version", + "retrievedAt" + ], + "type": "object" +} - changed
Output schema / requiredPrevious value: -[ - "meta" -]New value: +[ + "meta", + "provenance" +]
- Added
get_spanish_demand_supply - Changed
get_state_rules3 fields changed- added
Output schema / properties / nextCursorAdded value: +{ + "description": "Pass as `cursor` to get the next page; null on the last page", + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / provenanceAdded value: +{ + "description": "Where this came from: the publisher of the dataset, the dataset and its version DOI, the record id, the original source (who published it and its URL), the day that source was last checked, and when this answer was retrieved", + "properties": { + "citeUrl": { + "description": "The page to cite", + "type": [ + "string", + "null" + ] + }, + "dataset": { + "description": "Dataset id", + "type": "string" + }, + "datasetTitle": { + "type": "string" + }, + "dateChecked": { + "description": "YYYY-MM-DD the record was last checked against its source", + "type": [ + "string", + "null" + ] + }, + "doi": { + "description": "Version DOI", + "type": [ + "string", + "null" + ] + }, + "doiUrl": { + "type": [ + "string", + "null" + ] + }, + "line": { + "description": "The same facts as one sentence, to quote under an answer", + "type": "string" + }, + "publisher": { + "description": "Publisher of the dataset", + "type": "string" + }, + "recordId": { + "description": "Stable id of the record", + "type": [ + "string", + "null" + ] + }, + "retrievedAt": { + "description": "ISO 8601 time this answer was served", + "type": "string" + }, + "source": { + "description": "The original source: statute, rule, bar opinion, court report, agency table or platform policy", + "type": [ + "string", + "null" + ] + }, + "sourceKind": { + "description": "primary or secondary", + "type": [ + "string", + "null" + ] + }, + "sourceUrl": { + "type": [ + "string", + "null" + ] + }, + "status": { + "description": "P primary source, S secondary, D default (no specific rule found), U open question", + "type": [ + "string", + "null" + ] + }, + "version": { + "description": "Dataset version", + "type": "string" + } + }, + "required": [ + "publisher", + "dataset", + "version", + "retrievedAt" + ], + "type": "object" +} - changed
Output schema / requiredPrevious value: -[ - "meta" -]New value: +[ + "meta", + "provenance" +]
- Changed
list_datasets3 fields changed- added
Output schema / properties / nextCursorAdded value: +{ + "description": "Pass as `cursor` to get the next page; null on the last page", + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / provenanceAdded value: +{ + "description": "Where this came from: the publisher of the dataset, the dataset and its version DOI, the record id, the original source (who published it and its URL), the day that source was last checked, and when this answer was retrieved", + "properties": { + "citeUrl": { + "description": "The page to cite", + "type": [ + "string", + "null" + ] + }, + "dataset": { + "description": "Dataset id", + "type": "string" + }, + "datasetTitle": { + "type": "string" + }, + "dateChecked": { + "description": "YYYY-MM-DD the record was last checked against its source", + "type": [ + "string", + "null" + ] + }, + "doi": { + "description": "Version DOI", + "type": [ + "string", + "null" + ] + }, + "doiUrl": { + "type": [ + "string", + "null" + ] + }, + "line": { + "description": "The same facts as one sentence, to quote under an answer", + "type": "string" + }, + "publisher": { + "description": "Publisher of the dataset", + "type": "string" + }, + "recordId": { + "description": "Stable id of the record", + "type": [ + "string", + "null" + ] + }, + "retrievedAt": { + "description": "ISO 8601 time this answer was served", + "type": "string" + }, + "source": { + "description": "The original source: statute, rule, bar opinion, court report, agency table or platform policy", + "type": [ + "string", + "null" + ] + }, + "sourceKind": { + "description": "primary or secondary", + "type": [ + "string", + "null" + ] + }, + "sourceUrl": { + "type": [ + "string", + "null" + ] + }, + "status": { + "description": "P primary source, S secondary, D default (no specific rule found), U open question", + "type": [ + "string", + "null" + ] + }, + "version": { + "description": "Dataset version", + "type": "string" + } + }, + "required": [ + "publisher", + "dataset", + "version", + "retrievedAt" + ], + "type": "object" +} - changed
Output schema / requiredPrevious value: -[ - "meta" -]New value: +[ + "meta", + "provenance" +]
- Added
list_mdl_dockets - Changed
list_rule_changes3 fields changed- added
Output schema / properties / nextCursorAdded value: +{ + "description": "Pass as `cursor` to get the next page; null on the last page", + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / provenanceAdded value: +{ + "description": "Where this came from: the publisher of the dataset, the dataset and its version DOI, the record id, the original source (who published it and its URL), the day that source was last checked, and when this answer was retrieved", + "properties": { + "citeUrl": { + "description": "The page to cite", + "type": [ + "string", + "null" + ] + }, + "dataset": { + "description": "Dataset id", + "type": "string" + }, + "datasetTitle": { + "type": "string" + }, + "dateChecked": { + "description": "YYYY-MM-DD the record was last checked against its source", + "type": [ + "string", + "null" + ] + }, + "doi": { + "description": "Version DOI", + "type": [ + "string", + "null" + ] + }, + "doiUrl": { + "type": [ + "string", + "null" + ] + }, + "line": { + "description": "The same facts as one sentence, to quote under an answer", + "type": "string" + }, + "publisher": { + "description": "Publisher of the dataset", + "type": "string" + }, + "recordId": { + "description": "Stable id of the record", + "type": [ + "string", + "null" + ] + }, + "retrievedAt": { + "description": "ISO 8601 time this answer was served", + "type": "string" + }, + "source": { + "description": "The original source: statute, rule, bar opinion, court report, agency table or platform policy", + "type": [ + "string", + "null" + ] + }, + "sourceKind": { + "description": "primary or secondary", + "type": [ + "string", + "null" + ] + }, + "sourceUrl": { + "type": [ + "string", + "null" + ] + }, + "status": { + "description": "P primary source, S secondary, D default (no specific rule found), U open question", + "type": [ + "string", + "null" + ] + }, + "version": { + "description": "Dataset version", + "type": "string" + } + }, + "required": [ + "publisher", + "dataset", + "version", + "retrievedAt" + ], + "type": "object" +} - changed
Output schema / requiredPrevious value: -[ - "meta" -]New value: +[ + "meta", + "provenance" +]
- Added
search_ethics_opinions - Changed
search_rules3 fields changed- added
Output schema / properties / nextCursorAdded value: +{ + "description": "Pass as `cursor` to get the next page; null on the last page", + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / provenanceAdded value: +{ + "description": "Where this came from: the publisher of the dataset, the dataset and its version DOI, the record id, the original source (who published it and its URL), the day that source was last checked, and when this answer was retrieved", + "properties": { + "citeUrl": { + "description": "The page to cite", + "type": [ + "string", + "null" + ] + }, + "dataset": { + "description": "Dataset id", + "type": "string" + }, + "datasetTitle": { + "type": "string" + }, + "dateChecked": { + "description": "YYYY-MM-DD the record was last checked against its source", + "type": [ + "string", + "null" + ] + }, + "doi": { + "description": "Version DOI", + "type": [ + "string", + "null" + ] + }, + "doiUrl": { + "type": [ + "string", + "null" + ] + }, + "line": { + "description": "The same facts as one sentence, to quote under an answer", + "type": "string" + }, + "publisher": { + "description": "Publisher of the dataset", + "type": "string" + }, + "recordId": { + "description": "Stable id of the record", + "type": [ + "string", + "null" + ] + }, + "retrievedAt": { + "description": "ISO 8601 time this answer was served", + "type": "string" + }, + "source": { + "description": "The original source: statute, rule, bar opinion, court report, agency table or platform policy", + "type": [ + "string", + "null" + ] + }, + "sourceKind": { + "description": "primary or secondary", + "type": [ + "string", + "null" + ] + }, + "sourceUrl": { + "type": [ + "string", + "null" + ] + }, + "status": { + "description": "P primary source, S secondary, D default (no specific rule found), U open question", + "type": [ + "string", + "null" + ] + }, + "version": { + "description": "Dataset version", + "type": "string" + } + }, + "required": [ + "publisher", + "dataset", + "version", + "retrievedAt" + ], + "type": "object" +} - changed
Output schema / requiredPrevious value: -[ - "meta" -]New value: +[ + "meta", + "provenance" +]
- Changed
whats_new3 fields changed- added
Output schema / properties / nextCursorAdded value: +{ + "description": "Pass as `cursor` to get the next page; null on the last page", + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / provenanceAdded value: +{ + "description": "Where this came from: the publisher of the dataset, the dataset and its version DOI, the record id, the original source (who published it and its URL), the day that source was last checked, and when this answer was retrieved", + "properties": { + "citeUrl": { + "description": "The page to cite", + "type": [ + "string", + "null" + ] + }, + "dataset": { + "description": "Dataset id", + "type": "string" + }, + "datasetTitle": { + "type": "string" + }, + "dateChecked": { + "description": "YYYY-MM-DD the record was last checked against its source", + "type": [ + "string", + "null" + ] + }, + "doi": { + "description": "Version DOI", + "type": [ + "string", + "null" + ] + }, + "doiUrl": { + "type": [ + "string", + "null" + ] + }, + "line": { + "description": "The same facts as one sentence, to quote under an answer", + "type": "string" + }, + "publisher": { + "description": "Publisher of the dataset", + "type": "string" + }, + "recordId": { + "description": "Stable id of the record", + "type": [ + "string", + "null" + ] + }, + "retrievedAt": { + "description": "ISO 8601 time this answer was served", + "type": "string" + }, + "source": { + "description": "The original source: statute, rule, bar opinion, court report, agency table or platform policy", + "type": [ + "string", + "null" + ] + }, + "sourceKind": { + "description": "primary or secondary", + "type": [ + "string", + "null" + ] + }, + "sourceUrl": { + "type": [ + "string", + "null" + ] + }, + "status": { + "description": "P primary source, S secondary, D default (no specific rule found), U open question", + "type": [ + "string", + "null" + ] + }, + "version": { + "description": "Dataset version", + "type": "string" + } + }, + "required": [ + "publisher", + "dataset", + "version", + "retrievedAt" + ], + "type": "object" +} - changed
Output schema / requiredPrevious value: -[ - "meta" -]New value: +[ + "meta", + "provenance" +]
11 tool updates
- First observed
cite - First observed
compare_states - First observed
data_compare - First observed
data_lookup - First observed
data_search - First observed
get_rule - First observed
get_state_rules - First observed
list_datasets - First observed
list_rule_changes - First observed
search_rules - First observed
whats_new
Related MCP Connectors
U.S. law library for AI: court decisions, statutes, court rules and citation checks. Read-only.
Find, compare and price licensed U.S. lawyers from official licensing records. Not legal advice.
Verified lawyer and attorney search, discovery, and matching for AI — 991K+ US profiles.
Verified lawyer and attorney search, discovery, and matching for AI — 991K+ US profiles.
Related MCP Servers
- AlicenseAqualityDmaintenanceProvides AI assistants access to 991,000+ bar-verified U.S. attorney profiles for accurate lawyer search, verification, and referral without hallucination.715 npmMIT

KnowJudgesofficial
FlicenseNot gradedqualityCmaintenanceFree, source-linked research on U.S. judges and courts, including judicial profiles, biographies, courtroom rules, AI-abuse cases, and recent rule changes.-- AlicenseAqualityDmaintenanceProvides comprehensive gambling licensing information, fee calculations, compliance requirements, and regulatory comparisons across 32 US states and select international jurisdictions for legal professionals and gaming operators.6MIT

pactlio-mcpofficial
AlicenseAqualityCmaintenanceContract and wills legal tools for AI agents: statute-cited requirements per contract type and US state, non-compete enforceability for all 50 states + DC, intake schemas, async multi-agent contract drafting with free previews, and contract risk analysis.8MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.