7 tools · Model Context Protocol · Artificial Intelligence · Documents · AI Assistants
Midpage MCP gives agents authorized legal-research tools for searching, retrieving, analyzing, and citing cases, statutes, regulations, and related legal materials.
1Open Slashspace and go to Settings, then Connectors.
2On Discover, search for Midpage MCP and click Connect.
3Sign in to Midpage MCP in your browser. Slashspace updates when the account is connected.
Then ask for what you need in any Agent mode chat. Midpage MCP is on in every chat unless you switch it off.
What your chats can do
7 tools from Midpage MCP.
AnalyzedocketfilingAnalyze one docket filing selected from analyzeDocketReport and answer a focused question using passages from that filing.
Use this when the user needs to understand what a specific filing says. This tool answers from the filing text, not from the docket entry description.
INPUT:
- caseId: The caseId returned by analyzeDocketReport case.caseId.
- entryNumber: The docket entry number returned by analyzeDocketReport relevantEntries[].entryNumber.
- attachmentNumber: Optional attachment number returned by analyzeDocketReport relevantEntries[].attachmentNumber. Omit for the main filing on the docket entry.
- question: The question to answer about this specific filing.
RETURNS:
- status: "ok" or a specific resolution/analysis error.
- filing: Resolved filing metadata, including entryNumber, optional attachmentNumber, dateFiled, suggestedFileName, and a downloadable Midpage file URL for the filing.
- answer: Direct answer based only on the filing text.
- supportingPassages: Passages from the filing that support the answer, with passage and relevance.
- doesNotAddress: Specific parts of the question that the filing text does not answer. Check this before relying on the answer.
CITATION RULES:
- When using filing content in an answer, cite the filing with the format below.
- Every citation must be a markdown hyperlink to filing.url.
- The ECF No. suffix is important and should be included in filing citations.
- Use a descriptive filing name, then any real page/pin/paragraph if available, followed by this suffix: ECF No. {filing.entryNumber} ({filing.dateFiled formatted as "Mar. 3, 2020"}).
- Example: [Pl.'s Mot. for Summ. J. 5, ECF No. 30 (Mar. 3, 2020)]({filing.url})
- If filing.dateFiled is unavailable, omit the parenthetical date rather than inventing one.
- Never use short cites such as "id." or "supra"; repeat the full linked filing citation.
DOWNLOAD GUIDELINES:
- If the user asks to download or save the filing, use filing.suggestedFileName as the filename.
AnalyzedocketreportAnalyze a federal docket report and answer a docket-level question.
Use this for case snapshots, recent activity, procedural posture, service, complaint history, motion history, deadlines, and identifying relevant filings. This tool answers from the docket sheet only; use analyzeDocketFiling when the text of a specific filing is needed.
INPUT:
- court: Federal court. Prefer Bluebook-style abbreviations such as "N.D. Cal.", "S.D.N.Y.", "D. Del.", "Bankr. D. Del.", "9th Cir.", or "Fed. Cir."; full federal court names are also accepted.
- docketNumber: Federal case docket number. Prefer full district/bankruptcy numbers with office or division prefix when known, such as "4:24-cv-04722"; appellate numbers look like "24-1234".
- caseName: Optional case caption/name, such as "Musk v. Altman". Include it when available, especially if the docket number is incomplete.
- forceFetch: Optional. Set true only when the user explicitly needs the latest official PACER docket instead of available cached or RECAP data.
- question: The docket-level question to answer.
RETURNS:
- status: "ok" or a specific resolution/analysis error.
- case: Resolved case metadata, including caseId for analyzeDocketFiling.
- docketReport: Docket report metadata, including suggested filename and a downloadable Midpage file URL when one is available.
- answer: Direct answer based only on the docket sheet.
- relevantEntries: Docket entries or attachments supporting or relevant to the answer. Use case.caseId plus relevantEntries[].entryNumber and optional relevantEntries[].attachmentNumber with analyzeDocketFiling when the filing text is needed.
- doesNotAddress: Specific parts of the question that the docket entries do not answer. Check this before relying on the answer.
- warnings: Important source or parsing limitations, when present.
DOWNLOAD GUIDELINES:
- If the user asks to download or save the docket report, use docketReport.suggestedFileName as the filename.
AnalyzelawAnalyze a statute, regulation, constitutional provision, or agency guidance document against a legal question. Returns verified passages with deep links. REQUIRED before citing or quoting any statute or regulation.
AUTO-USE: whenever an answer depends on the wording, requirements, exceptions, scope, procedures, or current status of a primary-law provision. Never answer from memory or web snippets instead.
LINK RULE: every statute/regulation citation or subsection relied on in the final answer must be a Markdown link: a passage-specific proposition or quote to its deeplinkUrl, a general reference to url. Never invent path segments.
LOOKUP: exactly ONE of citation, path, registerCitation, or id, plus question. Subsection pinpoints ("18 U.S.C. § 924(c)(1)(C)") and popular names ("First Step Act of 2018") are not citation keys: searchLaws with the user's wording, then analyze the chosen result by id, keeping the pinpoint in question. Never guess or silently truncate a citation. Raw text is never returned.
RETURNS: citation, title, number, state, collectionType; analysis {summary, passages [{point, quote, deeplinkUrl}], doesNotAddress: CHECK BEFORE CITING}; isCurrent (in force today), isHistorical (superseded; both false = not yet effective), effectiveDate, publicationDate, sourceAsOf (source edition date); url (this exact version), sourceUrl (official source); children: for containers, up to 250 of childrenTotal child provisions (no text; analyze a child by id, or searchLaws for the section when the list is capped), parentId; versions (analyze another by id with includeHistorical: true); ambiguousMatches (retry by id); error (unresolvable or unsafe to analyze; source-file-only leaves return metadata and url to open, never quote them).
HOW TO USE: quote only returned passages; for a container (nodeType PARENT) drill into the relevant child; check isCurrent before asserting current law; for state comparisons, analyze each provision with the same question and compare propositions, qualifiers, and doesNotAddress.
AnalyzeopinionAnalyze a legal opinion against a specific question. Returns the propositions the case ACTUALLY supports, each with a verified quote, scope limits, and a deep link, plus what it does NOT address. REQUIRED before citing any case.
DOCUMENT: exactly ONE of opinionId (preferred, from search results), reporterCitation (never WL/LEXIS), or docket; no placeholder values. question: the legal question, specific about the legal element.
RETURNS: citation (exact Bluebook string); url (the whole case); supportedPropositions[]: proposition (cite-ready text: USE IT when citing), quote (verbatim), scope (limits), centrality (core_holding > supporting_analysis > secondary_matter > background), opinionSection (any non-majority opinion, e.g. "Jackson, Concurring"), deeplinkURL (opens the case at that passage); doesNotAddress (CHECK BEFORE CITING); summary; disposition; jurisdiction; treatment (citator status, cited-by count).
CITATION FORMAT: every citation is a markdown hyperlink built from the returned fields.
Specific proposition or quote: [{citation}]({deeplinkURL})
Case generally: [{citation}]({url})
Example: [International Shoe Co. v. Washington, 326 U.S. 310 (1945)](https://app.midpage.ai/document/1234567?lines=10-12)
Cite after every legal proposition and quote with the exact citation string returned: never abbreviate, no short cites (id., supra), no LEXIS/WL, no invented reporter pin cites (deeplinkURL is the pinpoint). Add parentheticals and scope limits when relevant.
HOW TO USE: if your intended use appears in doesNotAddress, do NOT cite the case for it (a fact noted in passing is not a rule). Cite the proposition text or a close paraphrase with its qualifiers; prefer core_holding and supporting_analysis. Never present non-majority text as the holding; name its opinionSection.
WRITING: attorney-style paragraphs: topic sentences, crisp rule statements with hyperlinked citations, direct concise answers, verbatim quotes woven into prose. Sparse lists; no block quotes, repetition, or emojis.
FindinopinionFind quotable passages within a single opinion by keyword search. Fast, free, no AI.
USE after a search to check whether a result is actually relevant (like double-clicking into it) and to decide which cases deserve the AI cost of analyzeOpinion: only the most relevant. Also usable directly when the user gives a citation. Optional but recommended.
DO NOT use this tool alone: a case you intend to cite must still go through analyzeOpinion. Default to search unless the user provided a specific citation.
DOCUMENT: exactly ONE of opinionId (preferred, from search results), reporterCitation ("556 U.S. 662"; never WL/LEXIS), or docket {courtAbbreviation, docketNumber}. Omit fields you don't have; never pass placeholder values.
QUERY: key terms to match, NOT a question. GOOD: "personal jurisdiction minimum contacts purposeful availment". BAD: "Does this case establish personal jurisdiction?"
RETURNS: snippets, verbatim passages from the opinion that can be quoted as written.
LIMITS: keyword-only, so passages with different wording are missed; a snippet is easy to take out of context; it does NOT say whether the case supports or contradicts your proposition and does NOT surface qualifiers or exceptions.
NEXT: analyzeOpinion on promising cases for analysis, qualifiers, and verified quotes before citing.
SearchSearch US case law across federal and state courts. Returns matching opinions with Bluebook metadata, highlights, and citator treatment. This is the default first step of legal research: follow it with findInOpinion and/or analyzeOpinion. NEVER cite a case until you have run analyzeOpinion on it.
USE whenever a response needs legal analysis; do not presume to know the answer. If the user gives a specific citation, you may go straight to analyzeOpinion.
RETURNS per case: documentId (pass to findInOpinion/analyzeOpinion), metadata (Bluebook citation: parties, court, date, reporter or docket), highlights (why it matched; NOT for quoting, use findInOpinion), treatment (positive/negative/caution/neutral, citation counts).
QUERIES: hybrid semantic + keyword matching. Use key terms ("personal jurisdiction minimum contacts purposeful availment"), natural-language propositions or questions, or exact identifiers verbatim ("556 U.S. 662", "patent no 7,479,949"). Run up to 4 queries per call, in parallel, for different issues; each returns up to 10 results. Narrow with the filter fields; omit publishStatus unless the user explicitly asks to restrict by publication status.
PAGINATION: each queryOutcomes entry reports resultCount and pagination. For one query's next page call search({ queries: [{ cursor: "<pagination.nextCursor>" }] }) with cursor only (no query or filters); continuations mix with new queries. Pages hold 10 cases, up to 100 distinct per query; duplicates across queries are merged and totalResults counts the merged set. Stop when nextCursor is absent: search is not exhaustive, refine instead. Cursors expire 30 minutes after the initial search (pagination.expiresAt); reuse returns the same page; if expired or invalid, rerun the query. paginationError: first page usable but not continuable; a failed query never discards the others.
NEXT: review highlights and treatment, findInOpinion on 3-5 candidates for quotable passages, then analyzeOpinion on every case you will rely on (REQUIRED before citing).
SearchlawsSearch Midpage's US primary-law corpus: statutes, regulations, constitutions, and agency guidance for federal law, all 50 states, and DC. BM25 keyword search (not semantic) over text, headings, and citations.
AUTO-USE: call this whenever a user asks what a statute, code section, regulation, administrative rule, or constitutional provision says, requires, permits, or prohibits, or whether it applies. Do not wait for words like "research" or "Midpage", and do not default to web search for primary-law text. FIND the governing provision here, then analyzeLaw with its id for verified text before citing.
RESOLUTION: subsection pinpoints ("18 U.S.C. § 924(c)(1)(C)") and popular/source-law names ("First Step Act of 2018", "ERISA § 514") go through search first: search the user's full wording, choose the intended provision, analyzeLaw by id. Never guess a codified citation or silently truncate a pinpoint.
Results are the law in force TODAY unless currentOnly is false (not superseded, not future-effective, no in-force successor).
RETURNS:
- results: id (pass to analyzeLaw), citation, title, number, state, collectionId/collectionType, path, nodeType, effectiveDate, snippets (matched fragments, <em> marks the hit), isCurrent/isHistorical (both false = not yet effective), url (Midpage page for that exact version)
- total: estimate; the authoritative currency check may drop index-stale rows, so a page can hold fewer than pageSize results (continue normally)
- stateCounts: estimated per-state hits for the WHOLE query, not this page: scope surveys with them, verify each state with a filtered search; not proof of coverage
- error: replaces results when a filter could not be resolved (did-you-mean suggestions included) or the page window was exceeded; says how to fix the call
HOW TO USE: search broad, then narrow with the filter fields. NEVER cite from snippets; quote from analyzeLaw. N-state surveys: one unfiltered query, read stateCounts, per-state filtered queries, then analyzeLaw the top provisions.