Note
This document is intended for developers. For end users of the Everlaw-Claude connection, see Get started using Claude to search your Everlaw projects for instructions and best practices.
The Everlaw MCP server lets Model Context Protocol clients such as Claude Desktop, Claude Code, Cursor, and any other MCP host read project data and run searches on behalf of a signed-in Everlaw user.
This page is the developer reference for that server: connection details, the OAuth flow, every tool reference, and errors.
What you can do
- Browse a project - list its binders.
- Run a saved-search-quality query - combine 20+ search terms (Bates ranges, metadata, content text, coding, redactions, productions, -) with logical operators and grouping.
- Page through results - fetch document IDs, Bates numbers, review URLs, and optionally per-document metadata, text, or AI-extracted values.
- Discover the query language at runtime - fetch the schema for any individual search term.
All actions run with the signed-in user's permissions: the server cannot see or do anything that the user could not see or do in the Everlaw web UI.
Endpoint
| URL | https://api.everlaw.com/v1/mcp |
| Transport | HTTP, JSON-RPC 2.0 (per the MCP HTTP transport spec) |
| Server name | everlaw-mcp |
| Server version | 0.1.0 |
| Protocol revision | 2025-11-25 |
Authentication
The server is a standards-compliant OAuth 2.0 authorization server with RFC 9728 protected-resource metadata. MCP clients that implement the standard discovery flow can connect with no manual setup beyond the resource URL.
Every MCP request must carry an access token:
Authorization: Bearer <access-token>
Discovery
An unauthenticated request to the MCP endpoint returns:
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer realm="mcp",
resource_metadata="https://app.everlaw.com/.well-known/oauth-protected-resource"
Following the `resource_metadata` URL yields the protected-resource document:
{
"resource": "https://api.everlaw.com/v1/mcp",
"authorization_servers": ["https://app.everlaw.com"],
"scopes_supported": ["MCP"],
"bearer_methods_supported": ["header"]
}
Note that the API host (api.everlaw.com) and the authorization-server host (app.everlaw.com) are different. The authorization server publishes its endpoints at https://app.everlaw.com/.well-known/oauth-authorization-server (RFC 8414): authorization, token, introspection, revocation, and JWKS.
Scope
Currently, a single scope, MCP, grants permission to all the server's tools: GetProjectBinders,PostProjectSearch,GetProjectSearchResult and DescribeProjectSearchTerm.
Consent and revocation
Users can review and revoke previously granted apps from their Everlaw account settings.
Rate limits
The server applies several layers of throttling. Treat any of the following as a signal to wait and retry.
| Layer | Response |
|---|---|
| Failed authentication, per IP | HTTP 429 |
| Per access token | HTTP 429 |
| Per authenticated user | HTTP 429 |
| MCP tool calls, per user | Tool result with isError: true, message "Rate limit exceeded: please retry after 60 seconds" |
| MCP tool concurrent calls, per user | Tool result with isError: true, message "Concurrent limit exceeded: please retry shortly" |
Tools
All tools take a JSON-object argument and return text content. The tools (GetProjectBinders, PostProjectSearch, GetProjectSearchResult) require read access on the project, or org-admin access where the project's database permits it. DescribeProjectSearchTerm does not require such permissions.
GetProjectBinders
Lists all binders in a project, including their names, IDs, and owning users.
| Argument | Type | Required | Description |
|---|---|---|---|
| projectId | integer | yes | The project ID. |
| after | integer | no | The ID after which to start the page. |
| limit | integer | no | Max records to return. Default 100, maximum 200. |
Read-only.
PostProjectSearch
Runs a search query and returns the number of matching documents, the number of document groups (see the GROUPING term), the search ID, a URL to fetch results via GetProjectSearchResult, and any optional summary metrics.
A search query is a JSON object with a term selecting the search type and a query object whose shape depends on the term. See Search term reference below for every supported term.
| Argument | Type | Required | Description |
|---|---|---|---|
| projectId | integer | yes | The project ID. |
| term | string enum | yes | One of the supported search terms. |
| query | object | yes | Term-specific query body. |
| extraSummaryMetrics | array of "NUM_PAGES" | "BILLABLE_SIZE" | no | Extra metrics to compute alongside document count. Defaults to none. |
GetProjectSearchResult
Pages through the documents matched by a search, sorted by document ID. Each entry includes the Bates/Control number, document ID, and review URL; the optional flags add metadata, a download link to the document text, and AI-extracted values.
Results may be stale if documents were added, removed, edited, or the search itself was edited after this endpoint was first called for that search. To guarantee fresh results, run a new search before paging.
| Argument | Type | Required | Description |
|---|---|---|---|
| projectId | integer | yes | The project ID. |
| searchId | integer | yes | A search ID returned by PostProjectSearch, or one read from a user-created search's URL. |
| after | integer | no | The ID after which to start the page. |
| limit | integer | no | Max records to return. Default 100, maximum 200. |
| includeMetadata | boolean | no | Include each document's metadata. Default false. |
| includeText | boolean | no | Include a download link to each document's text. Default false. |
| includeExtractedValues | boolean | no | Include AI-extracted values for each document. Default false. |
Read-only.
DescribeProjectSearchTerm
Returns the query-property schema and an example for a single PostProjectSearch term (e.g. BATES, CONTENTS, LOGICAL). The same content is reproduced statically in Search term reference below; this tool is a convenience for clients that prefer just-in-time discovery.
| Argument | Type | Required | Description |
|---|---|---|---|
| term | string enum | yes | The term whose schema should be returned. |
Read-only.
Valid term values: ASSIGNED, BATES, BILLABLE_SIZE, BINDER, CODED, CONTENTS, DEDUPLICATE, FREEFORM_CODES, GROUPING, HAS_FORMAT, LOGICAL, METADATA, NATIVE_UPLOADED, NUM_PAGES, PROCESSED_UPLOADED, PROCESSING_FLAG, PROCESSING_STATE, PRODUCED, PROJECT, PROMOTION_CODE, REDACTIONS, SEARCH_TERM_REPORT, TYPE, VIEWED.
Example session
A typical session against an Everlaw project:
- Pick a search term. Read its schema in Search term reference below (or call DescribeProjectSearchTerm).
- Run the search. Call PostProjectSearch with projectId, term, and a matching query. The response includes a searchId.
- Page through results. Call GetProjectSearchResult with the same projectId and the returned searchId, paging via after and limit. Toggle includeMetadata, includeText, or includeExtractedValues as needed.
Call GetProjectBinders at any point to enumerate binders to help construct searches by binders.
Worked example: documents mentioning "dogs" with Bates ABC1-ABC100 in a project
Suppose you want every document in the project with ID 2 whose text contains "dogs" and whose Bates number falls in the range ABC1-ABC100. That's an AND of a CONTENTS term and a BATES term, expressed via LOGICAL.
Step 1 - describe search. Describe the query in natural language. The agent calls DescribeProjectSearchTerm for relevant search terms to understand how to build a query.
Step 2 - run the search. Agent constructs the query, and calls PostProjectSearch with the following arguments:
{
"projectId": 2,
"term": "LOGICAL",
"query": {
"operator": "AND",
"operands": [
{
"term": "CONTENTS",
"query": { "value": "dogs" }
},
{
"term": "BATES",
"query": {
"prefix": "ABC",
"numRange": { "begin": "1", "end": "100" }
}
}
]
}
}
The response gives the agent the match counts and a searchId to page through results. For instance:
{
"numDocs": 17,
"numGroups": 17,
"searchId": 9876,
"searchResultUrl": "https://app.everlaw.com/9876"
}
Step 3 - page through the matches. Agent calls GetProjectSearchResult with the same projectId and the returned searchId. Set includeText: true if you also want a download link to each document's text:
{
"projectId": 2,
"searchId": 9876,
"limit": 50,
"includeText": true
}
For subsequent pages, pass the last document ID from the previous page as after. Agent can analyze the text or metadata in the response to perform more tasks.
Search term reference
Every PostProjectSearch call takes a term and a matching query. This section enumerates each supported term, its query schema, and an example.
Compound terms (LOGICAL, GROUPING, DEDUPLICATE) embed other terms inside their operand/operands properties. Each nested term follows the same { "term": ..., "query": ... } shape documented here.
ASSIGNED
Searches for documents matching the given assignment criteria. See GetProjectAssignmentGroups for the available assignment groups, assignments, and assignees.
Query properties:
- userId (integer, optional) - Searches for all documents assigned to the specific user. The userId must match an assigneeId of any assignment.
-
assignmentGroup (object, optional):
- id (integer) - The id of the assignment group. See GetProjectAssignmentGroups.
- criteria (string, default "ALL_IN_GROUP", enum: "ALL_IN_GROUP", "ASSIGNED", "UNASSIGNED", "ASSIGNMENT", "USER") - Additional criteria for selection.
- userId (integer, only if criteria is "USER") - The user id of the assignee.
- assignmentId (integer, only if criteria is "ASSIGNMENT") - The specific assignment id.
- reviewStatus (string, default "ANY", enum: "ANY", "REVIEWED", "NOT_REVIEWED") - Whether to select reviewed, not reviewed (per the group's review criteria), or either.
Exactly one of the userId or assignmentGroup must be provided.
{
"term": "ASSIGNED",
"query": {
"assignmentGroup": {
"id": 11,
"criteria": "ASSIGNMENT",
"assignmentId": 22,
"reviewStatus": "NOT_REVIEWED"
}
}
}
BATES
Searches for documents with Bates/Control numbers matching the given properties.
Query properties:
- prefix (string, optional) - The prefix of the Bates number. See GetProjectBatesPrefixes for available prefixes. Omitted or null means "any prefix".
- pageSearch (boolean, optional) - Whether to also search Bates numbers of pages.
-
numRange (object, optional) - When omitted, searches all Bates with the given (mandatory) prefix.
- begin (string, optional) - Lower bound of the Bates number (inclusive).
- end (string, optional) - Upper bound of the Bates number (inclusive).
Valid numRange must include at least one of begin or end. To search for a specific value, set both to the desired value. Bates numbers are strings to accommodate Australian Doc IDs but are treated numerically (e.g. ABC1 matches ABC001).
{
"term": "BATES",
"query": {
"prefix": "ABC",
"pageSearch": true,
"numRange": { "begin": "1000", "end": "1999" }
}
}
BILLABLE_SIZE
Searches for documents with billable size in the given range.
Query properties:
- begin (integer, optional) - Lower bound, in bytes (inclusive).
- end (integer, optional) - Upper bound, in bytes (inclusive).
Valid queries must include at least one of begin or end. Set both to the same value to search for an exact size.
{
"term": "BILLABLE_SIZE",
"query": { "begin": 1000000 }
}
BINDER
Searches for binders matching the given criteria.
Query properties:
- binderId (integer, optional) - The id of the binder. See GetProjectBinders. Omitted or null matches all binders on the project.
- userId (integer, optional) - See GetProjectUsers.
- groupId (integer, optional) - See GetProjectGroups.
-
dateRange (object, optional):
- begin (string, optional) - Lower bound (ISO 8601, e.g. 2007-12-03T10:15:30.00Z).
- end (string, optional) - Upper bound (ISO 8601).
Only one of userId or groupId may be provided; when neither is provided, the search includes binders regardless of who applied them. Valid dateRange must include at least one of begin or end. If dateRange is null or omitted, the search is for currently applied binders, and userId/groupId must not be specified.
{
"term": "BINDER",
"query": {
"binderId": 7,
"userId": 12345,
"dateRange": {
"begin": "2022-01-01T00:00:00.00Z",
"end": "2022-02-01T00:00:00.00Z"
}
}
}
CODED
Searches for documents coded with the given criteria.
Query properties:
- labelId (integer, optional) - The id of the label (category or code). See GetProjectCodes. Omitted or null matches documents with any code on the project.
- userId (integer, optional) - See GetProjectUsers.
- groupId (integer, optional) - See GetProjectGroups.
-
dateRange (object, optional):
- begin (string, optional) - Lower bound (ISO 8601).
- end (string, optional) - Upper bound (ISO 8601).
Only one of userId or groupId may be provided; when neither is provided, the search is for coding regardless of who applied it. Valid dateRange must include at least one of begin or end. If dateRange is null or omitted, the search is for currently coded documents, and userId/groupId must not be specified.
{
"term": "CODED",
"query": {
"labelId": 7,
"userId": 12345,
"dateRange": {
"begin": "2022-01-01T00:00:00.00Z",
"end": "2022-02-01T00:00:00.00Z"
}
}
}
CONTENTS
Searches document text. Supports all complex text searching available in the UI, including proximity and fuzzy searches. See Advanced Content Searches in the Everlaw help center.
Query properties:
- value (string, optional) - The text to search for.
- hasAnyText (boolean, optional) - If true, matches documents that have any text; if false, matches documents that have no text.
Exactly one of value or hasAnyText must be provided.
Search for a value:
{ "term": "CONTENTS", "query": { "value": "Cow" } }
Match documents that have any text:
{ "term": "CONTENTS", "query": { "hasAnyText": true } }
DEDUPLICATE
Deduplicates the search hits of the given operand. See Deduplicate among search hits in the Everlaw help center.
Query properties:
- operand (object) - The search to be deduplicated. Can be any supported term.
{
"term": "DEDUPLICATE",
"query": {
"operand": {
"term": "METADATA",
"query": { "field": "Custodian", "value": "Jane" }
}
}
}
FREEFORM_CODES
Searches for documents matching the given freeform code criteria.
Query properties:
- id (integer) - The freeform code id. See GetProjectFreeformCodes for available codes and their formats.
- exact (boolean, default false) - For TEXT format codes, performs an exact value search when true; otherwise performs a free-form substring search (including proximity, regex, etc.).
- value - The value to search for. The expected input depends on the code format. See METADATA for TEXT, DATE_TIME, and NUMBER format details. Set to null or omit for "no value". To search for "any value", use LOGICAL with NOT to negate a null-value search.
{
"term": "FREEFORM_CODES",
"query": { "id": 26, "value": "Everlaw Oakland" }
}
GROUPING
Groups search hits of the given operand, and optionally filters certain context from those groups. The numGroups metric reflects the number of groups based on the grouping criteria (without this term, numGroups always equals numDocs). See Grouping and Removal in the Everlaw help center.
Query properties:
- grouping (string, enum: "ALL_CONVERSATIONS", "ATTACHMENTS", "CHAT_CONVERSATIONS", "EMAIL_THREADS", "EXACT_DUPLICATES", "VERSIONS") - Groups hits by context.
- removeFromGroup (string, default "NONE", enum: "NONE", "PARENT", "CHILDREN", "SEARCH_HITS", "NON_HITS", "NON_INCLUSIVE_EMAILS") - Optionally removes certain contexts from the grouping.
- operand (object) - The search to be grouped. Can be any supported term.
{
"term": "GROUPING",
"query": {
"grouping": "ATTACHMENTS",
"removeFromGroup": "PARENT",
"operand": {
"term": "METADATA",
"query": { "field": "Custodian", "value": "Jane" }
}
}
}
HAS_FORMAT
Searches for documents for which the given format is available.
Query properties:
- format (string, enum: "IMAGE", "NATIVE", "PDF", "TEXT").
{ "term": "HAS_FORMAT", "query": { "format": "NATIVE" } }
LOGICAL
Combines other terms via OR, AND, or NOT.
Query properties:
- operator (string, enum: "AND", "OR", "NOT").
- operands (array, only if operator is "AND" or "OR") - Search terms that must all (AND) or any (OR) match. Any number of any supported terms.
- operand (object, only if operator is "NOT") - Search term to negate. Can be any supported term.
AND example:
{
"term": "LOGICAL",
"query": {
"operator": "AND",
"operands": [
{ "term": "METADATA", "query": { "field": "Custodian", "value": "Jane" } },
{ "term": "METADATA", "query": { "field": "Subject", "value": "Hello" } }
]
}
}
NOT example:
{
"term": "LOGICAL",
"query": {
"operator": "NOT",
"operand": {
"term": "METADATA",
"query": { "field": "Custodian", "value": "Jane" }
}
}
}
METADATA
Searches for documents matching the given metadata field criteria.
Query properties:
-
field (string) - The name of a searchable metadata field. See GetProjectMetadataFields for available fields and their formats. The following smart aliases are also available:
- "All Text Fields" (TEXT format)
- "Parties" (ADDRESS_LIST format)
- "Recipients" (ADDRESS_LIST format)
- "Primary Date" (DATE_TIME format)
- "Family Date" (DATE_TIME format)
- "All Date Fields" (DATE_TIME format)
- exact (boolean, default false) - For TEXT, MD5, and SHA1 formats, performs an exact value search when true; otherwise performs a free-form substring search.
- value - The value to search for. Format depends on the field type (see below). Set to null or omit for "no value". For "any value", negate a null-value search via LOGICAL/NOT.
TEXT, MD5, SHA1 formats
value is a string.
{ "term": "METADATA", "query": { "field": "Custodian", "value": "Jane" } }
Exact:
{
"term": "METADATA",
"query": { "field": "Custodian", "exact": true, "value": "Jane Doe" }
}
ADDRESS_LIST format
Used for fields like To, CC, and Parties that contain multiple addresses. Each address can have a name and/or email address; the domain is extracted from email addresses.
value is an object:
- operator (string, default "ANY", enum: "ANY", "ALL") - Whether any or all of the provided terms must appear.
- exclusive (boolean, default false) - Whether the field should exclusively contain only the provided parties.
-
terms (array of objects), each with:
- value (string) - The value to search for.
-
kind (string, enum: "NAME", "EMAIL", "DOMAIN", "TEXT")
- "NAME" - Searches as a Contact Name, including associated email addresses.
- "EMAIL" - Searches as an email address.
- "DOMAIN" - Searches as a domain of the field's email addresses.
- "TEXT" - Free-form text search within the field.
{
"term": "METADATA",
"query": {
"field": "To",
"value": {
"operator": "ALL",
"exclusive": true,
"terms": [
{ "value": "John Doe", "kind": "NAME" },
{ "value": "Jane Doe", "kind": "NAME" }
]
}
}
}
ADDRESS_FROM format
Used for the From metadata field (sender). Similar to ADDRESS_LIST but each document contains at most one address.
value is an object:
- terms (array of objects) - When more than one term is given, the search matches any of them. Each term object has value and kind (same enum as ADDRESS_LIST).
{
"term": "METADATA",
"query": {
"field": "From",
"value": {
"terms": [
{ "value": "@everlaw.com", "kind": "DOMAIN" },
{ "value": "Everlaw", "kind": "TEXT" }
]
}
}
}
DATE_TIME format
value is an object:
- begin (string, optional) - Lower bound (ISO 8601, e.g. 2007-12-03T10:15:30.00Z).
- end (string, optional) - Upper bound (ISO 8601).
Valid queries must include at least one of begin or end.
{
"term": "METADATA",
"query": {
"field": "Date Sent",
"value": {
"begin": "2007-12-03T10:15:00.00Z",
"end": "2007-12-03T11:15:00.00Z"
}
}
}
BATES format
value is an object:
- prefix (string, optional) - Omitted or null means "any prefix".
-
numRange (object, mandatory):
- begin (string, optional) - Lower bound (inclusive).
- end (string, optional) - Upper bound (inclusive).
Valid numRange must include at least one of begin or end. Bates numbers are strings but treated as numbers (ABC1 matches ABC001).
{
"term": "METADATA",
"query": {
"field": "Other Bates",
"value": {
"prefix": "ABC",
"numRange": { "begin": "1000", "end": "1999" }
}
}
}
NUMBER format
value is an object:
- begin (integer, optional) - Lower bound (inclusive).
- end (integer, optional) - Upper bound (inclusive).
Valid queries must include at least one of begin or end. Set both to the same value to search for an exact number.
{
"term": "METADATA",
"query": {
"field": "Exhibit Number",
"value": { "begin": 2, "end": 4 }
}
}
NATIVE_UPLOADED
Searches for documents uploaded via a native data upload.
Query properties:
- datasetId (integer, optional) - The id of the dataset. See GetDatabaseDatasets for available datasets (not all may be available for the project). Omitted or null matches any native upload.
{ "term": "NATIVE_UPLOADED", "query": { "datasetId": 7 } }
NUM_PAGES
Searches for documents with a number of pages in the given range.
Query properties:
- begin (integer, optional) - Lower bound (inclusive).
- end (integer, optional) - Upper bound (inclusive).
Valid queries must include at least one of begin or end. Set both to the same value to search for an exact page count.
{ "term": "NUM_PAGES", "query": { "begin": 100 } }
PROCESSED_UPLOADED
Searches for documents uploaded via a processed data upload.
Query properties:
- uploadId (integer, optional) - The id of the upload. Omitted or null matches any processed upload.
{ "term": "PROCESSED_UPLOADED", "query": { "uploadId": 78 } }
PROCESSING_FLAG
Searches for documents with the given processing flag.
Query properties:
- flag (string, enum: "CONTAINER_DOC", "CUSTOM_PROCESSED", "EMBEDDED_FILE", "EMBEDDED_FILE_ERROR", "EMPTY_TEXT", "ENCRYPTED", "FLAGGED_MALICIOUS", "HAS_OCR", "HAS_IMAGE_EMBEDS", "HAS_PLACEHOLDER_PDF", "HAS_TRANSCODED_OUTPUT", "HAS_TRANSCRIPTION", "HAS_VALID_TRANSCRIPTION", "METADATA_ERROR", "NIST_DUPLICATE", "OCR_ERROR", "OPENED_WITH_PASSWORD", "PARTIAL_SUPPORT", "UNKNOWN_DOC_TYPE").
{ "term": "PROCESSING_FLAG", "query": { "flag": "ENCRYPTED" } }
PROCESSING_STATE
Searches for documents with the given processing state (stage and status).
Query properties:
- stage (string, enum: "EXAMINE", "ARTIFACTS", "PDF", "TEXT").
- status (string, enum: "SUCCESS", "ERROR").
{
"term": "PROCESSING_STATE",
"query": { "stage": "PDF", "status": "SUCCESS" }
}
PRODUCED
Searches for documents matching the given production criteria. See GetProjectProductions for the available project productions.
Query properties:
- productionId (integer, optional) - Searches for documents produced by this production (or their originals, depending on whichDocs). Omitted or null matches any produced (or original) documents.
- whichDocs (string, default "PRODUCED", enum: "PRODUCED", "ORIGINAL") - Whether to search for the produced documents or the originals they were produced from.
- flag (string, optional, enum: "ENDORSED_BY_CODE", "ERROR_DOCUMENT", "HAS_OCR_TEXT", "NO_SOURCE_IMAGES", "OCR_ERROR", "PLACEHOLDER_IMAGE", "REDACTED_DOCUMENT", "WITHHELD_DOCUMENT") - Filters for documents with the given production flag.
{
"term": "PRODUCED",
"query": {
"productionId": 11,
"whichDocs": "PRODUCED",
"flag": "REDACTED_DOCUMENT"
}
}
PROJECT
Searches for documents of other partial projects within the database.
Query properties:
- id (integer) - The project id. Must be within the same database and must be a partial project. See GetDatabaseProjects for the projects of the database.
{ "term": "PROJECT", "query": { "id": 72 } }
PROMOTION_CODE
Searches for documents with promotion codes matching the given criteria. Only available on ECA (Early Case Assessment) projects.
Query properties:
- code (string, optional, enum: "CUSTODIAN", "DATE_RANGE", "KEYWORD", "OTHER", "PRODUCED", "UNITIZED", "UPLOADED_DIRECTLY") - Omitted or null matches any promotion code on the project.
- userId (integer, optional) - See GetProjectUsers.
- groupId (integer, optional) - See GetProjectGroups.
-
dateRange (object, optional):
- begin (string, optional) - Lower bound (ISO 8601).
- end (string, optional) - Upper bound (ISO 8601).
Only one of userId or groupId may be provided; when neither is provided, the search is for promotion codes regardless of who applied them. Valid dateRange must include at least one of begin or end. If dateRange is null or omitted, the search is for currently coded documents, and userId/groupId must not be specified.
{
"term": "PROMOTION_CODE",
"query": {
"code": "KEYWORD",
"userId": 12345,
"dateRange": {
"begin": "2022-01-01T00:00:00.00Z",
"end": "2022-02-01T00:00:00.00Z"
}
}
}
REDACTIONS
Searches for documents matching the given redaction criteria.
Query properties:
-
stamped (object, optional) - If provided, limits to stamped redactions; otherwise includes unstamped redactions.
- stamp (string, optional) - The specific stamp to search for. Omitted or null matches any stamped redaction.
- type (string, default "ALL", enum: "ALL", "NON_METADATA_ONLY", "METADATA_ONLY") - Filters by redaction type.
- userId (integer, optional) - See GetProjectUsers.
- groupId (integer, optional) - See GetProjectGroups.
-
dateRange (object, optional) - The range of creation or update dates.
- begin (string, optional) - Lower bound (ISO 8601).
- end (string, optional) - Upper bound (ISO 8601).
Only one of userId or groupId may be provided; when neither is provided, the search is for redactions by any user. Valid dateRange must include at least one of begin or end.
{
"term": "REDACTIONS",
"query": {
"stamped": { "stamp": "TOP SECRET" },
"type": "NON_METADATA_ONLY",
"userId": 77,
"dateRange": { "end": "2022-01-04T00:00:00Z" }
}
}
SEARCH_TERM_REPORT
Searches for documents matching Search Term Report criteria. See GetProjectSearchTermReports for the available reports.
Query properties:
- id (integer, optional) - The search term report id. Omitted or null matches hits of any search term report on the project.
- whichDocs (string, default "HITS_AND_FAMILY_MEMBERS_OF_HITS", enum: "HITS_AND_FAMILY_MEMBERS_OF_HITS", "ONLY_HITS", "ONLY_FAMILY_MEMBERS_OF_HITS") - Criteria for inclusion.
{
"term": "SEARCH_TERM_REPORT",
"query": { "id": 72, "whichDocs": "ONLY_FAMILY_MEMBERS_OF_HITS" }
}
TYPE
Searches for documents of the given type.
Query properties:
- type (string, enum: "AUDIO", "BINARY", "CAD", "CALENDAR", "CHAT", "COMPRESSED", "DATABASE", "DOCUMENT", "EMAIL", "EMPTY_FILE", "GIS", "HTML", "IMAGE", "MAILBOX", "MEETING", "OTHER", "PDF", "PRESENTATION", "PROFILE", "PROJECT_MANAGEMENT", "SPREADSHEET", "TEXT", "TRANSCRIPT", "UNKNOWN", "VIDEO").
{ "term": "TYPE", "query": { "type": "SPREADSHEET" } }
VIEWED
Searches for documents with views matching the given criteria.
Query properties:
- userId (integer, optional) - See GetProjectUsers.
- groupId (integer, optional) - See GetProjectGroups.
-
dateRange (object, optional):
- begin (string, optional) - Lower bound (ISO 8601).
- end (string, optional) - Upper bound (ISO 8601).
Only one of userId or groupId may be provided; when neither is provided, the search is for views by any user. Valid dateRange must include at least one of begin or end. Omitted or null matches any time.
{
"term": "VIEWED",
"query": {
"userId": 12345,
"dateRange": {
"begin": "2022-01-01T00:00:00.00Z",
"end": "2022-02-01T00:00:00.00Z"
}
}
}
Errors
The server surfaces failures at two levels:
Transport (HTTP). Authentication, authorization, and transport-level rate-limit failures return HTTP 401, 403, or 429 with a JSON body. Project access failures return:
{ "status": 403, "title": "Not authorized." }
This response is identical whether the project does not exist or the caller lacks access - to avoid leaking project IDs.
Tool result. Argument validation, downstream API failures, and tool-level rate limits surface as a normal MCP CallToolResult with isError: true and a human-readable message in the text content. Common messages:
- "Rate limit exceeded: please retry after 60 seconds"
- "<arg> is not a valid integer"
- "Invalid <arg> '<value>'. Valid values: [...]"
- "Sorry, this tool is unavailable at this time." - generic fallback for unexpected server-side failures
Versioning
The server advertises its version through the MCP initialize response (serverInfo.version). Breaking changes will bump the major version, and we'll publish a changelog before any such change ships.
Support
Please contact Everlaw.