Legal MCP Server
法院記錄、專利檢索、商標查詢及法律文件研究
文件
Legal & IP Intelligence MCP — Courts, Enforcement & TTAB for AI (nexgendata/legal-mcp-server) Actor
MCP server giving AI agents ten US legal & IP tools in one connection: court records, case law, federal dockets (RECAP), judges, oral arguments, SEC litigation, FINRA BrokerCheck, TTAB oppositions, copyright records & trademark-conflict alerts. Pay per call.
- URL: https://apify.com/nexgendata/legal-mcp-server.md
- Developed by: NexGenData (community)
- Categories: AI, Automation, MCP servers
- Stats: 9 total users, 3 monthly users, 99.6% runs succeeded, 0 bookmarks
- User rating: No ratings yet
Pricing
from $10.00 / 1,000 results
This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event
What's an Apify Actor?
Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases. In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours, and optionally produces a well-defined JSON output, datasets with results, or files in key-value store. In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server. Actors are written with capital "A".
How to integrate an Actor?
If asked about integration, you help developers integrate Actors into their projects. You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready. The best way to integrate Actors is as follows.
In JavaScript/TypeScript projects, use official JavaScript/TypeScript client:
npm install apify-client
In Python projects, use official Python client library:
pip install apify-client
In shell scripts, use Apify CLI:
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash
In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).
If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).
For usage examples, see the [API](#api) section below.
For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).
# README
## Legal & IP Intelligence MCP — Courts, Enforcement & TTAB for AI
**One MCP connection. US courts, litigation, enforcement, and IP — all agent-ready.**
Most legal MCP servers stop at court records. This one unifies ten US legal and IP data streams behind a single connection — court records, case law, federal dockets, judges, oral arguments, SEC enforcement, FINRA BrokerCheck, USPTO TTAB oppositions, copyright registrations, and trademark-conflict alerts — each returning the same normalized JSON envelope. Connect Claude, ChatGPT, or Cursor once and run litigation monitoring, enforcement/compliance screening, and brand-protection diligence without wiring up a dozen separate scrapers or paying PACER per page.
---
### Why this exists
Legal and IP data is high-value, public, and notoriously fragmented. Federal dockets live behind PACER's per-page paywall and the RECAP archive; case law sits in CourtListener; trademark oppositions are in the USPTO's TTAB system; copyright registrations are in a separate Copyright Office catalog; enforcement actions are scattered across SEC litigation releases and FINRA BrokerCheck. Each source has its own format, its own rate limits, and no shared schema. Pulling them together for an agent means solving each one — and re-solving as the systems change.
This MCP server does that work once and exposes the result as agent-native tools. The same NexGenData infrastructure that powers our standalone legal and IP actors — used by litigators, IP counsel, compliance teams, and legal-tech builders — now sits behind a single streamable-HTTP endpoint.
This server is litigation- and enforcement-focused. For deep **patent search** (claims, citations, prior art, inventor/assignee lookups), pair it with our companion **Patents & Trademarks (IP) MCP**, which is purpose-built for that.
---
### The ten tools
| Tool | What it does |
|------|--------------|
| `search_court_records` | Search US public court case records by party, case number, or keyword |
| `search_case_law` | Search US court opinions and published case law (CourtListener) |
| `search_federal_dockets` | Search federal dockets and filings from the RECAP/PACER archive |
| `search_judges` | Look up US federal and state judges — bios, appointments, positions |
| `search_oral_arguments` | Search the index of appellate oral-argument audio recordings |
| `track_sec_litigation` | Track SEC enforcement actions and litigation releases |
| `search_finra_brokercheck` | Search FINRA BrokerCheck — broker/firm registration and disclosures |
| `track_ttab_oppositions` | Track USPTO TTAB trademark opposition and cancellation proceedings |
| `search_copyright_records` | Search the US Copyright Office catalog of registered works |
| `watch_trademark_conflicts` | Monitor new USPTO & EUIPO filings that may conflict with a watched mark |
Every tool accepts a `criteria` object (party names, keywords, dates, courts, etc.) and a `limit`, and returns a uniform envelope: a human-readable summary plus `structuredContent` with the records.
---
### Quick start
#### Connect from Claude Desktop / any MCP client
```json
{
"mcpServers": {
"legal-ip-intelligence": {
"url": "https://nexgendata--legal-mcp-server.apify.actor/mcp",
"headers": { "Authorization": "Bearer YOUR_APIFY_TOKEN" }
}
}
}
That's the whole setup. Your agent now has ten US legal & IP tools.
Call a tool
// tools/call
{
"name": "track_sec_litigation",
"arguments": {
"criteria": { "startdt": "2026-01-01", "keyword": "insider trading" },
"limit": 25
}
}
Response shape
{
"tool": "SEC Litigation Releases",
"count": 3,
"total_available": 41,
"results": [
{ "...": "normalized records from the underlying source" }
]
}
Every tool returns this same {tool, count, total_available, results} envelope, so you write one parser for all ten.
Common agent workflows
Litigation monitoring. Chain search_federal_dockets and search_court_records on a party name to build a live case-tracking feed, then use search_judges to pull the assigned judge's background for strategy.
Enforcement & compliance screening. Run track_sec_litigation and search_finra_brokercheck against a person or firm to surface securities-enforcement history and broker disclosures in one pass — useful for diligence, KYC, and counterparty risk.
Brand protection. Combine watch_trademark_conflicts with track_ttab_oppositions so your agent flags both new conflicting filings and active opposition/cancellation proceedings against marks you care about.
Legal research. Use search_case_law for precedent and search_oral_arguments to find the appellate audio behind a holding.
IP portfolio diligence. Pair search_copyright_records with the companion Patents MCP to cover registered works and patents together.
Because every tool returns the same shape, chaining them is trivial.
Pricing
This server is pay-per-event:
- $0.02 per tool call — you pay only when your agent actually queries.
- $0.05 per bulk result — added when a single call returns more than 10 records.
- Negligible per-session start fee.
No subscription, no seat license, no minimum. An agent firing 300 legal queries a month costs about $6 — versus the per-search PACER fees and the four- and five-figure annual seats charged by Westlaw, LexisNexis, and Bloomberg Law.
How this compares
vs. Westlaw / LexisNexis / Bloomberg Law: Those are built for human researchers and priced for law firms. This is built for agents and priced per call, returning machine-ready JSON with source identifiers — not a research UI you have to scrape.
vs. raw PACER + CourtListener + USPTO + Copyright Office: Each is free or cheap individually but has a different format, auth model, and rate limit. This server unifies ten of them behind one schema and one connection.
vs. building your own: You'd maintain a docket scraper, a case-law client, TTAB and Copyright catalog parsers, plus SEC and FINRA collectors — and keep them all working. This is that stack, already built, behind one URL.
Companion servers
- Patents & Trademarks (IP) MCP — purpose-built patent search (claims, citations, prior art, assignee/inventor).
- SEC Corporate Events MCP — market-moving SEC filings (M&A, IPOs, buybacks, proxy fights).
- Regulatory Filings MCP — broad SEC/disclosure/compliance filing search.
All share the same connection model, so adding another is a one-line config change.
FAQ
Do I need a PACER or CourtListener account? No. You only need an Apify token to authenticate to the MCP endpoint; upstream access is handled server-side.
How fresh is the data? Each tool queries its source live at call time, so you get records as soon as they're available in the underlying system.
Can I filter by court, date, or party?
Yes — pass those in the criteria object. Supported filters depend on the source; party/keyword search and date ranges work broadly.
Is this legal advice? No. This server returns public records for informational and research purposes only. It is not legal advice and not a substitute for a licensed attorney.
Does it cover patents? Patent litigation and copyright/trademark enforcement are here; deep patent search lives in the companion Patents & Trademarks (IP) MCP.
Is the response schema stable? Yes — every tool returns the same envelope, so one parser handles all ten. We version any changes.
Support & feedback
Issues, feature requests, or want another legal/IP source added? Reach out through the Apify Store contact on the NexGenData publisher page.
Legal & IP Intelligence MCP — by NexGenData. Courts, enforcement, and IP, agent-ready.
Related NexGenData Actors
Pair this legal & IP MCP with the rest of the NexGenData IP/legal fleet:
- Patents & Trademarks (IP) MCP — Patent Search for AI Agents — companion agent server for patent search
- USPTO Trademark Search — Knockout & Clearance
- USPTO Patent Search — Claims & Prior Art
- EUIPO Trademark Search — TMview & eSearch
- WIPO PATENTSCOPE Patent Search
Actor input Schema
Actor input object example
{}
API
You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.
JavaScript example
import { ApifyClient } from 'apify-client';
// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
token: '<YOUR_API_TOKEN>',
});
// Prepare Actor input
const input = {};
// Run the Actor and wait for it to finish
const run = await client.actor("nexgendata/legal-mcp-server").call(input);
// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
console.dir(item);
});
// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs
Python example
from apify_client import ApifyClient
# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")
# Prepare the Actor input
run_input = {}
# Run the Actor and wait for it to finish
run = client.actor("nexgendata/legal-mcp-server").call(run_input=run_input)
# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)
# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start
CLI example
echo '{}' |
apify call nexgendata/legal-mcp-server --silent --output-dataset
MCP server setup
{
"mcpServers": {
"apify": {
"command": "npx",
"args": [
"mcp-remote",
"https://mcp.apify.com/?tools=nexgendata/legal-mcp-server",
"--header",
"Authorization: Bearer <YOUR_API_TOKEN>"
]
}
}
}
OpenAPI specification
{
"openapi": "3.0.1",
"info": {
"title": "Legal & IP Intelligence MCP — Courts, Enforcement & TTAB for AI",
"description": "MCP server giving AI agents ten US legal & IP tools in one connection: court records, case law, federal dockets (RECAP), judges, oral arguments, SEC litigation, FINRA BrokerCheck, TTAB oppositions, copyright records & trademark-conflict alerts. Pay per call.",
"version": "0.0",
"x-build-id": "G97OlMfePyCJ5p5EJ"
},
"servers": [
{
"url": "https://api.apify.com/v2"
}
],
"paths": {
"/acts/nexgendata~legal-mcp-server/run-sync-get-dataset-items": {
"post": {
"operationId": "run-sync-get-dataset-items-nexgendata-legal-mcp-server",
"x-openai-isConsequential": false,
"summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
"tags": [
"Run Actor"
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/inputSchema"
}
}
}
},
"parameters": [
{
"name": "token",
"in": "query",
"required": true,
"schema": {
"type": "string"
},
"description": "Enter your Apify token here"
}
],
"responses": {
"200": {
"description": "OK"
}
}
}
},
"/acts/nexgendata~legal-mcp-server/runs": {
"post": {
"operationId": "runs-sync-nexgendata-legal-mcp-server",
"x-openai-isConsequential": false,
"summary": "Executes an Actor and returns information about the initiated run in response.",
"tags": [
"Run Actor"
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/inputSchema"
}
}
}
},
"parameters": [
{
"name": "token",
"in": "query",
"required": true,
"schema": {
"type": "string"
},
"description": "Enter your Apify token here"
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/runsResponseSchema"
}
}
}
}
}
}
},
"/acts/nexgendata~legal-mcp-server/run-sync": {
"post": {
"operationId": "run-sync-nexgendata-legal-mcp-server",
"x-openai-isConsequential": false,
"summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
"tags": [
"Run Actor"
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/inputSchema"
}
}
}
},
"parameters": [
{
"name": "token",
"in": "query",
"required": true,
"schema": {
"type": "string"
},
"description": "Enter your Apify token here"
}
],
"responses": {
"200": {
"description": "OK"
}
}
}
}
},
"components": {
"schemas": {
"inputSchema": {
"type": "object",
"properties": {}
},
"runsResponseSchema": {
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"actId": {
"type": "string"
},
"userId": {
"type": "string"
},
"startedAt": {
"type": "string",
"format": "date-time",
"example": "2025-01-08T00:00:00.000Z"
},
"finishedAt": {
"type": "string",
"format": "date-time",
"example": "2025-01-08T00:00:00.000Z"
},
"status": {
"type": "string",
"example": "READY"
},
"meta": {
"type": "object",
"properties": {
"origin": {
"type": "string",
"example": "API"
},
"userAgent": {
"type": "string"
}
}
},
"stats": {
"type": "object",
"properties": {
"inputBodyLen": {
"type": "integer",
"example": 2000
},
"rebootCount": {
"type": "integer",
"example": 0
},
"restartCount": {
"type": "integer",
"example": 0
},
"resurrectCount": {
"type": "integer",
"example": 0
},
"computeUnits": {
"type": "integer",
"example": 0
}
}
},
"options": {
"type": "object",
"properties": {
"build": {
"type": "string",
"example": "latest"
},
"timeoutSecs": {
"type": "integer",
"example": 300
},
"memoryMbytes": {
"type": "integer",
"example": 1024
},
"diskMbytes": {
"type": "integer",
"example": 2048
}
}
},
"buildId": {
"type": "string"
},
"defaultKeyValueStoreId": {
"type": "string"
},
"defaultDatasetId": {
"type": "string"
},
"defaultRequestQueueId": {
"type": "string"
},
"buildNumber": {
"type": "string",
"example": "1.0.0"
},
"containerUrl": {
"type": "string"
},
"usage": {
"type": "object",
"properties": {
"ACTOR_COMPUTE_UNITS": {
"type": "integer",
"example": 0
},
"DATASET_READS": {
"type": "integer",
"example": 0
},
"DATASET_WRITES": {
"type": "integer",
"example": 0
},
"KEY_VALUE_STORE_READS": {
"type": "integer",
"example": 0
},
"KEY_VALUE_STORE_WRITES": {
"type": "integer",
"example": 1
},
"KEY_VALUE_STORE_LISTS": {
"type": "integer",
"example": 0
},
"REQUEST_QUEUE_READS": {
"type": "integer",
"example": 0
},
"REQUEST_QUEUE_WRITES": {
"type": "integer",
"example": 0
},
"DATA_TRANSFER_INTERNAL_GBYTES": {
"type": "integer",
"example": 0
},
"DATA_TRANSFER_EXTERNAL_GBYTES": {
"type": "integer",
"example": 0
},
"PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
"type": "integer",
"example": 0
},
"PROXY_SERPS": {
"type": "integer",
"example": 0
}
}
},
"usageTotalUsd": {
"type": "number",
"example": 0.00005
},
"usageUsd": {
"type": "object",
"properties": {
"ACTOR_COMPUTE_UNITS": {
"type": "integer",
"example": 0
},
"DATASET_READS": {
"type": "integer",
"example": 0
},
"DATASET_WRITES": {
"type": "integer",
"example": 0
},
"KEY_VALUE_STORE_READS": {
"type": "integer",
"example": 0
},
"KEY_VALUE_STORE_WRITES": {
"type": "number",
"example": 0.00005
},
"KEY_VALUE_STORE_LISTS": {
"type": "integer",
"example": 0
},
"REQUEST_QUEUE_READS": {
"type": "integer",
"example": 0
},
"REQUEST_QUEUE_WRITES": {
"type": "integer",
"example": 0
},
"DATA_TRANSFER_INTERNAL_GBYTES": {
"type": "integer",
"example": 0
},
"DATA_TRANSFER_EXTERNAL_GBYTES": {
"type": "integer",
"example": 0
},
"PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
"type": "integer",
"example": 0
},
"PROXY_SERPS": {
"type": "integer",
"example": 0
}
}
}
}
}
}
}
}
}
}