Everlaw MCP Server

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:

  1. Pick a search term. Read its schema in Search term reference below (or call DescribeProjectSearchTerm).
  2. Run the search. Call PostProjectSearch with projectId, term, and a matching query. The response includes a searchId.
  3. 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.