Mary
Extract and verify the facts
- Category
- Operations
- Primary Subcategory
- Legal Practice & Matter Platforms
Integration details
Description
Mary lets you extract, interrogate, and verify the complete fact record of a matter directly from ChatGPT. Every answer comes from your documents with the source cited, including what was left out, and why.
- Integration type
- Plugin
- Verification status
- Not applicable
- Platform
- ChatGPT
- Primary Subcategory
- Legal Practice & Matter Platforms
- Secondary Subcategories
- None listed
- Brand
- Mary Technology
- Access
- Account required
- First tracked
- 2026-09-05
- Tool count
- 24
- Geography
- US
The Primary Subcategory used for this profile’s headline score.
Other Subcategories where the Integration is listed.
ChatGPT Plugin Discovery Score
ChatGPT Plugin discovery is coming soon
ChatGPT can surface a Plugin when it matches a user's request.Your Plugin Discovery Score measures how often yours appears.
No spam. Unsubscribe any time.
What discovery looks like

Competing in ChatGPT Legal Practice & Matter Platforms
View Category24 tools agents can invoke
Use when the user asks to analyze bank statements, trace money, or review financial transactions in a Mary matter (a bank statement analysis in Mary). The run reads the matter's financial documents and builds a table of transactions, each citing the statement page it came from. The query describes the requested analysis — name the accounts, bound the period, and state the thresholds or counterparties of interest. The read_mary_guide topic 'financial-analysis' has fuller query guidance and examples. Successful completion creates a persistent financial-analysis workspace in Mary; runs can take several minutes. It does not modify the matter's source documents. Each invocation is a non-destructive write to the authenticated user's private Mary account: it adds an assistant turn to the conversation and starts asynchronous processing. Omitting conversation_id creates a new conversation; providing it continues that conversation. reference_document_ids, when provided, limits the source documents used. The initial response contains a run_id. assistant_wait_for_run returns the run's status and eventual result. A run may return an elicitation_request containing follow-up questions for the user. assistant_reply_to_elicitation submits the user's answers and continues the run; its elicitation_response.messageId must match the request's messageId.
analyze_bank_statements
Submits the user's answers to an elicitation_request and continues the run. It takes the run_id of the run that returned the elicitation_request and returns a new run_id, whose result is retrieved with assistant_wait_for_run. The elicitation_response.messageId must equal elicitation_request.messageId (required). answers holds one item per question, keyed by questionId, with option ids in selectedOptionIds and other input types in the matching typed value field. message is the optional short user-visible confirmation text.
assistant_reply_to_elicitation
Get the audit and review history for one workspace entry. Use artifact_id from search_workspaces and item_id from get_workspace or query_workspace (item_id is returned as each row's itemId). The optional action and category arguments narrow the timeline to one audit action or category. The result includes who acted, when it happened, review notes, and before/after field changes. This tool displays nothing by itself; it returns the timeline plus a task_id. When an interactive timeline would help the user inspect the result, call render_search_results with that task_id. Skip rendering when this call is only supporting internal research, reasoning, or another intermediate tool call. The renderer shows a read-only timeline consistent with Mary's entry-history view.
get_audit_trail
Use when the user asks to generate a chronology — a timeline of events — from the documents in a Mary matter. A chronology is Mary's table of dated events extracted from the matter's uploaded documents, each entry citing the source document and page it came from. Despite the name, it also builds other generic tables from the documents — a dramatis personae of the people and parties, a schedule of documents, an issues table — when the query asks for one. The query describes the requested scope, focus, and formatting: bound it by date range, documents, or issue and name the columns wanted, or leave it broad for a general chronology of the matter. The read_mary_guide topic 'chronologies' has fuller scoping guidance and examples. Successful completion creates a persistent chronology workspace in Mary that the team can review, filter, and export; runs can take several minutes. It does not modify the matter's source documents. Each invocation is a non-destructive write to the authenticated user's private Mary account: it adds an assistant turn to the conversation and starts asynchronous processing. Omitting conversation_id creates a new conversation; providing it continues that conversation. reference_document_ids, when provided, limits the source documents used. The initial response contains a run_id. assistant_wait_for_run returns the run's status and eventual result. A run may return an elicitation_request containing follow-up questions for the user. assistant_reply_to_elicitation submits the user's answers and continues the run; its elicitation_response.messageId must match the request's messageId.
create_chronology
List the document index for a matter by matter name. The document index is Mary's split-and-categorised list of what is actually inside the matter's uploaded files: each source file (often a large PDF bundle) is broken into the individual documents Mary detected inside it — each with a title, one-line description, document type, date, page range, source file, and relevance rating. Use it to answer "what documents do we have?" for a matter. This tool displays nothing by itself; it returns the index plus a task_id. When an interactive, searchable table would help the user inspect the result, call render_search_results with that task_id. Skip rendering when this call is only supporting internal research, reasoning, or another intermediate tool call. The rendered view matches the Mary web app's Document index page.
get_document_index
Use when the user asks to draft a document — a letter of advice, case outline, letter of instruction, letter of claim, or similar — from the materials in a Mary matter. The query supplies the drafting instructions; Mary drafts best from explicit headings (e.g. 'a letter of advice with the headings: Background facts; Executive summary; Liability; Quantum; Next steps'), plus the audience and length. template_id selects one of the firm's templates (list them with get_draft_templates), while omitting template_id produces a free-form draft. The read_mary_guide topic 'drafting' has the full heading patterns and common letter types. Successful completion creates a persistent draft in Mary — a document grounded in the matter's record with citations back to source documents. It does not modify the matter's source documents. Each invocation is a non-destructive write to the authenticated user's private Mary account: it adds an assistant turn to the conversation and starts asynchronous processing. Omitting conversation_id creates a new conversation; providing it continues that conversation. reference_document_ids, when provided, limits the source documents used. The initial response contains a run_id. assistant_wait_for_run returns the run's status and eventual result. A run may return an elicitation_request containing follow-up questions for the user. assistant_reply_to_elicitation submits the user's answers and continues the run; its elicitation_response.messageId must match the request's messageId.
draft_document
List the draft templates available for a matter. Draft templates are your organisation's reusable drafting templates, automatically scoped to the matter's practice area. Use this to answer "which templates are available?" or to resolve a template the user names before drafting. Each result has a templateId and name. To write from a template, pass its templateId to draft_document as template_id. An empty list means no template is configured for this matter — write the draft free-form (call draft_document without a template_id).
get_draft_templates
Export the complete workspace as a downloadable DOCX or XLSX file. A workspace (previously called an artifact or task) is a generated output such as a chronology or a financial/bank-statement analysis. Use artifact_id from search_workspaces. This always exports the full workspace — unlike the Mary web app's "Current view" export, no search, filters, sorting, or row selection are applied. A fresh server-side export is generated on every call. XLSX is the default; DOCX produces a Word document, the usual choice for chronologies and drafts. The result is a temporary, signed download URL for the generated DOCX/XLSX file — a binary document meant to reach the user as a download link.
export_workspace
Use when the user asks a factual question about the documents in a Mary matter — 'did X ever…', 'what do the records show about…', 'summarise the key issues'. This is Mary's Fact Explorer: it reads the matter's uploaded documents and answers in plain language, citing the facts and source documents behind each point. Specific questions get better answers — name the people, dates, and topics, and say what shape the answer should take (a table, a list in date order, chosen columns). It can also produce one-off custom chronology tables scoped by date range, document, or issue. The read_mary_guide topic 'fact-explorer' has fuller phrasing guidance and question patterns. The completed run returns a source-grounded answer with citations. It does not modify source documents or create a workspace. Fact Explorer is only available on matters created on or after 20 November 2025. Each invocation is a non-destructive write to the authenticated user's private Mary account: it adds an assistant turn to the conversation and starts asynchronous processing. Omitting conversation_id creates a new conversation; providing it continues that conversation. reference_document_ids, when provided, limits the source documents used. The initial response contains a run_id. assistant_wait_for_run returns the run's status and eventual result. A run may return an elicitation_request containing follow-up questions for the user. assistant_reply_to_elicitation submits the user's answers and continues the run; its elicitation_response.messageId must match the request's messageId.
ask_fact_explorer
Fetch one page of the document index for the search-results app UI. Backend tool for the widget's server-side quick search: document_id comes from the rendered payload, so no matter re-resolution is needed, and the structured content is the same envelope the stored ``get_document_index`` result uses (documents, total, documentId) — no task id is minted. Not addressed to the model — it is hidden behind ``ui.visibility: ["app"]``.
get_document_index_page
Mint a short-lived signed URL for one source document's PDF. Backend tool for the workspace widget's PDF viewer: document_id comes from the rendered payload, file_id from a citation or the documents list. The link expires after about 10 minutes — the widget re-calls this on a failed load rather than caching links. Not addressed to the model — it is hidden behind ``ui.visibility: ["app"]``.
get_file_preview
Fetch one page of matching matters for the search-results app UI. Backend tool for the widget's server-side quick search: it returns the same payload envelope the stored ``search_matters`` result uses (matters, totalCount, page, searchName, maryUrl) directly in the structured content — no task id is minted. Not addressed to the model — it is hidden behind ``ui.visibility: ["app"]``.
get_matters_page
Get one workspace of a matter: its details and its rows, in one call. A workspace (previously called an artifact or task) is a generated output such as a chronology or a financial/bank-statement analysis. Use artifact_id from search_workspaces. This tool returns the workspace summary, source-document usage, and review-flag counts TOGETHER WITH the first page of matching rows — no separate details or search call is needed. IMPORTANT: this tool does not display anything by itself. It returns a task_id. When an interactive view would help the user inspect the result, call render_workspace with that task_id. Skip rendering when this call is only supporting internal research, reasoning, or another intermediate tool call. Table workspaces retain the interactive rows view and details tabs; draft workspaces render as a read-only Markdown page with clickable citations and no details tab. Every argument beyond the ids is optional — call with none of them to see the workspace and browse the first page of rows, discovering the column keys (each row's `data` is keyed by column key). Each row also includes itemId; pass it as item_id to get_audit_trail. Then narrow: - search: free-text, case-insensitive match over the row's text columns (e.g. event / description); not dates, numbers, filenames, citations. - filters: a list of {field_key, op, value} rules (see ArtifactFilter), combined with join_operator ("and" by default; "or" to widen). - sort_by / sort_order: order by a column key, ascending or descending. - limit / cursor: page size (max 100) and the rows nextCursor of a prior call. Field keys: - Data columns use their own key (from an unfiltered call's row `data`), e.g. a chronology commonly uses "date" and "event". Always use the exact key returned for this workspace; do not infer a key from its label or from another workspace. - "citation.file_id" filters by cited source file; the value is a file id (or list) from this tool's documents used list. - "annotation.type" filters by review flag; the value is a flag type (or list) from this tool's annotations, e.g. "gap". - "review_status" filters by review state; values are "verified", "needs_review", and "unverified" (rows never reviewed). Use the "in" op. Citation and annotation fields support the "eq" and "in" ops. Examples (showing the args you pass): - Free text: search="wire transfer" - One value: filters=[{"field_key": "event_type", "op": "eq", "value": "payment"}] - Any of several values: filters=[{"field_key": "event_type", "op": "in", "value": ["payment", "invoice"]}] - Substring match: filters=[{"field_key": "description", "op": "contains", "value": "Ltd"}] - Date / number range: filters=[{"field_key": "date", "op": "range", "value": {"gte": "2026-01-01", "lte": "2026-03-31"}}] - Rows citing a specific source file: filters=[{"field_key": "citation.file_id", "op": "in", "value": ["doc-005", "doc-012"]}] - Rows carrying a specific review flag: filters=[{"field_key": "annotation.type", "op": "eq", "value": "contradiction"}] - Rows not yet verified by a reviewer: filters=[{"field_key": "review_status", "op": "in", "value": ["needs_review", "unverified"]}] - Widen with OR, then sort and page: filters=[...], join_operator="or", sort_by="date", sort_order="asc", limit=50 # then pass cursor=<nextCursor>
get_workspace
Fetch one page of workspace rows for the workspace app UI. Backend tool for the widget's progressive loading: document_id comes from the rendered payload, so no matter re-resolution is needed. Not addressed to the model — it is hidden behind ``ui.visibility: ["app"]``.
get_workspace_rows
Read the built-in guide to working with Mary through these tools. Call it without a topic for the table of contents, then with a topic slug for that page. Consult it when unsure how to phrase a generation query, what a Mary term means, how relevance/review works, or how to build links into the Mary web app (topic "linking"). Content is served by this server itself: reading it consumes no Mary credits and touches no matter data.
read_mary_guide
Get the contextual summary of a matter by matter name. The matter summary is the standing description of the case in Mary — its Overview, Key Issues, People & parties, Entities, and Additional Notes sections. Mary scores every extracted fact against it (the relevance ratings), so it reflects the team's current case theory. Use it to orient on what a matter is about before deeper work such as searching the workspace, drafting, or asking Fact Explorer. It can only be edited in the Mary web app. Returns the summary plus its revision number. A null summary means none has been written yet; legacy matters may return the summary as a single block of text instead of sections.
get_matter_summary
Search, filter, sort, and page the rows inside one workspace of a matter. A workspace (previously called an artifact or task) is a generated output such as a chronology or a financial/bank-statement analysis; this tool queries the rows inside one and returns just the matching page. Backed by the Mary artifact query API (POST /api/mcp/matters/{matterId}/tasks/{artifactId}/query). Use get_workspace instead when you also want the workspace's details (summary, source documents, review flags) alongside the rows. IMPORTANT: this tool displays nothing by itself. It returns the data plus a task_id. When an interactive rows table would help the user inspect the result, call render_workspace with that task_id. Skip rendering when this call is only supporting internal research, reasoning, pagination, or another intermediate tool call. Use artifact_id from search_workspaces. Every argument beyond the ids is optional — call with none of them to browse the first page and discover the column keys (each row's `data` is keyed by column key). Each row also includes itemId; pass it as item_id to get_audit_trail. Then narrow: - search: free-text, case-insensitive match over the row's text columns (e.g. event / description); not dates, numbers, filenames, or citations. - filters: a list of {field_key, op, value} rules (see ArtifactFilter), combined with join_operator ("and" by default; "or" to widen). - sort_by / sort_order: order by a column key, ascending or descending. - limit / cursor: page size (max 100) and the `nextCursor` of a prior page. Field keys: - Data columns use their own key (from an unfiltered query's `data`), e.g. a chronology commonly uses "date" and "event". Always use the exact key returned for this workspace; do not infer a key from its label or from another workspace. - "citation.file_id" filters by cited source file; the value is a file id (or list) from get_workspace (workspace.documents.used[].id). - "annotation.type" filters by review flag; the value is a flag type (or list) from get_workspace (workspace.annotations[].type), e.g. "gap". - "review_status" filters by review state; values are "verified", "needs_review", and "unverified" (rows never reviewed). Use the "in" op. Citation and annotation fields support the "eq" and "in" ops. Examples (showing the args you pass): - Free text: search="wire transfer" - One value: filters=[{"field_key": "event_type", "op": "eq", "value": "payment"}] - Any of several values: filters=[{"field_key": "event_type", "op": "in", "value": ["payment", "invoice"]}] - Substring match: filters=[{"field_key": "description", "op": "contains", "value": "Ltd"}] - Date / number range: filters=[{"field_key": "date", "op": "range", "value": {"gte": "2026-01-01", "lte": "2026-03-31"}}] - Rows citing a specific source file: filters=[{"field_key": "citation.file_id", "op": "in", "value": ["doc-005", "doc-012"]}] - Rows carrying a specific review flag: filters=[{"field_key": "annotation.type", "op": "eq", "value": "contradiction"}] - Rows not yet verified by a reviewer: filters=[{"field_key": "review_status", "op": "in", "value": ["needs_review", "unverified"]}] - Widen with OR, then sort and page: filters=[...], join_operator="or", sort_by="date", sort_order="asc", limit=50 # then pass cursor=<nextCursor> for page 2
query_workspace
Display a previously fetched browse result as an interactive view. Pass the task_id returned by search_matters, search_workspaces, get_document_index, get_audit_trail, or get_sources; the view matches the tool that produced it — a matter or workspace table mirroring the Mary web app's list pages (quick search, sortable columns, status pills, per-row deep links), the document-index table (date, title, description, type, source file, and relevance, like Mary's Document index page, where clicking a source file opens its PDF side-by-side), the sources table (file name, pages, upload date, and status, like Mary's Sources tab), or the entry-history audit timeline — with a fullscreen control for viewing everything. Call this when the interactive view would help the user inspect the result. Do not call it when the data is only supporting internal research, reasoning, pagination, ID resolution, or another intermediate tool call. Results are kept for about an hour.
render_search_results
Display a previously fetched task result as an interactive app view. Pass the task_id returned by get_workspace or query_workspace; the view matches the tool that produced it. A get_workspace task renders either the established rows table with its original details tab or, for a draft workspace, a read-only Markdown document with clickable citation PDFs and no details tab. A query_workspace task always renders the rows table scoped to the query. Call this renderer when the interactive view would help the user inspect the result. Do not call it when the data is only supporting internal research, reasoning, pagination, or another intermediate tool call. Results are kept for about an hour.
render_workspace
Search your matters by name. Returns matching matter names and metadata. A matter is Mary's case file: it holds the documents uploaded for a case and everything generated from them (chronologies, analyses, drafts). Each matter includes its name, id, firm matter ID, contributors, creation date, and status. Leave name empty to list your most recent matters. Results are paged: when totalCount exceeds the matters returned, call again with page=2, 3, … and the same name. Pass a returned matter name to the other Mary tools (search_workspaces, create_chronology, ask_fact_explorer, …) to work inside that matter. This tool displays nothing by itself; it returns the data plus a task_id. When an interactive list would help the user inspect the result, call render_search_results with that task_id. Skip rendering when the search is only supporting internal research, pagination, ID resolution, or another intermediate tool call.
search_matters
List the workspaces for a matter (chronologies, analyses, drafts). A workspace — sometimes referred to as a task or artifact — is a generated output inside the matter: a chronology (timeline of dated, cited events), a bank-statement/financial analysis (transaction table), or a draft document. Returns each workspace's name, id, type, creator, creation date, and status. Use the returned artifact_id with get_workspace to load any single workspace and its rows. This tool displays nothing by itself; it returns the data plus a task_id. When an interactive list would help the user inspect the result, call render_search_results with that task_id. Skip rendering when this call is only supporting internal research, ID resolution, or another intermediate tool call.
search_workspaces
Mark one workspace row verified, or send it back to needs-review. Backend tool for the workspace widget's reviewed/undo control: document_id and artifact_id come from the rendered payload, item_id from the row. Not addressed to the model — it is hidden behind ``ui.visibility: ["app"]``.
set_workspace_item_review
List the source documents uploaded to a matter, by matter name. Sources are the files the matter is built from — every chronology entry, fact, and analysis cites back to them. Each source includes its file name, page count, upload date, processing status, and whether it was a manual entry (a source the user recorded without a file, e.g. a phone call). Use it to answer "what files have we uploaded?" for a matter; for what Mary detected *inside* those files, use get_document_index instead. Results are paged: when total exceeds the sources returned, call again with page=2, 3, … and the same matter_name. This tool displays nothing by itself; it returns the source list plus a task_id. When an interactive, searchable table would help the user inspect the result, call render_search_results with that task_id. Skip rendering when this call is only supporting internal research, reasoning, or another intermediate tool call. The rendered view matches the Mary web app's Sources tab.
get_sources
Polls a Mary assistant run until it is terminal or a bounded timeout expires. It takes the run_id returned by ask_fact_explorer, create_chronology, analyze_bank_statements, or draft_document. Completed responses include the answer, artifact ids, generated outputs, and any elicitation request; a run still in progress is returned as running and polled again on the next call — generation runs commonly take several minutes, so repeated calls are normal. When the result carries an elicitation_request, the attached Mary card walks the user through the questions, submits their answers, and tracks the continued run to completion itself, recording the outcome in the model context when the user finishes.
assistant_wait_for_run
How do I improve a ChatGPT Plugin's discoverability?
The levers are the listing surface agents actually read: names, descriptions, keywords, tool metadata, and registry health. Which lever matters depends on where discovery breaks, which is what continuous measurement shows.
What are Mary alternatives on ChatGPT?
As of 2026-09-07, Mary competes with Aurora, Casepoint, Casepoint Gov, Chat Jurídico, Courtroom5, GC AI, JUNE, LawVu, Quilia in ChatGPT Legal Practice & Matter Platforms, ranked by public Discoverability Score.
Where is this profile measured?
This profile uses the geography attached to the latest public registry snapshot: US. Locale tags are intentionally omitted.