Overview
The server exposes 4 tools over the Clarivate Caselaw Database. Search finds and analyzes cases, one tool returns full case details, and two help you discover valid field values.
Add the server URL above to any MCP-compatible client as a remote server. Your assistant then chooses the right tool from the descriptions below. Some clients show tool names with an ip-one-litigation___ prefix.
Data is organized as cases and documents. A case is identified by a GUID, and several court documents can belong to the same case. Returned records are always distinct.
Workflows
Find and review cases
-
1. Discover
Look up the exact values a filter needs, such as court names or party names, when a wildcard search misses.
search_field_valuesdescribe_fields -
2. Search
Filter cases by domain, party, court, dates and more. The result is a list of case GUIDs and a total count.
search_cases -
3. Review
Fetch the full details of up to 50 cases at a time.
get_case_details
{
"tool": "search_cases",
"arguments": {
"filters": {
"cases_filter": [
{ "field": { "root": "CASE_DOMAIN" }, "op": "EQ", "value": "PATENT" },
{ "field": { "root": "PARTY_OPTIMIZED_NAME" }, "op": "LIKE", "value": "%ACME%" },
{ "field": { "root": "FIRST_ACTION_DATE" }, "op": "GE", "value": "2020-01-01" }
]
},
"limit": 10
}
}
Analyze with grouping and aggregation
Use group_by with aggregate to count or summarize cases instead of listing them. Only the grouped and aggregated fields are returned, and order_by can sort on an aggregated field such as GUID_COUNT.
{
"tool": "search_cases",
"arguments": {
"filters": {
"cases_filter": [
{ "field": { "root": "CASE_DOMAIN" }, "op": "EQ", "value": "TRADEMARK" }
]
},
"group_by": [ { "root": "DOCKET_COURT_COUNTRY" } ],
"aggregate": [ { "func": "COUNT", "field": { "root": "GUID" } } ],
"order_by": { "field": { "root": "GUID_COUNT" }, "direction": "DESC" },
"limit": 10
}
}
Read the cases you found
{
"tool": "get_case_details",
"arguments": {
"guids": [ "<case GUID from search_cases>" ]
}
}
Tool reference
Fields are named in uppercase, for example CASE_DOMAIN, and are passed as objects: {"root": "CASE_DOMAIN"}. See the field reference for every field.
Search
search_cases
Search and aggregateMax 50 per pageSearches IP litigation cases across all domains. Without grouping it returns a list of case GUIDs. With group_by and aggregate it returns grouped and aggregated values. The response always includes the total number of matching records. Use get_case_details to read individual cases.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| filters | object | No | Object with a cases_filter array. Each entry has field, op and value. Pass {"cases_filter": []} for no filters. |
| group_by | array | No | Fields to group by. When used, only grouped and aggregated fields are returned. |
| aggregate | array | No | Entries of {func, field} where func is COUNT, SUM, AVG, MIN or MAX. Requires group_by. COUNT counts distinct values. |
| order_by | object | No | {field, direction} with direction ASC or DESC. The field must appear in group_by or aggregate. Name aggregated fields FIELD_FUNC, for example GUID_COUNT. |
| limit | integer | No | Number of results to return. Default 10, maximum 50. |
| offset | integer | No | Number of results to skip, for pagination. Default 0. |
Filter operators
Each filter is {field, op, value}. Operators: EQ NE GT GE LT LE IN IS LIKE STARTSWITH. Use a list for IN, a % wildcard for LIKE (for example APPLE%, %SAMSUNG%), and null for IS. Values can be strings, numbers, booleans, lists or null.
Case details
get_case_details
Max 50 GUIDs per callReturns the full case details for one or more cases identified by GUID.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| guids | string[] | Yes | Case GUIDs, for example from search_cases. Maximum 50. |
Discovery
search_field_values
Returns the distinct values of any field, optionally narrowed by filters. Use it when a LIKE filter in search_cases returns nothing or the wrong cases and the field has no fixed list of values: find the exact values, then retry the search.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| field | object | Yes | The field to list values for, as {"root": "FIELD_NAME"}. |
| filters | object | No | Same cases_filter structure as search_cases, to narrow the values returned. |
| limit | integer | No | Number of results to return. Default 10, maximum 50. |
| offset | integer | No | Number of results to skip, for pagination. Default 0. |
describe_fields
Returns the full field reference: names, types, formats and notes. Call it if you need the complete list of fields the search tools accept.
Takes no parameters.
Field reference
These fields can be used in filters, group_by and aggregate. String values are stored in uppercase.
Case
| Field | Meaning | Values and notes |
|---|---|---|
| GUID | Unique identifier of the case. | String. |
| CASE_DOMAIN | The IP rights at stake in the case. | COPYRIGHT DESIGN_MODEL DOMAIN_NAME PATENT TRADEMARK OTHER UNFAIR_COMPETITION |
| CASE_STATUS | Current status of the case. | OPEN CLOSED INACTIVE |
| CASE_RESOLUTION | Outcome, based on the information available in the database. | CLAIMANT WINS DEFENDANT WINS SPLIT WIN SETTLED WITHDRAWN null |
| FIRST_ACTION_DATE | Date the action was filed. Not available for all cases. | ISO date, YYYY-MM-DD. Supports GE and LE for ranges. |
| FIRST_ACTION_TYPE | Type of the first legal action. | INFRINGEMENT INVALIDITY_CANCELLATION OPPOSITION REVOCATION PETITION_UNDER_TRANSITIONAL_PROGRAM INTER_PARTES_REVIEW_PETITION RETRIAL DOMAIN_NAME_ARBITRATION DECLARATORY TRIAL_FOR_CORRECTION EX_PARTE_REEXAMINATION_PETITION DERIVATION_PROCEEDING EMPLOYEE_INVENTION POST_GRANT_REVIEW_PETITION ADMINISTRATIVE_HEARINGS INTERFERENCE CONTRACT CRIMINAL_ACTION TRIAL_FOR_SCOPE PTO_REEXAMINATION OWNERSHIP DECLARATION_OF_WELL_KNOWN_STATUS RE_EXAMINATION COLLECTIVE_MANAGEMENT_ORGANISATIONS OTHER null |
| EARLIEST_EVENT_DATE | Filing date of the case, or the earliest document date when the filing can’t be identified. Always available. | ISO date, YYYY-MM-DD. |
| EX_OFFICIO | Whether an IP office is acting on behalf of any party. | true false |
Parties
| Field | Meaning | Values and notes |
|---|---|---|
| PARTY_OPTIMIZED_NAME | Normalized party name, in any role. | Free text. Legal suffixes are inconsistent, so %APPLE% is usually better than %APPLE INC%. |
| PARTY_ULTIMATE_PARENT | Group or parent company of the party, in any role. | Free text. |
| PARTY_ROLE | Role of the party in the case. | PLAINTIFF DEFENDANT In administrative cases, defendants are often the trademark or patent applicants. |
| PARTY_COUNTRY | Country code of the party. | Country code. Use IN for several countries. |
| PARTY_IS_EX_OFFICIO | Whether the party is an ex officio IP office. | true false Use false to target non-ex-officio plaintiffs. |
| PARTY_PLAINTIFF_NAME | Plaintiff name. | Free text. Use when both parties are given together, or the plaintiff is requested. |
| PARTY_PLAINTIFF_ULTIMATE_PARENT | Plaintiff parent group. | Free text. Same usage as above. |
| PARTY_DEFENDANT_NAME | Defendant name. | Free text. Use when both parties are given together, or the defendant is requested. |
| PARTY_DEFENDANT_ULTIMATE_PARENT | Defendant parent group. | Free text. Same usage as above. |
Court
| Field | Meaning | Values and notes |
|---|---|---|
| DOCKET_COURT_NAME | Full court name. | Free text. EUIPO appears under several names (for example examination division or board of appeal), so use EUIPO% to find all. |
| DOCKET_COURT_AREA | Regional or continental grouping of the court. | EUROPE means the continent, not the European Union. |
| DOCKET_COURT_COUNTRY | Country or office code of the court. | Office examples: EM, EP, EA, EU. There is no EU-country grouping, so use IN with a list of countries. |
| DOCKET_COURT_TYPE_ADMINISTRATIVE | Whether the court is an IP office (administrative court). | true false |
| DOCKET_COURT_TYPE_ARBITRATION | Whether the court is an arbitration body. | true false |
| DOCKET_COURT_TYPE_JUDICAL | Whether the court is a regular court. | true false The field name is spelled as shown. |
Documents
| Field | Meaning | Values and notes |
|---|---|---|
| DOCUMENT_DATE | Date of the legal document. | ISO date, YYYY-MM-DD. Supports GE and LE for ranges. |
| DOCUMENT_TYPE | Type of legal document. | DECISIONS_AND_ORDERS PRELUDE PROCESS_PROCEDURE_INFORMATION SETTLEMENT_INFORMATION BRIEFS_AND_MEMORANDUMS MOTIONS EVIDENCE CONCLUSIONS_OF_ADVOCATE_GENERAL null |
| DOCUMENT_TRADEMARK_REPUTATION | Whether a trademark-domain document contains reputation-related points of law. | true false |
Patents
| Field | Meaning | Values and notes |
|---|---|---|
| PATENT_PUBLICATION_NUMBER | Patent publication number. | Identifier. Numbers can carry suffixes such as EP724444(B1), so use a wildcard like %EP724444% to find all versions. |
| PATENT_APPLICATION_NUMBER | Patent application number. | Identifier. If an exact match fails, try LIKE with % wildcards. |
| PATENT_VALIDITY | Outcome of the validity assessment by a judge or examiner. | true false |
| PATENT_INFRINGEMENT | Outcome of the infringement assessment by a judge. | true false |
| PATENT_ROLE | Which party the patent belongs to. | PLAINTIFF DEFENDANT |
| PATENT_TYPE | Type of patent. | INVENTION_PATENT UTILITY_MODEL DESIGN_PATENT null |
| PATENT_DOCDB_FAMILY_ID | DocDB family ID of the invention. Mostly for Patstat inventions, and only in limited cases for Darts inventions. | Family identifier. |
| IPC_CLASS_CODE | International Patent Classification code, used to sort patents by technology or industry. | Format [Section][Class][Subclass] [Main group]/[Subgroup], for example H04R 25/00 or C07D 487/08. |
Trademarks
| Field | Meaning | Values and notes |
|---|---|---|
| TRADEMARK_ROLE | Role in trademark cases. | PLAINTIFF DEFENDANT |
| TRADEMARK_TYPE | Type of trademark. | ODOR FIG SOUND DOMAIN VERBAL THREED FIG_COLOR OTHER null |
| TRADEMARK_VERBAL_ELEMENT | Verbal or word element of the trademark. | Free text. |
| TRADEMARK_NICE_CLASS | Nice class of the goods and services. | Formats vary: 11, 33.23, 42.H3, and zero-padding differs (04 vs 4.1). To find class 4, use LIKE with 04% and 4.% rather than an exact match. |
Designs
| Field | Meaning | Values and notes |
|---|---|---|
| DESIGN_ROLE | Role in design cases. | PLAINTIFF DEFENDANT |
| DESIGN_REGISTRATION_OFFICE | Office where the design is registered. | Mostly two-letter country codes, plus office codes such as WO, EU, EA, and -- for unknown. Use search_field_values for the full list. |
| DESIGN_PRODUCT | Type of design product. | Free text. |
| DESIGN_LOCARNO_CLASS | Locarno class identifying the product category. | Dotted class.subclass.division, for example 12.08.10. Use LIKE 'N.%' to match all subclasses of class N. |
Copyright
| Field | Meaning | Values and notes |
|---|---|---|
| COPYRIGHT_ROLE | Role in copyright cases. | PLAINTIFF DEFENDANT |
| COPYRIGHT_TYPE | Type of copyrighted work. | LITERARY_WORK AUDIOVISUAL_CINEMA_WORK DATABASE VIDEO_GAME UTILITARIAN_WORK COMPUTER_PROGRAM MUSICAL_WORK APPLIED_ART DRAMATIC_WORK WEBSITE ARCHITECTURE WORK_OF_VISUAL_ART DERIVATIVE_WORK PHOTOGRAPHIC_WORK OTHER null |
| COPYRIGHT_TITLE | Title of the copyrighted work. | Free text. |
| COPYRIGHT_DESCRIPTION | Description of the copyrighted work. | Free text. |
Query guide
-
Use uppercase or LIKE for text
String fields are indexed in uppercase, so use uppercase values or the
LIKEoperator.LIKEsupports prefix (APPLE%), suffix (%SAMSUNG) and contains (%GOOGLE%) matches. -
Match names loosely
For party names, prefer
LIKEunless you need an exact match, and check that the results are the parties you meant. IfLIKEfinds nothing, usesearch_field_valuesto get the exact values and retry. -
Enumerated fields need exact values
Fields with a fixed list of values, such as
PLAINTIFForDEFENDANT, require an exact match. -
Ranges and classifications
Date and numeric fields support
GEandLEfor ranges. Classification fields use the official Nice, Locarno and IPC codes, and Nice and Locarno codes vary in format, so useLIKEto cover the variants. -
Scope by industry with IPC codes
For industry or product questions where no company is named, such as hearing aids or automotive patents, filter on
IPC_CLASS_CODEfirst. -
Grouping, ordering and paging
Aggregation requires
group_by.order_bymust use a field fromgroup_byoraggregate, and null values sort to the top when ordering descending, so filter them out with a minimum value. The response always includes the total record count, so you don’t need a grouped count for that.limitis capped at 50 per call, andget_case_detailstakes up to 50 GUIDs. -
Keep requests focused
Request no more than 10 fields at a time. When browsing cases without other instructions, group by
EARLIEST_EVENT_DATEand sort descending.