法律案例搜索服务

一个基于CourtListener API的Python MCP服务器,提供法律案例搜索、法院ID解析、案例和意见检索功能。

  • by aubreyhayes47
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 aubreyhayes47/courtlistener_mcp

使用说明

在渲染上部署CourtListener MCP服务器

本指南将介绍如何创建和部署一个与CourtListener v4 REST API通信的Python MCP服务器,并提供五个可靠的工具:

  • courtlistener.search -案例法搜索/PACER/法官/口头辩论(Citegist搜索API)
  • courtlistener.find_court --向CourtListener解析法庭字符串 court_id 代码(通过 courts_db)
  • courtlistener.get_cluster --通过集群ID(CourtListener意见URL中的ID)检索案例(集群)
  • courtlistener.get_opinion --按意见ID检索特定意见文档(全文)
  • courtlistener.resolve_from_url --粘贴CourtListener URL并返回底层集群+意见

您将使用HTTP传输将MCP服务器部署到Render,以便多个客户端可以连接。

先决条件

需求

  • Python 3.10+
  • MCP Python SDK(FastMCP)
  • httpx 对于HTTP请求

在本地安装依赖项:

pip install "mcp[cli]" httpx courts-db

CourtListener API令牌

从您的CourtListener帐户(个人资料)创建或复制令牌→ API).所有请求必须包括:

Authorization: Token <YOUR_TOKEN>

渲染最佳实践:将令牌存储为名为的环境变量 COURTLISTENER_API_TOKEN.

CourtListener API模型(您正在集成的内容)

CourtListener在这里公开了两种重要的API风格:

  1. 搜索API(搜索引擎支持)
    • 端点: /api/rest/v4/search/
    • 用于发现和排名
    • 支持关键字搜索(默认)和语义搜索(仅适用于判例法)
    • 使用光标分页
  2. 判例法REST API(数据库支持)
    • 集群: /api/rest/v4/clusters/ (CourtListener URL中使用的案例/分组)
    • 意见: /api/rest/v4/opinions/ (个人决定文本;领导/同意/反对)
    • 卷宗/法院也存在,但四种工具的基线侧重于搜索+集群+意见。

关键区别: CourtListener网站URL包含一个集群ID(不是意见ID)。意见ID与集群ID不可靠匹配。

项目结构

建议的最小结构(已存在于此仓库中):

courtlistener-mcp/
  courtlistener_server.py
  requirements.txt
  README.md

requirements.txt:

mcp[cli]
httpx

实施:MCP服务器(全部5个工具)

服务器在中实现 courtlistener_server.py.关键可靠性目标:

  • 一个共享 httpx.AsyncClient
  • 一个请求助手,持续添加身份验证、超时和错误
  • 随时随地使用CourtListener v4端点
  • 在意见获取中使用字段选择来保持有效载荷较小

该文件定义了五个工具:

0) courtlistener.find_court

将人类法庭字符串(或CourtListener标识符)解析为CourtListener court_id 代码使用 courts_db 数据集。

示例流程(先解析后搜索):

{ "query": "Supreme Court of the United States" }

然后通过返回 court_ids 进入搜索:

{ "query": "habeas", "type": "o", "courts": ["scotus"], "limit": 10 }

1) courtlistener.search

通过搜索 /api/rest/v4/search/ 跨越多个语料库。返回一个规范化的、对代理友好的列表(默认限制=10)和一个 next_cursor.

响应总是包括 warnings 数组提醒消费者LLM摘要可能是错误的,并包含CourtListener链接(url)在引用结果时。

输入合同

  • query 是必需的
  • type 选择您要搜索的内容
  • courts 是一个可选列表 court_id 代码
  • court_query 是一个可选的人类法庭字符串(解析为 court_id 代码通过 courts_db)
  • court_bankruptcy 和 court_date_found 可选择细化 court_query 决心
  • semantic 仅适用于 type="o"
  • highlight 切换代码段突出显示
  • cursor 支持分页

备注

  • 对于 type="o" 结果,可靠的标识符通常是 cluster_id.
  • 工具返回 raw 每个项目的稳健性;如果你想要一个更严格的模式,请删除。

2) courtlistener.get_cluster

按ID获取集群。可选地获取所有子意见文档。

3) courtlistener.get_opinion

按意见ID获取意见文档,返回首选格式的文本。用途 fields= 省略不需要的字段。

4) courtlistener.resolve_from_url

接受CourtListener URL,如下所示 https://www.courtlistener.com/opinion/2812209/obergefell-v-hodges/ 并返回规范集群(以及可选的意见文档)。

运行服务器(渲染的HTTP传输)

添加入口点(已在 courtlistener_server.py):

if __name__ == "__main__":
    port = int(os.environ.get("PORT", "8000"))
    mcp.run(transport="http", host="0.0.0.0", port=port)

对于HTTP传输,FastMCP在以下位置公开JSON-RPC端点 /mcp.

要渲染的部署

  1. 推送到Git。 将此项目推送到GitHub(或其他git主机)。
  2. 创建渲染Web服务。
    • 环境:Python
    • 构建命令:渲染自动安装 requirements.txt (或设置 pip install -r requirements.txt)
    • 启动命令:
      python courtlistener_server.py
      
  3. 环境变量。 在渲染上设置:
    • COURTLISTENER_API_TOKEN =您的代币
    • 自动设置渲染 PORT
  4. 核实。 部署后,您的MCP端点将是:
    https://<your-service>.onrender.com/mcp
    

从代理使用MCP服务器

一旦向支持MCP的客户端注册,代理就可以呼叫:

MCP提示

此服务器还公开MCP提示(由返回的模板 prompts/get 客户在与模特交谈时可以应用)。

  • legal_research --使用 courtlistener.* 工具。
    • 论据: question (必填), court_query, date_window, court_level, notes

搜索案例(10个结果)

{
  "query": "breach of warranty",
  "type": "o",
  "courts": ["ca5"],
  "limit": 10
}

获取法律研究清单提示

{
  "name": "legal_research",
  "arguments": {
    "question": "What is the standard for fair use in the Ninth Circuit?",
    "court_query": "Ninth Circuit",
    "date_window": "all years"
  }
}

根据结果检索全文

{
  "cluster_id": 2812209,
  "include_opinions": true,
  "opinion_text_format": "html_with_citations"
}

注: include_opinions 默认为 false 当集群包含许多子意见时,避免长时间的扇出请求。

检索特定意见文件

{
  "opinion_id": 9969234,
  "text_format": "html_with_citations"
}

粘贴URL

{
  "url": "https://www.courtlistener.com/opinion/2812209/obergefell-v-hodges/",
  "include_opinions": true
}

可靠性检查表(为什么这种实施有效)

  • 正确的API版本:所有使用 /api/rest/v4/... (无v3端点)。
  • 正确的标识符:搜索返回集群;网站URL包含集群ID;通过意见ID获取的意见。
  • 一致的HTTP行为:客户端以一致的超时延迟创建,并通过提供的帮助程序关闭。
  • 一致的输出:所有工具都返回规范化的JSON对象(不是脆弱的格式化字符串)。
  • 字段选择:意见获取使用 fields= 以减小有效载荷大小。
  • 分页支持:搜索返回 next_cursor 代理人继续。

日志记录注意事项

如果你添加日志记录,请使用Python logging 并写入stderr。对于Render上的HTTP模式,stdout是可以接受的,但结构化日志记录是首选。

许可证

MIT许可证。看 LICENSE.