us-law-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@us-law-mcpVerify these citations: 42 U.S.C. 1983 and Roe v. Wade"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
us-law-mcp
미국 연방법(U.S. Code · CFR · Federal Register · 판례 · 법안)을 LLM에서 바로 조회하고, 인용을 원문과 교차검증해 환각을 차단하는 MCP 서버 + CLI.
Claude Desktop, Claude Code, Cursor, Windsurf, Kiro, VS Code, Zed에서 바로 사용할 수 있습니다.
MCP server for U.S. federal law — search the U.S. Code, CFR, Federal Register, case law and bills, and verify citations against primary sources.
왜 만들었나
LLM에 미국법을 물으면 세 가지를 자신 있게 틀립니다.
실패 유형 | 예시 | 이 서버의 대응 |
없는 조문을 만들어냄 | "17 U.S.C. § 9999에 따라 3배 배상" |
|
있는 조문에 엉뚱한 내용을 붙임 | "17 U.S.C. § 107(양형 하한 규정)" |
|
폐기된 판례를 살아있는 것처럼 인용 | "Roe v. Wade, 410 U.S. 113" |
|
과거 행위에 현행법을 적용 | 2019년 위반에 2026년 규정 인용 |
|
미국법 원문은 govinfo, eCFR, federalregister.gov, CourtListener, Congress.gov에 전부 공개돼 있지만 서로 다른 5개 시스템에 흩어져 있고, 인용 문법·법원 위계·소급효 법리까지 알아야 연결됩니다. 이 서버가 그 연결을 담당합니다.
모든 데이터 소스가 무료이고, API 키 없이도 동작합니다.
Related MCP server: Vaquill-AI/vaquill-mcp
30초 확인
git clone https://github.com/seelpeed-debug/us-law-mcp.git
cd us-law-mcp
npm install && npm run build
node dist/cli.js verify "Under 17 U.S.C. 107 courts weigh four fair use factors, \
and 42 U.S.C. 1983 creates a cause of action. See Roe v. Wade, 410 U.S. 113 (1973). \
But 17 U.S.C. 9999 imposes treble damages, and 40 CFR 261.9999 governs listing."실제 출력 (라이브 API 호출 결과):
[HALLUCINATION_DETECTED] 5 citation(s) checked
verified: 3
content mismatch: 0
not found: 2
could not be checked: 0
Failed — cited authority does not exist (2)
[NOT_FOUND] 17 U.S.C. § 9999
note: no § 9999 in title 17 (Copyrights)
[NOT_FOUND] 40 C.F.R. § 261.9999
note: part 261 exists but has no § 261.9999
(it contains § 261.1, 261.2, 261.3, 261.4, ...)
Verified (3)
[OK] 17 U.S.C. § 107 actual: Limitations on exclusive rights: Fair use
[OK] 42 U.S.C. § 1983 actual: Civil action for deprivation of rights
[OK] Roe v. Wade, 410 U.S. 113 (1973)
Supreme Court of the United States, filed 1973-01-22, cited by 5585종료 코드는 1입니다. 파이프라인 게이트로 바로 걸 수 있습니다.
설치
방법 1 — 설정 마법사 (권장)
npm run build
node dist/index.js setupAPI 키를 물어보고(전부 Enter로 건너뛰기 가능), 클라이언트를 고르면 설정 파일에 병합해 넣습니다. 기존 MCP 서버 설정은 건드리지 않고, 쓰기 전에 백업을 남깁니다.
방법 2 — 설정 파일 직접 수정
Claude Desktop / Claude Code / Cursor / Windsurf / Kiro:
{
"mcpServers": {
"us-law": {
"command": "node",
"args": ["D:/ai/US law MCP/dist/index.js"],
"env": {
"GOVINFO_API_KEY": "your-key",
"COURTLISTENER_TOKEN": "your-token",
"CONGRESS_API_KEY": "your-key"
}
}
}
}env 블록은 통째로 생략해도 동작합니다.
설정 파일 위치:
클라이언트 | 경로 |
Claude Desktop (Windows) |
|
Claude Desktop (macOS) |
|
Claude Code |
|
Cursor |
|
Windsurf |
|
Kiro |
|
VS Code |
|
방법 3 — HTTP 서버 (원격/공유)
node dist/index.js --http --port 8787{ "mcpServers": { "us-law": { "url": "http://localhost:8787/mcp?govinfo_key=YOUR_KEY" } } }무상태(stateless) 방식입니다. 요청마다 서버·트랜스포트를 새로 만들고 끝나면
해제하므로, 프로세스가 재시작되거나 인스턴스가 늘어나도 세션이 깨지지 않습니다.
GET /health로 상태를 확인할 수 있습니다.
방법 4 — 터미널 CLI
node dist/cli.js "17 USC 107" # 자동 라우팅
node dist/cli.js "40 CFR 261.11"
node dist/cli.js "Section 230"
node dist/cli.js "Roe v. Wade"
node dist/cli.js verify "<검증할 텍스트>"
node dist/cli.js list # 도구 목록
node dist/cli.js help legal_analysis # 파라미터 설명API 키 (전부 무료, 전부 선택)
환경변수 | 없으면 어떻게 되나 | 발급 |
| U.S. Code 조회가 Cornell LII 폴백으로 전환 (느리고 비공식) | |
| 판례 검색·인용검증·시테이터는 정상 동작. 최신 판례 전문만 불가 | |
| 법안·공법 조회 제한 |
eCFR · Federal Register · Caselaw Access Project는 키가 필요 없습니다. 그래서 키를 하나도 넣지 않아도 규정 조회, 판례 검색, 인용 검증이 전부 동작합니다. 환각 게이트를 회원가입 뒤에 두지 않으려는 의도적 설계입니다.
키 전달 방법은 우선순위 순으로 네 가지입니다: 도구 파라미터 → HTTP 헤더/쿼리스트링
→ 환경변수 → 내장 기본값. HTTP 모드에서는 요청별 키가 AsyncLocalStorage에
격리되므로 동시 요청끼리 키가 섞이지 않습니다.
도구 구조 — 광고 11개 / 전체 21개
tools/list 페이로드를 14.5 KB로 유지합니다. 도구 목록이 커지면 모델의 도구
선택 정확도가 눈에 띄게 떨어지므로, 자주 쓰지 않는 전문 도구 10개는 목록에서 빼고
discover_tools → execute_tool로 접근합니다.
광고되는 도구 (11)
구분 | 도구 | 설명 |
리서치 |
| 다단계 체인 — |
분석 |
| 검증·분석 — |
법률 |
| U.S. Code 검색 (인용/통칭/키워드) |
| 조문 전문 + 판본 최신성 표시 | |
규정 |
| CFR 검색 + 관련 Federal Register 동향 |
| CFR 본문, 임의 과거 시점 조회 가능 | |
| 규정 vs 근거 법률 개정 시점 대조 | |
판례 |
| 12개 법원 계층 통합 검색 |
| 판결 전문 (다수·별개·반대의견 분리) | |
메타 |
| 숨은 전문 도구 탐색 |
| 전문 도구 프록시 실행 |
legal_analysis mode 4종
mode | 하는 일 | 필수 |
| 텍스트의 모든 인용을 원문 대조 — 존재 + 내용 + 항번호 |
|
| 판례 생사 확인 (미국형 Shepard's) |
|
| 특정 날짜에 시행 중이던 본문 + 이후 변경 diff + 소급효 법리 |
|
| 이 조문을 인용한 판례·규정·행정입법 역방향 탐색 + mermaid | 조문 |
legal_research task 7종
full_research · statutory_scheme · agency_action · litigation_prep ·
amendment_track · compliance_check · document_review
체인은 하위 도구를 그대로 호출해 이어붙이므로 조회 경로가 하나로 유지됩니다.
실패한 단계는 숨기지 않고 [INCOMPLETE] / [SKIPPED]로 표시합니다.
빈칸이 있는 리포트를 매끈하게 내보내면 읽는 쪽이 그 빈칸을 알 수 없습니다.
숨은 전문 도구 (10)
get_public_law · get_bill · search_bills · compare_cfr_versions ·
get_cfr_structure · list_agencies · get_federal_register_document ·
get_statute_history · list_usc_editions · list_popular_names
discover_tools(query="compare a regulation across dates")
execute_tool(tool="compare_cfr_versions", args={title:"40", section:"261.11", fromDate:"2019-01-01"})핵심 기능
1. 인용 검증 — 환각 게이트
존재 확인만으로는 부족합니다. 세 층으로 검사합니다.
17 U.S.C. § 9999 → [NOT_FOUND] 없는 조문
17 U.S.C. § 107 (양형 하한) → [MISMATCH] 조문은 있지만 내용이 다름
42 U.S.C. § 1983(z)(9) → [MISMATCH] (z)항이 존재하지 않음
Brown v. Board of Education, 410 U.S. 113 → [MISMATCH] 그 인용은 Roe v. Wade
12 F.4th 1234 → [UNVERIFIED] 확인 불가 (CAP 수록 범위 밖)설계 원칙 세 가지입니다.
검사하지 않은 것을 "검증됨"으로 보고하지 않습니다. 파서가 인식하지 못한 인용 형태와 소스 장애는
[UNVERIFIED]로 요약 카운트에 드러납니다. 게이트에서 가장 위험한 실패는 오판이 아니라, 검사되지 않은 텍스트에 대해 깨끗한 리포트가 나오는 것입니다. 읽는 쪽은 그것을 통과로 읽습니다.수록 범위 부재를 위조로 보고하지 않습니다. CAP는 2020년경까지만 다루고, Federal Register API는 면 단위 색인이 없습니다. 이런 경우는
[UNVERIFIED]이지[NOT_FOUND]가 아닙니다. 진짜 판례를 위조로 낙인찍는 검증기는 결국 꺼집니다.문제가 하나라도 있으면
isError: true를 설정합니다.
지원 인용 형식: U.S.C. (17 U.S.C. § 107, 17 USC 107, section 107 of title 17,
Title 17, Section 107) · CFR (40 C.F.R. § 261.11, 40 CFR part 261) ·
판례 (401개 리포터 약어) · Pub. L. No. 117-108 · 135 Stat. 4 · 88 Fed. Reg. 12,345
2. 판례 생사 확인 (cite_check)
CourtListener 인용 그래프 + 판시 문구 스캔으로 파기·변경 신호를 찾습니다.
legal_analysis(mode="cite_check", citation="410 U.S. 113")
→ [NEGATIVE_SIGNAL] 10 citing decision(s) contain displacement language,
10 of them from a court that could overrule this one.
Dobbs v. Jackson Women's Health Organization
Supreme Court of the United States · 2022-06-24
can overrule; names the target case; found via name search스캔을 두 갈래로 돌립니다. 인용 그래프만 쓰면 Dobbs를 놓칩니다 — CourtListener에서
Dobbs의 cites 배열이 비어 있어 cites:(108713) 검색에 걸리지 않습니다.
그래서 사건명 + 파기 문구를 파기 권한이 있는 법원으로 한정해 검색하는 2차 스캔을
함께 돌립니다. 개발 중 실측으로 확인한 구멍이고, 이걸 놓치면 시테이터는 무의미합니다.
판정은 신호로만 보고합니다. 법원 위계를 계산해 "파기 가능한 법원인지"를 함께 표시하고, 근거 문구를 인용해 판단을 사용자에게 넘깁니다. 상용 시테이터가 아니며 묵시적 파기는 잡지 못한다는 한계를 매 응답에 명시합니다.
3. 행위시법 판단 (applicable_law)
legal_analysis(mode="applicable_law", citation="40 CFR 261.11", date="2019-06-01")
→ TEXT IN FORCE ON 2019-06-01 — use this one
(그 시점 본문 전문)
→ Changes since then (then → now)
[~ changed] (a)(3) before: ... / after: ...
→ Amendment events after 2019-06-01 (n)
각 Final Rule의 시행일 + Federal Register 링크
→ Which version actually applies
- 행정규칙은 원칙적으로 장래효. 소급 규칙은 의회가 명시적으로 권한을 준
경우에만 — Bowen v. Georgetown Univ. Hospital, 488 U.S. 204 (1988)
- 제재는 행위 시점 기준이 원칙. 채택 문서의 경과규정을 확인할 것CFR은 eCFR이 실제로 시점 버전을 제공하므로 정확한 과거 본문을 가져옵니다. U.S. Code는 연 1회 판본만 있으므로 "그 날짜에 시행 중이던 판본"을 특정하고, 연중 개정이 반영되지 않는다는 한계를 명시합니다.
법리 안내도 함께 붙습니다: 형사는 소급입법금지(U.S. Const. art. I §§ 9-10), 민사는 Landgraf v. USI Film Products, 511 U.S. 244 (1994), 일반유보조항 1 U.S.C. § 109, 양형은 Peugh v. United States, 569 U.S. 530 (2013).
4. 조문 영향 그래프 (impact_map)
legal_analysis(mode="impact_map", citation="17 U.S.C. 107")
Citing court decisions: 669
Implementing / referencing CFR provisions: 20
Federal Register documents invoking it: 23
Harper & Row, Publishers, Inc. v. Nation Enterprises
471 U.S. 539 · SCOTUS · 1985-05-20 · cited by 1198
Sony Corp. of America v. Universal City Studios, Inc.
464 U.S. 417 · SCOTUS · 1984-01-17 · cited by 983
Campbell v. Acuff-Rose Music, Inc.
510 U.S. 569 · SCOTUS · 1994-03-07 · cited by 633인용 표기 편차가 실제 난점입니다. 법원은 17 U.S.C. § 107, CFR은 17 U.S.C. 107,
서면은 17 USC 107로 씁니다. 한 형태만 검색하면 코퍼스의 일부만 잡히므로 모든
질의를 변형들로 펼칩니다. 인용 수는 하한이며 census가 아닙니다.
5. 규제 레이더 (regulatory_radar)
CFR 각 part는 Authority note에 근거 법률을 선언합니다. 의회가 그 법률을 개정했는데 기관이 규정을 손대지 않았다면, 규정이 자기 근거와 어긋날 수 있습니다. 자동으로 알려주는 곳이 없어서 날짜를 나란히 놓지 않으면 보이지 않습니다.
regulatory_radar(title="40", part="261")
Rule last revised: 2025-09-11
Authority note: 42 U.S.C. 6905, 6912(a), 6921, 6922, 6924(y) and 6938.
[NO_DRIFT] None of the 6 authority statutes checked was amended after
the rule's last revision (2025-09-11).
42 U.S.C. § 6921 [in step]
Identification and listing of hazardous waste
last touched: 2006 (Pub. L. 109-177) [from Amendments note]법률의 "마지막 개정"은 U.S. Code 편집주(Amendments note)를 파싱해 구합니다.
U.S. Code에는 버전 API가 없어 이 주석이 유일한 기록입니다. 주석이 없으면
source credit으로 폴백합니다 — 폐지·재제정된 조문은 Amendments note가 아예 없어서
(31 U.S.C. § 5311은 2021년 Pub. L. 116-283으로 전면 재제정) "개정 이력 없음"으로
보고하면 정면으로 틀립니다.
판정은 검토 트리거이지 법적 결론이 아닙니다. 어느 기록에서 날짜를 얻었는지
([from Amendments note] / [from source credit]) 항상 함께 표시합니다.
데이터 소스
소스 | 담당 | 키 |
govinfo (GPO) | U.S. Code, 공법, Statutes at Large, 연방법원 문서 | 필요 |
CFR + 시점 조회 + 구조 + 기관 목록 | 불필요 | |
규칙·규칙안·공고 | 불필요 | |
CourtListener (Free Law Project) | 판례, 인용 그래프 | 검색은 불필요 |
Caselaw Access Project (Harvard) | 판결 전문 (~2020) | 불필요 |
Congress.gov (LoC) | 법안, 입법 이력 | 필요 |
U.S. Code 폴백 전용 | 불필요 |
Cornell LII는 govinfo가 없거나 불가할 때만 쓰고, robots.txt의 Crawl-delay를 지켜
직렬화하며 /uscode/text/ 경로만 호출합니다. US_LAW_ENABLE_LII_FALLBACK=false로
완전히 끌 수 있습니다.
법적 효력이 필요한 판단은 각 응답에 붙은 URL의 원문을 반드시 확인하세요. 이 도구는 조회 결과를 가공·요약합니다. 법률 조언이 아닙니다.
개발
npm install
npm run build # tsc
npm test # 오프라인 단위 테스트 52개
npm run smoke # 라이브 API 통합 검증 21개
npm run probe:stdio # MCP 프로토콜 레벨 검증
npm run gen:reporters # 리포터 약어 표 재생성
npm run typecheck현재 검증 상태
npm test 52 passed, 0 failed
npm run smoke 21 passed, 0 failed (라이브 govinfo/eCFR/FR/CL/CAP 호출)
npm run probe:stdio stdio transport OK (11 tools, 14.5 KB tools/list)smoke는 서드파티 API를 직접 호출하므로 빌드 게이트가 아닙니다. 실패가 레이트
리밋이나 상류 장애일 수 있으니 회귀로 단정하기 전에 다시 실행하세요.
문서: docs/ARCHITECTURE.md ·
docs/API.md · docs/DEVELOPMENT.md
라이선스
MIT. 데이터 출처와 제3자 고지는 NOTICE를 참조하세요.
도구 아키텍처는 chrisryugj/korean-law-mcp의 설계 패턴(작은 광고 표면 + discover/execute, 환각 게이트, 행위시법 판단, 영향 그래프, 정비 레이더)을 미국법 체계에 옮긴 것입니다. 코드는 복사하지 않았고, 데이터 소스·인용 문법·법원 위계·소급효 법리는 전부 다릅니다.
Available Tools
11 toolsdiscover_toolsARead-onlyIdempotent
Search the full tool catalog, including specialist tools that are not advertised in tools/list. Returns each match with its parameters so you can invoke it through execute_tool. Call this when none of the listed tools fits.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | What you are trying to do, e.g. "compare a regulation across dates", "bill history". | |
| showSchema | No | Include each tool's parameters. | |
| includeExposed | No | Also include tools already visible in tools/list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, and idempotent hints. The description adds valuable context about behavior beyond those: it returns matches with parameters, enabling invocation via execute_tool, and it surfaces 'specialist tools that are not advertised in tools/list.' This clarifies the operational scope without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core action, and includes all essential information (what it searches, what it returns, and when to use it). No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a meta-tool that searches a catalog, the description fully covers the agent's needs: it states what the tool does, what it returns ('each match with its parameters'), and when to invoke it. With no output schema, the return value description is sufficient for the agent to decide to use execute_tool afterward.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and parameter descriptions in the schema already explain query, showSchema, and includeExposed. The tool description adds no additional parameter-level detail beyond what the schema provides, so it meets the baseline but does not exceed it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Search the full tool catalog, including specialist tools that are not advertised in tools/list.' It uses a specific verb ('Search') and resource ('tool catalog'), and distinguishes itself from sibling tools by highlighting its role as a discovery mechanism for unlisted tools, which is unique among the provided siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit guidance: 'Call this when none of the listed tools fits.' This directly tells the agent when to use it, and implies that it is the fallback for unlisted capabilities. It also references tools/list and execute_tool, providing clear context for workflow integration.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_toolARead-onlyIdempotent
Run any tool from the catalog by name with an arguments object. Use after discover_tools to reach specialist tools that are not advertised in tools/list. Advertised tools can also be called this way, though calling them directly is simpler.
| Name | Required | Description | Default |
|---|---|---|---|
| args | No | Arguments object for that tool. | |
| tool | Yes | Tool name from discover_tools. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, establishing a safe read-only profile. The description adds context about its role as an indirection layer and the need to use discover_tools first, but does not disclose additional behaviors like error handling or return value forwarding. Given the annotations, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the core function, followed by usage nuance. Every sentence provides distinct value: purpose, when to use, and comparison with alternatives. No redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description adequately covers the primary use case and dependency on discover_tools. However, with no output schema, it does not mention what the tool returns (likely the result of the invoked tool) or potential error conditions. This is a minor gap given the tool's generic nature and the completeness of the schema and annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with both parameters (tool and args) described in the schema. The description mentions the arguments object but adds no extra semantic detail beyond what the schema provides. The baseline of 3 applies as the description neither enhances nor conflicts with schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Run any tool from the catalog by name with an arguments object.' It distinguishes itself from specialist siblings by being a generic executor, and explicitly contrasts with discover_tools. This is a specific verb + resource with clear differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit guidance: 'Use after discover_tools to reach specialist tools that are not advertised in tools/list.' It also notes that advertised tools can be called this way, but calling them directly is simpler, providing a clear alternative. This fully addresses when and why to use the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_decision_textARead-onlyIdempotent
Retrieve the full text of a court decision by citation, CourtListener cluster/opinion id, or case name. Separates majority, concurring and dissenting opinions. Long opinions are compacted by default — pass full=true for everything.
| Name | Required | Description | Default |
|---|---|---|---|
| full | No | Return the complete opinion without compaction. | |
| caseName | No | Case name, used only if no citation or id is given. | |
| citation | No | Reporter citation, e.g. "410 U.S. 113". | |
| clusterId | No | CourtListener cluster id from search_decisions. | |
| opinionId | No | CourtListener opinion id. | |
| opinionType | No | Which opinions within the decision to return. | all |
| courtlistenerToken | No | Override the configured CourtListener token. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive behavior. The description adds meaningful context beyond this: it separates majority/concurring/dissent opinions and compacts long opinions by default, requiring full=true for complete text. This helps an agent understand the tool's output behavior and default settings.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the primary purpose, and immediately followed by key behavioral notes. Every sentence contributes substance, with no filler or repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core functionality and important defaults, but it omits how the tool behaves when multiple identifier types are provided, and does not explicitly state that at least one identifier is required despite no required params in the schema. This creates a minor gap for an agent constructing a valid request.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by clarifying the behavior of 'full' (compacted by default) and the meaning of 'opinionType' (separating opinions), which goes slightly beyond the schema's phrasing. However, it does not provide additional details on identifier precedence.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Retrieve') and resource ('full text of a court decision'), and lists multiple lookup methods (citation, CourtListener id, case name). This clearly distinguishes it from sibling tools like get_law_text and get_regulation_text, which handle statutes and regulations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly establishes this tool is for retrieving court decision text, but it does not explicitly name alternatives or state when not to use it. The context is clear enough for an agent to infer the tool's scope, but explicit exclusions are missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_law_textARead-onlyIdempotent
Retrieve the operative text of a U.S. Code section. Accepts either a citation string or title+section. Reports which edition supplied the text and how current it is, so superseded language is not mistaken for current law. Pass full=true for the complete section including notes.
| Name | Required | Description | Default |
|---|---|---|---|
| full | No | Return the complete section including notes. Default elides the middle of long sections. | |
| title | No | U.S. Code title number, e.g. "17". | |
| section | No | Section number, e.g. "107" or "1320d-2". | |
| citation | No | Full citation, e.g. "17 U.S.C. § 107". Alternative to title+section. | |
| govinfoApiKey | No | Override the configured govinfo API key. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a safe read-only, idempotent operation. The description adds valuable behavioral context by disclosing that the tool reports edition and currency to prevent mistaken reliance on superseded text, and by explaining the default elision behavior when full=false. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three well-structured sentences, each conveying distinct information: purpose, input modes, and behavioral caveats. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 5 parameters and no output schema, the description covers input modes, the full flag, and the edition/currency reporting, giving an agent enough to invoke correctly. It does not describe the exact response shape, but for a retrieval tool with strong annotations, this is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides descriptions for all five parameters (100% coverage), so the baseline is 3. The description adds the relationship that a citation is an alternative to title+section, clarifying parameter usage beyond the individual schema descriptions. This justifies a small increase.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves the operative text of a U.S. Code section, using a specific verb and resource. It distinguishes itself from sibling tools like get_regulation_text and get_decision_text by explicitly scoping to U.S. Code.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the two input modes (citation string or title+section) and instructs when to set full=true. It does not explicitly state when not to use this tool (e.g., for regulations or decisions), but the sibling names and the specificity of the description make this implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_regulation_textARead-onlyIdempotent
Retrieve the text of a CFR section (or part-level metadata) from eCFR. Pass date=YYYY-MM-DD to get the version in force on that day — use this whenever the question concerns past conduct, because the current text may differ. Includes amendment history and the part's authorising statutes.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Point-in-time date (YYYY-MM-DD). Omit for the current text. | |
| full | No | Return the complete text without eliding the middle. | |
| part | No | Part number when you want part-level metadata, e.g. "261". | |
| title | No | CFR title number, e.g. "40". | |
| section | No | Section number, e.g. "261.11". | |
| citation | No | Full citation, e.g. "40 CFR 261.11". | |
| includeHistory | No | Include the amendment history for the section or part. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only/idempotent, so description adds value by explaining date-based behavior and that history/authorising statutes are included. It does not contradict annotations, and the added context goes beyond what annotations convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two efficient sentences that front-load the core purpose, then give essential usage nuance. No redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with rich schema and no output schema, the description covers the key scenarios (point-in-time, part metadata, history). It doesn't detail return format, but the annotation and schema fill most gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of parameters with descriptions. The description adds a use-case hint for the date parameter and clarifies the section vs. part distinction, but does not significantly expand on parameter semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves CFR section text or part-level metadata from eCFR, using a specific verb and resource. It also mentions included extras (amendment history, authorising statutes) and is distinct from siblings like get_law_text.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance: 'use this whenever the question concerns past conduct' due to potential differences from current text. While it doesn't name alternative tools, the when-to-use context is clear, and it distinguishes part-level from section retrieval.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
legal_analysisARead-onlyIdempotent
Verification and analysis over U.S. law. mode=verify_citations checks every citation in a block of text against primary sources and flags fabricated or misdescribed authority — run it on any AI-drafted legal text before relying on it. mode=cite_check reports whether a decision has been overruled. mode=applicable_law returns the version of a statute or rule in force on a past date. mode=impact_map shows what cites a provision.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | mode=applicable_law: the date the conduct occurred (YYYY-MM-DD). | |
| full | No | Return long text without compaction. | |
| mode | Yes | verify_citations: check every citation in a block of text really exists and says what the text claims (hallucination gate). cite_check: has this decision been overruled or displaced. applicable_law: which version of a provision governed on a given date. impact_map: what cites this provision — cases, regulations, rulemakings. | |
| text | No | mode=verify_citations: the text whose citations should be checked. | |
| limit | No | mode=impact_map: items per category. | |
| section | No | U.S. Code section number, e.g. "107". | |
| caseName | No | mode=cite_check: case name if you have no citation. | |
| cfrTitle | No | CFR title number, e.g. "40". | |
| citation | No | mode=cite_check: case citation ("550 U.S. 544"). mode=applicable_law / impact_map: statute or regulation citation ("17 U.S.C. 107", "40 CFR 261.11"). | |
| lawTitle | No | U.S. Code title number, e.g. "17". | |
| opinionId | No | mode=cite_check: CourtListener opinion id. | |
| cfrSection | No | CFR section number, e.g. "261.11". | |
| checkContent | No | mode=verify_citations: also compare claimed headings, party names and subdivisions, not just existence. | |
| govinfoApiKey | No | ||
| congressApiKey | No | ||
| courtlistenerToken | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds behavioral context by stating that verify_citations 'flags fabricated or misdescribed authority' and that cite_check reports overruling status, which goes beyond simple annotations. It does not describe auth/rate-limit requirements, but that is not expected given the annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, dense sentence that front-loads the main purpose and then efficiently enumerates all modes. While it is not as crisp as a two-sentence summary, it contains no redundant fluff and every clause adds specific information. The semicolon-linked structure makes it scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and 16 parameters, the description does a good job of covering the tool's key behaviors and parameter groups across modes. It does not mention return formats or credential requirements, but it provides enough context for an agent to select and invoke the tool correctly in most cases. Slight deduction for not addressing the API key parameters or output shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 81%, so the baseline is 3. The description adds some meaning by mapping modes to parameters (e.g., 'mode=cite_check: case citation'), but it does not explain undocumented parameters like govinfoApiKey, congressApiKey, or courtlistenerToken. It provides moderate value but largely relies on the schema for parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a specific verb+resource combination ('Verification and analysis over U.S. law') and then enumerates four distinct modes (verify_citations, cite_check, applicable_law, impact_map), each with a clear scope. This clearly distinguishes it from sibling tools like search_law or get_law_text, which are for retrieval rather than analysis.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells users when to use it ('run it on any AI-drafted legal text before relying on it') and explains each mode's purpose, providing clear context for selection. It does not explicitly name alternative tools for when not to use it, but the mode breakdown makes the intended use cases unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
legal_researchARead-onlyIdempotent
Run a multi-step legal research chain in one call. Combines statute, regulation and case-law lookups and reports every step's outcome, including steps that found nothing. Use task to pick the shape of the research; task=document_review verifies every citation in text you supply.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | task=amendment_track: compare against this date. | |
| task | No | full_research: statutes + regulations + case law. statutory_scheme: a statute and the regulations implementing it. agency_action: rulemaking history and current rule text. litigation_prep: leading cases with a good-law check on the top authority. amendment_track: how the provision has changed over time. compliance_check: current obligations, pending changes, statutory drift. document_review: verify every citation in supplied text. | full_research |
| text | No | task=document_review: the document to review. | |
| limit | No | Results per step. | |
| query | Yes | The research question, a citation, or a topic. | |
| govinfoApiKey | No | ||
| congressApiKey | No | ||
| courtlistenerToken | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and openWorld hints. The description adds valuable behavioral context: it is a multi-step chain, combines multiple source types, and reports every step's outcome even when nothing is found. This goes beyond the structured annotations and helps the agent set expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the main behavior and key differentiation. Every clause earns its place: 'multi-step', 'combines sources', 'reports every step's outcome', and the task example. No waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex 8-parameter tool with no output schema, the description gives the essential behavior ('multi-step chain', 'reports every step's outcome') and directs the user to the task parameter. But it doesn't mention authentication parameters or what the returned research report contains beyond step outcomes. Still, given the schema's rich task descriptions, it's reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 63% and each parameter has a detailed description, especially 'task' with a full enum explanation. The description highlights 'task' as the primary control but doesn't add meaning for undocumented parameters like the API keys. It provides some orientation but largely relies on the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Run a multi-step legal research chain') and resource ('statute, regulation and case-law lookups'), clearly distinguishing it from single-lookup siblings like search_law or get_law_text. It also explains the unique value of combining sources and reporting all outcomes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear guidance on using the 'task' parameter to select research shape, with an explicit example for document_review. It implies this tool is for multi-step research but doesn't explicitly state when to prefer it over simpler alternatives, so it loses a point.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
regulatory_radarARead-onlyIdempotent
Check whether a CFR part has fallen behind the statutes it was issued under. Reads the part's Authority note, finds when each authorising statute was last amended, compares that against when the rule was last revised, and flags any statute that moved afterwards. Use for compliance review and for spotting rules that may no longer match their authority.
| Name | Required | Description | Default |
|---|---|---|---|
| part | No | CFR part number, e.g. "261". | |
| title | No | CFR title number, e.g. "40". | |
| citation | No | CFR part citation, e.g. "40 CFR 261". | |
| maxStatutes | No | How many authority statutes to check. | |
| govinfoApiKey | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, and non-destructive behavior. The description adds meaningful context by revealing the underlying algorithm: reading the Authority note, finding statute amendments, comparing with rule revisions, and flagging changes. It does not, however, disclose output format or external API dependencies, which would strengthen transparency further.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with no filler: the first states the purpose, the second details the process, and the third gives use cases. It is front-loaded and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is quite complete for a read-only analysis tool: it covers purpose, method, and use cases, and annotations cover safety semantics. However, since there is no output schema, the description only hints at the result ('flags any statute') without specifying the output format. It could also be clearer about the dependency on external data (e.g., govinfo API), though that is implied by openWorldHint and the API key parameter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 80% (4 of 5 parameters have descriptions), so the baseline is 3. The description provides overall context that helps interpret part/title/citation but adds no parameter-specific detail beyond the schema. The undocumented govinfoApiKey remains unexplained, but with high schema coverage the description need not compensate heavily.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's specific purpose: checking whether a CFR part has fallen behind its authorizing statutes. It explains the analytical process (reads Authority note, compares amendment dates, flags changes) and thus distinguishes itself from generic legal research siblings like search_law or get_law_text.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use it: 'Use for compliance review and for spotting rules that may no longer match their authority.' This provides clear context. However, it does not mention when not to use it or name alternative tools, so it lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_decisionsARead-onlyIdempotent
Search U.S. court decisions (CourtListener, 9M+ opinions across federal and state courts). Accepts a case name, a reporter citation, a docket number, or issue keywords. Use domain to restrict the court tier. Returns citations, cite counts and the ids needed by get_decision_text.
| Name | Required | Description | Default |
|---|---|---|---|
| court | No | Explicit CourtListener court id(s), space separated, e.g. "ca9 ca2". Overrides domain. | |
| limit | No | Maximum results. | |
| query | Yes | Case name, citation ("410 U.S. 113"), docket number, or legal issue keywords. | |
| domain | No | Court tier: all, scotus, appellate, district, bankruptcy, tax, federal_claims, international_trade, veterans, military, state_supreme, state. | all |
| filedAfter | No | Only decisions filed on or after YYYY-MM-DD. | |
| filedBefore | No | Only decisions filed on or before YYYY-MM-DD. | |
| minCitations | No | Only decisions cited at least this many times — a rough authority filter. | |
| includeSnippets | No | Include opinion text snippets. | |
| courtlistenerToken | No | Override the configured CourtListener token. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, openWorld, idempotent, non-destructive). The description adds context about the corpus size (9M+ opinions) and the output contract (citations, cite counts, IDs for get_decision_text), going beyond the structured data without contradiction. It does not discuss rate limits or auth, but the annotations lower the bar.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences, each earning its place: scope, accepted inputs, domain restriction tip, and output. It is front-loaded with the verb and resource, contains no fluff, and is appropriately sized for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the detailed schema covering all parameters and annotations covering behavior, the description completes the picture by explaining the query types, domain restriction, and return value relationship to get_decision_text. No output schema exists, so the explicit mention of return values is sufficient. This is complete for an agent to select and invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed descriptions for all 9 parameters, so the baseline is 3. The description mentions query input types and the domain parameter, adding some semantic nuance beyond the schema, but not significantly. The schema already documents these well.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function with a specific verb and resource: 'Search U.S. court decisions (CourtListener, 9M+ opinions across federal and state courts).' It also lists accepted input types and mentions returning IDs for get_decision_text, which distinguishes it from sibling search tools like search_regulations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear usage context by specifying what inputs work ('case name, reporter citation, docket number, or issue keywords') and how to restrict court level with 'Use domain to restrict the court tier.' However, it does not explicitly name alternatives or exclusion criteria, so it lacks full when-to-use vs. when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_lawARead-onlyIdempotent
Search federal statutes (U.S. Code). Accepts a citation, a popular name or acronym (Section 230, ADA, FOIA, RICO, Title VII), or free-text keywords. Returns the citation, official section heading and the identifiers needed by get_law_text. Use this first when you need a statutory basis.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum full-text results. | |
| query | Yes | Citation ("17 U.S.C. 107"), popular name ("Section 230", "ADA", "FOIA"), or free text ("fair use factors"). | |
| title | No | Restrict to a U.S. Code title number, e.g. "42". | |
| govinfoApiKey | No | Override the configured govinfo API key. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey read-only, open-world, idempotent, and non-destructive behavior. The description adds value by disclosing the specific return fields (citation, section heading, identifiers) and the role in the get_law_text workflow, which annotation hints do not cover.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core function and free of redundancy. Every sentence contributes either to purpose, accepted inputs, output, or usage guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Even with no output schema, the description states what is returned and how it enables get_law_text, covering the main workflow. It omits details like result list limit or error behavior, but those are secondary for a search tool and the overall context (sibling tools) clarifies boundaries.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all four parameters are described in the input schema. The description mostly restates the query parameter's acceptable forms (citation, popular name, free text) without adding new detail, so it neither enhances nor detracts from the schema's baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Search' and the resource 'federal statutes (U.S. Code)', which distinguishes it from siblings like search_regulations and search_decisions. It also specifies outputs (citation, heading, identifiers) and the intended downstream tool (get_law_text), making purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly directs 'Use this first when you need a statutory basis', providing when-to-use guidance. It also describes the relationship to get_law_text by returning the identifiers that tool needs, effectively mapping the workflow and implying alternatives (e.g., get_law_text after search).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_regulationsARead-onlyIdempotent
Search federal regulations (Code of Federal Regulations) by citation or keyword, and surface recent Federal Register rulemaking that affects the matched part. Use for agency requirements, permits, thresholds and compliance obligations — statutes live in search_law.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum CFR results. | |
| query | Yes | Citation ("40 CFR 261.11") or keywords ("hazardous waste listing criteria"). | |
| title | No | Restrict to a CFR title number, e.g. "40". | |
| agency | No | Agency slug from eCFR, e.g. "environmental-protection-agency". | |
| includeFederalRegister | No | Also list recent Federal Register documents affecting the matched part. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, idempotent, and non-destructive behavior, so the bar for transparency is lower. The description adds valuable context by noting the dual behavior of searching CFR and also surfacing recent Federal Register documents affecting the matched part.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core function and usage context. Every sentence serves a purpose without wasted words, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 5 parameters with full schema coverage and no output schema, the description provides sufficient context for selecting and invoking the tool. It explains the main capabilities and usage domains, though it could explicitly describe the return structure (e.g., a list of CFR sections plus FR documents) to be fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description does not add meaning beyond what the parameter descriptions already provide (e.g., query accepts citation or keyword, includeFederalRegister controls FR results). It aligns with the schema but does not compensate beyond it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches federal regulations (CFR) by citation or keyword and surfaces related Federal Register rulemaking. It uses a specific verb and resource, and explicitly differentiates from search_law by noting statutes live there.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit use cases: agency requirements, permits, thresholds, and compliance obligations. It also gives an exclusion and alternative: statutes live in search_law. This directly guides the agent on when to choose this tool over a sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
11 tool updates
v1.0.0- First observed
discover_tools - First observed
execute_tool - First observed
get_decision_text - First observed
get_law_text - First observed
get_regulation_text - First observed
legal_analysis - First observed
legal_research - First observed
regulatory_radar - First observed
search_decisions - First observed
search_law - First observed
search_regulations
TDQS
The search and get tools (search_law/get_law_text, search_regulations/get_regulation_text, search_decisions/get_decision_text) are clearly distinct. However, legal_research, legal_analysis, and regulatory_radar have overlapping functionality, especially in citation verification and legal analysis, which could cause an agent to choose the wrong tool.
Most tools follow a consistent verb_noun pattern (search_law, get_law_text, search_regulations, etc.). However, legal_research, regulatory_radar, and legal_analysis break this pattern, using noun phrases instead, creating a mixed convention that is still readable but not fully consistent.
With 11 tools, the set is reasonably scoped for a legal research server, covering search, retrieval, and analysis across statutes, regulations, and case law. The inclusion of meta tools (discover_tools, execute_tool) adds a bit of complexity but does not make the count feel excessive.
The tool set covers the core lifecycle of legal research: search and retrieve statutory, regulatory, and case-law texts, plus specialized analysis for citation verification, overruling status, historical versions, and regulatory lag. Minor gaps exist, such as no explicit tool for listing all statutes in a title, but search functionality mitigates this, and the hidden tools accessible via discover_tools/execute_tool extend the surface.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
US federal and state cybersecurity/privacy law MCP server with cross-state comparison
An MCP server that provides congressional transcripts
MCP for CourtListener: US federal and state opinions, dockets, judges, plus eCFR regulations.
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceAn MCP server that provides comprehensive US legislation.2337MIT

Vaquill-AI/vaquill-mcpofficial
AlicenseAqualityAmaintenanceMCP server for Vaquill legal research API. Covers US federal + 50-state law (USC, CFR, state legislation, CourtListener case law)255MIT- AlicenseAqualityBmaintenanceLegalMCP is a comprehensive US legal MCP server that enables AI assistants to search over 4 million US court opinions, manage Clio practice data, and access PACER federal filings through natural language.1865MIT
- AlicenseNot gradedqualityBmaintenanceAn MCP server that turns the US Code of Federal Regulations into an agent-navigable citation graph, enabling traversal of regulatory references and detection of stale citations via structured tools.MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/seelpeed-debug/us-law-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server