@cliwant/mcp-sam-gov 1.16.0 → 1.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.ja.md +9 -9
- package/README.ko.md +9 -9
- package/README.md +14 -13
- package/dist/courtlistener.d.ts +32 -0
- package/dist/courtlistener.d.ts.map +1 -1
- package/dist/courtlistener.js +180 -0
- package/dist/courtlistener.js.map +1 -1
- package/dist/keys.d.ts.map +1 -1
- package/dist/keys.js +1 -0
- package/dist/keys.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +60 -3
- package/dist/server.js.map +1 -1
- package/dist/toolsets.d.ts.map +1 -1
- package/dist/toolsets.js +1 -0
- package/dist/toolsets.js.map +1 -1
- package/package.json +1 -1
- package/src/courtlistener.ts +244 -1
- package/src/keys.ts +1 -0
- package/src/server.ts +61 -3
- package/src/toolsets.ts +1 -0
package/dist/toolsets.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolsets.d.ts","sourceRoot":"","sources":["../src/toolsets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,gCAAgC;AAChC,eAAO,MAAM,iBAAiB,iHAWpB,CAAC;AAEX,MAAM,MAAM,WAAW,GAAG,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC;AAE3D;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAW/D,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,EAAE,WAAW,CAAC,MAAM,CAGlD,CAAC;AAEH;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"toolsets.d.ts","sourceRoot":"","sources":["../src/toolsets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,gCAAgC;AAChC,eAAO,MAAM,iBAAiB,iHAWpB,CAAC;AAEX,MAAM,MAAM,WAAW,GAAG,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC;AAE3D;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAW/D,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,EAAE,WAAW,CAAC,MAAM,CAGlD,CAAC;AAEH;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAoMlE,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,uCAAuC;IACvC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACpB,+CAA+C;IAC/C,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,6DAA6D;IAC7D,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,kEAAkE;IAClE,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,SAAS,EAAE,SAAS,MAAM,EAAE,GAC3B,aAAa,CAkEf;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EACvD,KAAK,EAAE,SAAS,CAAC,EAAE,EACnB,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,GAC1B,CAAC,EAAE,CAEL;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,SAAS,MAAM,EAAE,GAC5B;IACD,EAAE,EAAE,KAAK,CAAC;IACV,KAAK,EAAE;QAAE,IAAI,EAAE,iBAAiB,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,KAAK,CAAA;KAAE,CAAC;CACvE,CAyBA"}
|
package/dist/toolsets.js
CHANGED
|
@@ -187,6 +187,7 @@ export const TOOL_TOOLSET_MAP = {
|
|
|
187
187
|
echo_facility_report: "vetting",
|
|
188
188
|
epa_tri_facilities: "vetting",
|
|
189
189
|
courtlistener_search_opinions: "vetting",
|
|
190
|
+
courtlistener_search_dockets: "vetting",
|
|
190
191
|
nonprofit_search: "vetting",
|
|
191
192
|
nonprofit_financials: "vetting",
|
|
192
193
|
lda_search_filings: "vetting",
|
package/dist/toolsets.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolsets.js","sourceRoot":"","sources":["../src/toolsets.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"toolsets.js","sourceRoot":"","sources":["../src/toolsets.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cliwant/mcp-sam-gov",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.17.0",
|
|
4
4
|
"mcpName": "io.github.cliwant/mcp-sam-gov",
|
|
5
5
|
"description": "Most comprehensive keyless-first MCP server for US federal + state/local (SLED) contracting + spending + regulation: SAM.gov, USAspending, Federal Register, eCFR, Grants.gov, plus SLED procurement bids (OpenGov, Bonfire, ArcGIS, Socrata 53 hosts). 152 tools (147 need no API key), plug into Claude Desktop / Claude Code / Codex CLI / Cursor / Continue / Gemini CLI.",
|
|
6
6
|
"keywords": [
|
package/src/courtlistener.ts
CHANGED
|
@@ -207,7 +207,8 @@ export function extractNextCursor(next: unknown, label: string): string | null {
|
|
|
207
207
|
|
|
208
208
|
// ─── Tool: courtlistener_search_opinions ──────────────────────────
|
|
209
209
|
export type CourtlistenerSearchOpinionsArgs = {
|
|
210
|
-
query?: string; // → q
|
|
210
|
+
query?: string; // → q (full-text; bare company name → text mentions, NOT actual-party)
|
|
211
|
+
party?: string; // → caseName:"…" fielded query; finds actual-party cases (~327 for "Lockheed Martin" vs ~5,954 bare)
|
|
211
212
|
court?: string; // a court id (e.g. uscfc|cafc|scotus); ^[a-z0-9]+$
|
|
212
213
|
dateFiledAfter?: string; // → filed_after; ^\d{4}-\d{2}-\d{2}$
|
|
213
214
|
dateFiledBefore?: string; // → filed_before; ^\d{4}-\d{2}-\d{2}$
|
|
@@ -280,7 +281,12 @@ export async function searchOpinions(
|
|
|
280
281
|
const filtersApplied: string[] = [];
|
|
281
282
|
// natureOfSuit has no verified dedicated filter on the v4 opinions search, so it
|
|
282
283
|
// is folded into the `q` full-text query (disclosed via NATURE_OF_SUIT_QUERY_NOTE).
|
|
284
|
+
// `party` builds a caseName:"…" fielded query (actual-party match, not text mention).
|
|
283
285
|
const qParts: string[] = [];
|
|
286
|
+
if (args.party !== undefined && args.party !== "") {
|
|
287
|
+
qParts.push(`caseName:"${args.party}"`);
|
|
288
|
+
filtersApplied.push("party");
|
|
289
|
+
}
|
|
284
290
|
if (args.query !== undefined && args.query !== "") {
|
|
285
291
|
qParts.push(args.query);
|
|
286
292
|
filtersApplied.push("query");
|
|
@@ -463,3 +469,240 @@ function summarizeDrfError(body: unknown): string | null {
|
|
|
463
469
|
}
|
|
464
470
|
return parts.length > 0 ? parts.join(" | ") : null;
|
|
465
471
|
}
|
|
472
|
+
|
|
473
|
+
// ─── Tool: courtlistener_search_dockets ───────────────────────────
|
|
474
|
+
// RECAP dockets (type=r) — the CASE-RECORD lane. FCA/qui tam matters are DOCKETS:
|
|
475
|
+
// they rarely produce a published opinion (settlements close out of court) so they
|
|
476
|
+
// are invisible to type=o. suitNature:"…" is a REAL fielded filter on dockets (not
|
|
477
|
+
// folded into q like the opinions natureOfSuit). Each docket row carries parties,
|
|
478
|
+
// filing date, status, assignee, and the docket page URL — the case record the judge
|
|
479
|
+
// wanted. `dateTerminated` is null when the case is still open (never "").
|
|
480
|
+
// Same SSRF / auth / cursor / provenance machinery as searchOpinions.
|
|
481
|
+
|
|
482
|
+
export type CourtlistenerDocket = {
|
|
483
|
+
caseName: string | null;
|
|
484
|
+
caseNameFull: string | null;
|
|
485
|
+
court: string | null; // court_citation_string / court
|
|
486
|
+
courtId: string | null; // court_id (e.g. "gand", "flmd")
|
|
487
|
+
dateFiled: string | null;
|
|
488
|
+
dateTerminated: string | null; // null when still open — NEVER ""
|
|
489
|
+
docketNumber: string | null;
|
|
490
|
+
natureOfSuit: string | null; // from suitNature — the FCA filter field
|
|
491
|
+
cause: string | null;
|
|
492
|
+
assignedTo: string | null;
|
|
493
|
+
jurisdictionType: string | null;
|
|
494
|
+
url: string | null; // full https://www.courtlistener.com/... docket URL
|
|
495
|
+
};
|
|
496
|
+
|
|
497
|
+
export type CourtlistenerSearchDocketsArgs = {
|
|
498
|
+
party?: string; // → caseName:"…" fielded query
|
|
499
|
+
query?: string; // additional free-text → folded into q alongside caseName
|
|
500
|
+
natureOfSuit?: string; // → suitNature:"…" REAL fielded filter on dockets
|
|
501
|
+
court?: string; // court id; ^[a-z0-9]+$
|
|
502
|
+
dateFiledAfter?: string; // → filed_after; ^\d{4}-\d{2}-\d{2}$
|
|
503
|
+
dateFiledBefore?: string; // → filed_before; ^\d{4}-\d{2}-\d{2}$
|
|
504
|
+
order?: string; // default "dateFiled desc"
|
|
505
|
+
cursor?: string; // opaque continuation
|
|
506
|
+
};
|
|
507
|
+
|
|
508
|
+
const DOCKET_PROVENANCE_NOTE =
|
|
509
|
+
"Data = US FEDERAL COURT PUBLIC RECORDS (dockets) served by CourtListener (Free Law Project, a non-profit) — NOT a .gov API. CourtListener republishes these records keyless; the .gov primary source (PACER) is PAYWALLED. Docket = case record (parties, filing, status); outcome/settlement is NOT in the docket record — read the docket page or DOJ press releases for that detail.";
|
|
510
|
+
|
|
511
|
+
const DOCKET_SUIT_NATURE_NOTE =
|
|
512
|
+
"natureOfSuit was applied as a fielded suitNature:\"…\" query — this IS a real filterable field on dockets (unlike opinions where it is folded into free-text q).";
|
|
513
|
+
|
|
514
|
+
/** Map ONE RECAP docket result row → curated CourtlistenerDocket shape. */
|
|
515
|
+
function mapDocket(raw: unknown): CourtlistenerDocket {
|
|
516
|
+
const o = (raw ?? {}) as Record<string, unknown>;
|
|
517
|
+
return {
|
|
518
|
+
caseName: str(o.caseName) ?? str(o.case_name),
|
|
519
|
+
caseNameFull: str(o.caseNameFull) ?? str(o.case_name_full),
|
|
520
|
+
court: str(o.court_citation_string) ?? str(o.court),
|
|
521
|
+
courtId: str(o.court_id),
|
|
522
|
+
dateFiled: str(o.dateFiled) ?? str(o.date_filed),
|
|
523
|
+
// null when open — NEVER coerce undefined/"" to ""
|
|
524
|
+
dateTerminated: (() => {
|
|
525
|
+
const raw2 = o.dateTerminated ?? o.date_terminated;
|
|
526
|
+
const s = str(raw2);
|
|
527
|
+
return s === "" ? null : s;
|
|
528
|
+
})(),
|
|
529
|
+
docketNumber: str(o.docketNumber) ?? str(o.docket_number),
|
|
530
|
+
natureOfSuit: str(o.suitNature) ?? str(o.suit_nature),
|
|
531
|
+
cause: str(o.cause),
|
|
532
|
+
assignedTo: str(o.assignedTo) ?? str(o.assigned_to_str),
|
|
533
|
+
jurisdictionType: str(o.jurisdictionType) ?? str(o.jurisdiction_type),
|
|
534
|
+
url: resolveAbsoluteUrl(o.docket_absolute_url ?? o.absolute_url),
|
|
535
|
+
};
|
|
536
|
+
}
|
|
537
|
+
|
|
538
|
+
/**
|
|
539
|
+
* Search RECAP dockets via CourtListener (`/api/rest/v4/search/`, type=r).
|
|
540
|
+
* FCA/qui tam matters are DOCKETS — they rarely produce published opinions and are
|
|
541
|
+
* invisible to courtlistener_search_opinions (type=o). suitNature:"…" is a REAL
|
|
542
|
+
* fielded filter on dockets. KEYLESS / CURSOR / provenance same as searchOpinions.
|
|
543
|
+
*/
|
|
544
|
+
export async function searchDockets(
|
|
545
|
+
args: CourtlistenerSearchDocketsArgs,
|
|
546
|
+
): Promise<MetaBundle> {
|
|
547
|
+
const label = COURTLISTENER_SEARCH_LABEL;
|
|
548
|
+
|
|
549
|
+
// ── Validate (SSRF + honesty). Same guards as searchOpinions. ──
|
|
550
|
+
if (args.court !== undefined && !COURT_RE.test(args.court)) {
|
|
551
|
+
throw new ToolErrorCarrier({
|
|
552
|
+
kind: "invalid_input",
|
|
553
|
+
retryable: false,
|
|
554
|
+
message: `Invalid court ${JSON.stringify(args.court)} — expected a CourtListener court id (lowercase alphanumerics, ^[a-z0-9]+$), e.g. "gand", "flmd", "cafc".`,
|
|
555
|
+
upstreamEndpoint: label,
|
|
556
|
+
});
|
|
557
|
+
}
|
|
558
|
+
if (args.dateFiledAfter !== undefined && !DATE_RE.test(args.dateFiledAfter)) {
|
|
559
|
+
throw new ToolErrorCarrier({
|
|
560
|
+
kind: "invalid_input",
|
|
561
|
+
retryable: false,
|
|
562
|
+
message: `Invalid dateFiledAfter ${JSON.stringify(args.dateFiledAfter)} — expected an ISO date (^\\d{4}-\\d{2}-\\d{2}$), e.g. "2020-01-01".`,
|
|
563
|
+
upstreamEndpoint: label,
|
|
564
|
+
});
|
|
565
|
+
}
|
|
566
|
+
if (args.dateFiledBefore !== undefined && !DATE_RE.test(args.dateFiledBefore)) {
|
|
567
|
+
throw new ToolErrorCarrier({
|
|
568
|
+
kind: "invalid_input",
|
|
569
|
+
retryable: false,
|
|
570
|
+
message: `Invalid dateFiledBefore ${JSON.stringify(args.dateFiledBefore)} — expected an ISO date (^\\d{4}-\\d{2}-\\d{2}$), e.g. "2024-12-31".`,
|
|
571
|
+
upstreamEndpoint: label,
|
|
572
|
+
});
|
|
573
|
+
}
|
|
574
|
+
if (args.cursor !== undefined && !COURTLISTENER_CURSOR_RE.test(args.cursor)) {
|
|
575
|
+
throw new ToolErrorCarrier({
|
|
576
|
+
kind: "invalid_input",
|
|
577
|
+
retryable: false,
|
|
578
|
+
message: `Invalid cursor — must be a ≤8192-char URL-safe token. Pass back the _meta.nextCursor from the previous page.`,
|
|
579
|
+
upstreamEndpoint: label,
|
|
580
|
+
});
|
|
581
|
+
}
|
|
582
|
+
|
|
583
|
+
// ── Build query. party → caseName:"…"; natureOfSuit → suitNature:"…" (a REAL
|
|
584
|
+
// docket field, NOT folded into q). Both ride URLSearchParams. ──
|
|
585
|
+
const params = new URLSearchParams();
|
|
586
|
+
const filtersApplied: string[] = [];
|
|
587
|
+
const qParts: string[] = [];
|
|
588
|
+
if (args.party !== undefined && args.party !== "") {
|
|
589
|
+
qParts.push(`caseName:"${args.party}"`);
|
|
590
|
+
filtersApplied.push("party");
|
|
591
|
+
}
|
|
592
|
+
if (args.query !== undefined && args.query !== "") {
|
|
593
|
+
qParts.push(args.query);
|
|
594
|
+
filtersApplied.push("query");
|
|
595
|
+
}
|
|
596
|
+
if (args.natureOfSuit !== undefined && args.natureOfSuit !== "") {
|
|
597
|
+
qParts.push(`suitNature:"${args.natureOfSuit}"`);
|
|
598
|
+
filtersApplied.push("natureOfSuit");
|
|
599
|
+
}
|
|
600
|
+
if (qParts.length > 0) params.set("q", qParts.join(" "));
|
|
601
|
+
if (args.court !== undefined) {
|
|
602
|
+
params.set("court", args.court);
|
|
603
|
+
filtersApplied.push("court");
|
|
604
|
+
}
|
|
605
|
+
if (args.dateFiledAfter !== undefined) {
|
|
606
|
+
params.set("filed_after", args.dateFiledAfter);
|
|
607
|
+
filtersApplied.push("dateFiledAfter");
|
|
608
|
+
}
|
|
609
|
+
if (args.dateFiledBefore !== undefined) {
|
|
610
|
+
params.set("filed_before", args.dateFiledBefore);
|
|
611
|
+
filtersApplied.push("dateFiledBefore");
|
|
612
|
+
}
|
|
613
|
+
params.set("type", "r"); // FIXED — RECAP dockets only
|
|
614
|
+
params.set("order_by", args.order && args.order !== "" ? args.order : DEFAULT_ORDER);
|
|
615
|
+
if (args.cursor !== undefined) {
|
|
616
|
+
params.set("cursor", args.cursor);
|
|
617
|
+
filtersApplied.push("cursor");
|
|
618
|
+
}
|
|
619
|
+
|
|
620
|
+
const url = `https://${COURTLISTENER_HOST}${COURTLISTENER_SEARCH_PATH}?${params.toString()}`;
|
|
621
|
+
const built = new URL(url);
|
|
622
|
+
if (built.hostname !== COURTLISTENER_HOST || built.protocol !== "https:") {
|
|
623
|
+
throw new ToolErrorCarrier({
|
|
624
|
+
kind: "invalid_input",
|
|
625
|
+
retryable: false,
|
|
626
|
+
message: `Constructed CourtListener URL host ${JSON.stringify(built.hostname)} is not ${COURTLISTENER_HOST} over https — refusing to fetch (SSRF safety).`,
|
|
627
|
+
upstreamEndpoint: label,
|
|
628
|
+
});
|
|
629
|
+
}
|
|
630
|
+
|
|
631
|
+
const headers = courtlistenerAuthHeader();
|
|
632
|
+
let body: unknown;
|
|
633
|
+
try {
|
|
634
|
+
body = await getJson<unknown>(url, {
|
|
635
|
+
label,
|
|
636
|
+
headers,
|
|
637
|
+
redirect: "error",
|
|
638
|
+
});
|
|
639
|
+
} catch (e) {
|
|
640
|
+
if (e instanceof SyntaxError) {
|
|
641
|
+
throw driftError(
|
|
642
|
+
label,
|
|
643
|
+
"CourtListener /api/rest/v4/search (type=r) returned a non-JSON body at HTTP 200 — schema drift.",
|
|
644
|
+
);
|
|
645
|
+
}
|
|
646
|
+
if (e instanceof ToolErrorCarrier && e.toolError.upstreamStatus === 400) {
|
|
647
|
+
const apiMsg = await readCourtlistenerErrorMessage(url, headers);
|
|
648
|
+
throw new ToolErrorCarrier({
|
|
649
|
+
kind: "invalid_input",
|
|
650
|
+
retryable: false,
|
|
651
|
+
message: apiMsg
|
|
652
|
+
? `CourtListener rejected the docket request (HTTP 400): ${apiMsg}. Check the filter parameters.`
|
|
653
|
+
: "CourtListener rejected the docket request (HTTP 400) — check the filter parameters.",
|
|
654
|
+
upstreamStatus: 400,
|
|
655
|
+
upstreamEndpoint: label,
|
|
656
|
+
});
|
|
657
|
+
}
|
|
658
|
+
throw e;
|
|
659
|
+
}
|
|
660
|
+
|
|
661
|
+
const b = (body ?? {}) as { results?: unknown; count?: unknown; next?: unknown };
|
|
662
|
+
if (!Array.isArray(b.results)) {
|
|
663
|
+
throw driftError(
|
|
664
|
+
label,
|
|
665
|
+
"CourtListener /api/rest/v4/search (type=r) shape drift — `results` must be an array.",
|
|
666
|
+
);
|
|
667
|
+
}
|
|
668
|
+
const rawCount = b.count;
|
|
669
|
+
const countIsNumber = typeof rawCount === "number" && Number.isFinite(rawCount);
|
|
670
|
+
if (!countIsNumber && rawCount !== null && rawCount !== undefined) {
|
|
671
|
+
throw driftError(
|
|
672
|
+
label,
|
|
673
|
+
"CourtListener /api/rest/v4/search (type=r) shape drift — `count` must be a number or null.",
|
|
674
|
+
);
|
|
675
|
+
}
|
|
676
|
+
|
|
677
|
+
const dockets = (b.results as unknown[]).map(mapDocket);
|
|
678
|
+
const returned = dockets.length;
|
|
679
|
+
const totalAvailable = countIsNumber ? (rawCount as number) : null;
|
|
680
|
+
const nextCursor = extractNextCursor(b.next, label);
|
|
681
|
+
const hasMore = nextCursor !== null;
|
|
682
|
+
|
|
683
|
+
const notes: string[] = [DOCKET_PROVENANCE_NOTE, COUNT_TOTAL_NOTE];
|
|
684
|
+
if (!countIsNumber) notes.push(DEEP_PAGE_NO_COUNT_NOTE);
|
|
685
|
+
if (args.natureOfSuit !== undefined && args.natureOfSuit !== "") {
|
|
686
|
+
notes.push(DOCKET_SUIT_NATURE_NOTE);
|
|
687
|
+
}
|
|
688
|
+
notes.push(KEYLESS_NOTE);
|
|
689
|
+
notes.push(
|
|
690
|
+
`CourtListener token: ${courtlistenerTokenPresent() ? "present (Authorization: Token … sent; value never logged)" : "absent (keyless; a free COURTLISTENER_API_TOKEN lifts the rate limit)"}.`,
|
|
691
|
+
);
|
|
692
|
+
|
|
693
|
+
return withMeta(
|
|
694
|
+
{ dockets },
|
|
695
|
+
{
|
|
696
|
+
source: `${COURTLISTENER_HOST} /api/rest/v4/search (CourtListener (Free Law Project) — US federal court RECAP dockets; PACER (.gov) is paywalled; keyless)`,
|
|
697
|
+
keylessMode: true,
|
|
698
|
+
returned,
|
|
699
|
+
totalAvailable,
|
|
700
|
+
filtersApplied,
|
|
701
|
+
filtersDropped: [],
|
|
702
|
+
fieldsUnavailable: [],
|
|
703
|
+
pagination: { offset: null, limit: returned, hasMore, nextOffset: null },
|
|
704
|
+
nextCursor,
|
|
705
|
+
notes,
|
|
706
|
+
} satisfies Partial<ResponseMeta>,
|
|
707
|
+
);
|
|
708
|
+
}
|
package/src/keys.ts
CHANGED
|
@@ -159,6 +159,7 @@ export const KEY_REGISTRY: readonly KeyRegistryEntry[] = [
|
|
|
159
159
|
envVar: "COURTLISTENER_API_TOKEN",
|
|
160
160
|
sources: [
|
|
161
161
|
"CourtListener federal court opinions (courtlistener_search_opinions)",
|
|
162
|
+
"CourtListener RECAP dockets (courtlistener_search_dockets)",
|
|
162
163
|
],
|
|
163
164
|
required: false,
|
|
164
165
|
signupUrl: "https://www.courtlistener.com/help/api/rest/",
|
package/src/server.ts
CHANGED
|
@@ -130,7 +130,7 @@ const STATE_BID_FEEDS_POINTER =
|
|
|
130
130
|
const SERVER_NAME = "mcp-sam-gov";
|
|
131
131
|
// Kept in lockstep with package.json / manifest.json / server.json.
|
|
132
132
|
// Keep in sync with package.json "version" (asserted at release; see CHANGELOG).
|
|
133
|
-
const SERVER_VERSION = "1.
|
|
133
|
+
const SERVER_VERSION = "1.17.0";
|
|
134
134
|
|
|
135
135
|
// ─── Tool input schemas (Zod) ────────────────────────────────────
|
|
136
136
|
|
|
@@ -4641,11 +4641,16 @@ const LdaSearchFilingsInput = z.object({
|
|
|
4641
4641
|
// never results.length; CURSOR pagination (nextCursor extracted from `next`). court/
|
|
4642
4642
|
// dates charclass-guarded; all filter VALUES ride URLSearchParams; type=o is FIXED.
|
|
4643
4643
|
const CourtlistenerSearchOpinionsInput = z.object({
|
|
4644
|
+
party: z
|
|
4645
|
+
.string()
|
|
4646
|
+
.min(1)
|
|
4647
|
+
.optional()
|
|
4648
|
+
.describe("Company or person name to match as an ACTUAL PARTY — builds caseName:\"…\" fielded query. A bare company name in `query` matches text mentions (~5,954 for 'Lockheed Martin'); `party` finds cases where the company is actually named as a party (~327). Use `party` for vendor/contractor vetting; use `query` for full-text topic search."),
|
|
4644
4649
|
query: z
|
|
4645
4650
|
.string()
|
|
4646
4651
|
.min(1)
|
|
4647
4652
|
.optional()
|
|
4648
|
-
.describe("
|
|
4653
|
+
.describe("Additional full-text query (maps to q) — topic keywords such as 'False Claims Act' or 'bid protest'. Combined with caseName:\"…\" when `party` is also given. A bare company name here matches text mentions, not actual-party cases — use `party` for that."),
|
|
4649
4654
|
court: z
|
|
4650
4655
|
.string()
|
|
4651
4656
|
.regex(/^[a-z0-9]+$/)
|
|
@@ -4678,6 +4683,53 @@ const CourtlistenerSearchOpinionsInput = z.object({
|
|
|
4678
4683
|
.describe("Sort order (maps to order_by), default 'dateFiled desc' (most recent first). E.g. 'dateFiled asc', 'score desc'."),
|
|
4679
4684
|
});
|
|
4680
4685
|
|
|
4686
|
+
// ─── CourtListener RECAP dockets (type=r) ────────────────────────
|
|
4687
|
+
// ADR-0064. FCA/qui tam matters are DOCKETS — they rarely produce published opinions
|
|
4688
|
+
// so they are invisible to type=o. suitNature:"…" is a REAL fielded filter on dockets.
|
|
4689
|
+
// Same SSRF / auth / cursor / provenance guards as opinions.
|
|
4690
|
+
const CourtlistenerSearchDocketsInput = z.object({
|
|
4691
|
+
party: z
|
|
4692
|
+
.string()
|
|
4693
|
+
.min(1)
|
|
4694
|
+
.optional()
|
|
4695
|
+
.describe("Company or person name to match as an ACTUAL PARTY — builds caseName:\"…\" fielded query. Use for vendor/contractor due-diligence (FCA, False Claims Act, qui tam). E.g. 'Lockheed Martin' → ~9 FCA dockets."),
|
|
4696
|
+
query: z
|
|
4697
|
+
.string()
|
|
4698
|
+
.min(1)
|
|
4699
|
+
.optional()
|
|
4700
|
+
.describe("Additional free-text keywords (combined with caseName:\"…\" when `party` is given). E.g. 'qui tam' or 'whistleblower'."),
|
|
4701
|
+
natureOfSuit: z
|
|
4702
|
+
.string()
|
|
4703
|
+
.min(1)
|
|
4704
|
+
.optional()
|
|
4705
|
+
.describe("Nature-of-suit filter — builds suitNature:\"…\" fielded query (THIS IS A REAL DOCKET FIELD, not folded into q). E.g. 'False Claims' to find FCA/qui tam dockets. Disclosed in _meta.notes."),
|
|
4706
|
+
court: z
|
|
4707
|
+
.string()
|
|
4708
|
+
.regex(/^[a-z0-9]+$/)
|
|
4709
|
+
.optional()
|
|
4710
|
+
.describe("CourtListener court id (lowercase alphanumerics ^[a-z0-9]+$), e.g. 'gand' (N.D. Ga.), 'flmd' (M.D. Fla.), 'cafc'. Filters to one court."),
|
|
4711
|
+
dateFiledAfter: z
|
|
4712
|
+
.string()
|
|
4713
|
+
.regex(/^\d{4}-\d{2}-\d{2}$/)
|
|
4714
|
+
.optional()
|
|
4715
|
+
.describe("Only dockets filed on/after this ISO date (→ filed_after), e.g. '2015-01-01'."),
|
|
4716
|
+
dateFiledBefore: z
|
|
4717
|
+
.string()
|
|
4718
|
+
.regex(/^\d{4}-\d{2}-\d{2}$/)
|
|
4719
|
+
.optional()
|
|
4720
|
+
.describe("Only dockets filed on/before this ISO date (→ filed_before), e.g. '2024-12-31'."),
|
|
4721
|
+
order: z
|
|
4722
|
+
.string()
|
|
4723
|
+
.min(1)
|
|
4724
|
+
.default("dateFiled desc")
|
|
4725
|
+
.describe("Sort order (maps to order_by), default 'dateFiled desc'. E.g. 'dateFiled asc'."),
|
|
4726
|
+
cursor: z
|
|
4727
|
+
.string()
|
|
4728
|
+
.min(1)
|
|
4729
|
+
.optional()
|
|
4730
|
+
.describe("Opaque continuation token — pass back _meta.nextCursor from the previous page."),
|
|
4731
|
+
});
|
|
4732
|
+
|
|
4681
4733
|
// ─── US tax-exempt nonprofits (projects.propublica.org) — the nonprofit lane ──
|
|
4682
4734
|
// ADR-0060. IRS Form 990 public records republished KEYLESS by ProPublica Nonprofit
|
|
4683
4735
|
// Explorer (a non-profit newsroom) — NOT a .gov API (the IRS has no clean query
|
|
@@ -6591,10 +6643,16 @@ export const TOOLS: ToolDef[] = [
|
|
|
6591
6643
|
// (nextCursor extracted from `next`, host re-asserted). type=o FIXED.
|
|
6592
6644
|
defineTool({
|
|
6593
6645
|
name: "courtlistener_search_opinions",
|
|
6594
|
-
description: "Search US federal court opinions via CourtListener (www.courtlistener.com/api/rest/v4/search, type=o). ★PROVENANCE: DATA is US federal court PUBLIC RECORDS; the API is CourtListener (Free Law Project, NON-PROFIT) — NOT a .gov API; the .gov primary source (PACER) is PAYWALLED. KEYLESS (optional
|
|
6646
|
+
description: "Search US federal court opinions via CourtListener (www.courtlistener.com/api/rest/v4/search, type=o). ★PROVENANCE: DATA is US federal court PUBLIC RECORDS; the API is CourtListener (Free Law Project, NON-PROFIT) — NOT a .gov API; the .gov primary source (PACER) is PAYWALLED. KEYLESS (optional COURTLISTENER_API_TOKEN only raises the rate limit). Filters (all optional): `party` → caseName:\"…\" FIELDED QUERY — finds actual-party cases (~327 for 'Lockheed Martin'); a bare company name in `query` matches text mentions (~5,954). `query` (free-text → q, AND-ed with caseName when party given). `court` (^[a-z0-9]+$ — e.g. 'uscfc','cafc','scotus'). `dateFiledAfter`/`dateFiledBefore` (ISO). `natureOfSuit` (folded into q — no dedicated filter, disclosed). `cursor`. `order` (default 'dateFiled desc'). Returns { opinions:[{ caseName, court, courtId, dateFiled, docketNumber, natureOfSuit, status, judge, citation, absoluteUrl }] } + honest _meta. HONESTY: totalAvailable is the API's REAL count; CURSOR pagination (pass _meta.nextCursor as cursor); count:null on deep pages → totalAvailable:null DISCLOSED. For FCA/qui tam DOCKETS (rarely produce opinions) use courtlistener_search_dockets instead. Token rides ONLY the Authorization header.",
|
|
6595
6647
|
inputSchema: CourtlistenerSearchOpinionsInput,
|
|
6596
6648
|
handler: (input) => courtlistener.searchOpinions(input),
|
|
6597
6649
|
}),
|
|
6650
|
+
defineTool({
|
|
6651
|
+
name: "courtlistener_search_dockets",
|
|
6652
|
+
description: "Search US federal court RECAP DOCKETS via CourtListener (www.courtlistener.com/api/rest/v4/search, type=r). ★USE THIS for FCA / False Claims Act / qui tam matters — these are DOCKETS, not opinions; settlements rarely produce published opinions. ★PROVENANCE: DATA is US federal court PUBLIC RECORDS; the API is CourtListener (Free Law Project, NON-PROFIT) — NOT a .gov API; the .gov primary source (PACER) is PAYWALLED. KEYLESS. Key filters: `party` → caseName:\"…\" FIELDED (actual-party cases, e.g. 'Lockheed Martin' → ~9 FCA dockets). `natureOfSuit` → suitNature:\"…\" REAL DOCKET FIELD (e.g. 'False Claims' to find FCA/qui tam). `query` (free-text AND-ed with caseName when party also given). `court` (^[a-z0-9]+$). `dateFiledAfter`/`dateFiledBefore` (ISO). `cursor`. `order` (default 'dateFiled desc'). Returns { dockets:[{ caseName, caseNameFull, court, courtId, dateFiled, dateTerminated, docketNumber, natureOfSuit, cause, assignedTo, jurisdictionType, url }] } + honest _meta. dateTerminated is null when case still open (NEVER \"\"). url is the full https://www.courtlistener.com/... docket page URL. Docket = case record; outcome/settlement NOT in it — read docket page or DOJ for that. totalAvailable is the API REAL count; CURSOR pagination. Token rides ONLY Authorization header.",
|
|
6653
|
+
inputSchema: CourtlistenerSearchDocketsInput,
|
|
6654
|
+
handler: (input) => courtlistener.searchDockets(input),
|
|
6655
|
+
}),
|
|
6598
6656
|
// ━━━ US tax-exempt nonprofits (projects.propublica.org) — the nonprofit lane (2) ━━━ ADR-0060
|
|
6599
6657
|
// Who a 501(c) org IS (EIN, NTEE, subsection, ruling date, status) + its Form 990
|
|
6600
6658
|
// FINANCIALS (revenue/expenses/assets/liabilities by year) — the nonprofit/grantee/
|
package/src/toolsets.ts
CHANGED
|
@@ -195,6 +195,7 @@ export const TOOL_TOOLSET_MAP: Readonly<Record<string, ToolsetName>> = {
|
|
|
195
195
|
echo_facility_report: "vetting",
|
|
196
196
|
epa_tri_facilities: "vetting",
|
|
197
197
|
courtlistener_search_opinions: "vetting",
|
|
198
|
+
courtlistener_search_dockets: "vetting",
|
|
198
199
|
nonprofit_search: "vetting",
|
|
199
200
|
nonprofit_financials: "vetting",
|
|
200
201
|
lda_search_filings: "vetting",
|