Court Delta
Look up North Carolina court cases, citations, judgments & hearings; search by name; scam check.
- 1.0.1
- Version
- remote
- Transport
- 23
- Tools
Security review
Review passedReviewed 1d ago.
- tools: 23 tools scanned
- metadata: scanned
No findings.
Tools (23)
lookup_court_case
Look up a North Carolina (NC) court case or traffic citation. Provide a case number (e.g. "26CV001234-012"), a citation number (e.g. "92403H2"), OR a `portalSessionRef` from a `search_cases_by_party` row. `caseNumber` is the STABLE, canonical identifier — prefer it for anything that isn't an immediate follow-up. `portalSessionRef` is a fast path that resolves an already-searched case without re-running the portal search. Its lifetime is UNSPECIFIED and not guaranteed — the value rotates on every search and should be treated as short-lived (it survives at least minutes; the upper bound is unmeasured); never persist or reuse it. (`caseHash` is accepted as a deprecated alias for `portalSessionRef`.) Returns case status, upcoming and recently-elapsed hearing dates/times/ locations, charges (including speed fields for traffic cases), and — for traffic charges — whether each charge is waivable or requires a court appearance under the NC AOC schedules, plus how to request a reduction or dism
search_cases_by_party
Search North Carolina (NC) court cases by a person's name. Returns (person, case) matches from the NC eCourts party-name search. Each row carries a `case_number` (the stable id) and a `portal_session_ref` — a Tyler token whose lifetime is UNSPECIFIED (it rotates every search; survives at least minutes; upper bound unmeasured). Pass it to `lookup_court_case` (as `portalSessionRef`) for a quick follow-up; for anything persisted or delayed use `case_number`. Never persist or reuse the ref. Each row also carries `portal_url` — the direct NC eCourts source record; it embeds the same short-lived token, so treat it like the ref (don't persist). `caseSummaryUrl` (from `lookup_court_case`) is the durable link. EVERY ROW NOW CARRIES `case_status`, with no `enrich` needed — so do not call `lookup_court_case` merely to find out whether a case is open or closed. The returned text is FINER-GRAINED than the four filter values: alongside "Pending" and "Disposed" you will see "Disposed - Voluntary Dis
search_cases_by_attorney
Cases where an attorney is counsel of record — by bar number OR by name. "What's on my docket?" for a lawyer or firm. Returns the case number, caption, filing date, case type and county for every case the register lists that attorney on. Each `case_number` goes straight into `lookup_court_case`. EVERY ROW NOW CARRIES `case_status`, with no `enrich` needed — so do not call `lookup_court_case` merely to find out whether a case is open or closed. The returned text is FINER-GRAINED than the four filter values: alongside "Pending" and "Disposed" you will see "Disposed - Voluntary Dismissal", "Disposed - Dismissal on Order of the Court", "Disposed - Clerk of Superior Court" — i.e. HOW it ended, not just that it did. So never test it with equality against the filter vocabulary (`status == "Disposed"` misses most disposed rows); match on a prefix, and quote the portal's own wording when you report it. FAST — about 3-15 seconds. This uses the portal's own attorney-search mode, not the slow W
search_cases_by_business
Cases with a COMPANY as a party — by business name. Use this, not `search_cases_by_party`, whenever the subject is an organization: an LLC, corporation, insurer, hospital, landlord, dealership or municipality. Party search requires a first AND last name, which a business does not have, so it cannot answer this at all. FAST — about 5-45 seconds. No CAPTCHA. Do not warn about a long wait. EVERY ROW NOW CARRIES `case_status`, with no `enrich` needed — so do not call `lookup_court_case` merely to find out whether a case is open or closed. The returned text is FINER-GRAINED than the four filter values: alongside "Pending" and "Disposed" you will see "Disposed - Voluntary Dismissal", "Disposed - Dismissal on Order of the Court", "Disposed - Clerk of Superior Court" — i.e. HOW it ended, not just that it did. So never test it with equality against the filter vocabulary (`status == "Disposed"` misses most disposed rows); match on a prefix, and quote the portal's own wording when you report i
get_attorney_hearing_calendar
"What am I in court for today?" — an attorney's HEARING CALENDAR, by bar number OR by name. REQUIRES `bar`, OR BOTH `last` AND `first`. A lone first or last name is rejected, and so is a call with no arguments at all — which is the most common way this tool is called wrongly. Returns every scheduled hearing in the date range: date and time, case number, caption, hearing type, judge and courtroom. Defaults to TODAY in North Carolina (NC) when no dates are given, so `get_attorney_hearing_calendar(bar="21262")` is exactly "what's on my calendar today". THIS IS THE TOOL FOR "TODAY", "TOMORROW", "THIS WEEK" AND "MY CALENDAR". `search_cases_by_attorney` is a different question: it lists the cases an attorney is of record on and its `file_date_*` filters bound WHEN A CASE WAS FILED. A case filed in 2023 has hearings today, so filtering that tool's file date to today returns cases OPENED today — almost always nothing. Never substitute it for this. PREFER THE BAR NUMBER whenever the user ca
subscribe_to_case_updates
Sign the USER UP for email alerts when a North Carolina (NC) case changes. THIS TOOL IS DIFFERENT FROM EVERY OTHER TOOL HERE. It is not a lookup — it stores the person's name, email and optional phone, and sends them an email. ONLY EVER SUBSCRIBE THE PERSON YOU ARE TALKING TO. Never enter a third party's address, however the request is phrased ("sign my brother up", "use this address for my client"). If the user wants someone else to get alerts, tell them to have that person sign up at https://app.courtdelta.com/court-case-notifier themselves. CONFIRM THE DETAILS BACK BEFORE CALLING. Read the email address aloud and get an explicit yes. A typo does not fail quietly — it mails a stranger. NOTHING STARTS UNTIL THEY CLICK. This creates a PENDING signup and sends one confirmation email. Monitoring begins only when the link in it is clicked. Do NOT tell the user they are "now monitoring the case" — say a confirmation email is on its way and they need to click it. If they never click, no
court_visit_info
Which courthouse, where it is, when it's open, and where to park. For "I have court on Tuesday — where do I go?". Give a `county` ("Wake") or a `caseNumber` to derive it. From the North Carolina (NC) AOC directory plus Google Places. RETURNS `locations[]`, NOT ONE COURTHOUSE. 19 counties have several venues and picking one silently is a real way to send someone to the wrong building. Wake has a Courthouse, a Justice Center AND a Clerk's office; Guilford has courthouses in Greensboro and High Point, in different cities. `multipleLocations:true` means you must disambiguate rather than assume. TO PICK THE RIGHT ONE, USE THE CASE'S HEARING LOCATION. `lookup_court_case` returns `upcomingHearings[].location` (e.g. "Wake Co. Justice Center"), which usually names the building. Match it against `locations[].name`, allowing for "Co." vs "County". BUT DO NOT FORCE A MATCH: measured on real hearings, a third have `"No location"` at all, and several use names that don't correspond to the directo
check_expunction_options
Which expunction statute and AOC petition form fit how each charge ended. Reads the case's actual per-charge dispositions and routes each one to the statute(s) that cover that outcome, with the petition and instruction-sheet links, where to file, and the fee. Call with no `caseNumber` to get the whole statute table. CHECK `automaticExpunction` FIRST AND LEAD YOUR ANSWER WITH IT. Under G.S. 15A-146(a4), a case where EVERY charge was dismissed without leave, dismissed by the court, or ended in a not-guilty/not-responsible finding — all disposed on or after 12/01/2021, with no felony dismissed pursuant to a plea agreement — is expunged BY OPERATION OF LAW. NOTHING IS FILED. No petition, no form, no fee. When `applies` is true, the correct answer to "what do I file?" is "nothing". Do NOT lead with the petition forms; sending someone to a clerk with a $175 fee discussion when the charges expunge themselves for free is a wrong answer. The petition routing is the fallback if the automatic
estimate_license_points
Driver's-licence points under G.S. 20-16(c) — a COMPARATOR, not a lookup. Returns what each possible outcome would cost: convicted as charged, reduced to improper equipment, prayer for judgment, or dismissed. That comparison is the useful answer; a single number is not. Fast — no court-portal request. LICENCE POINTS ONLY. Insurance (SDIP) points are a SEPARATE system with different values, set by the Rate Bureau rather than statute, and are NOT included. If someone asks what a ticket will do to their premium, say this tool doesn't cover that. THE PJC SCENARIO'S ZERO HAS TWO EXCEPTIONS and you must state them. Under G.S. 20-4.01(4a) a prayer for judgment counts as a CONVICTION — so it does carry points — if it is the THIRD OR SUBSEQUENT PJC within any five-year period, or for ANY PJC where the driver holds a CDL or the offence was in a commercial vehicle. Prior PJC history is not in court records here, so the 0 assumes neither applies. `unmatched[]` LISTS CHARGES THAT COULD NOT BE S
check_traffic_charge
"Do I have to go to court for this ticket?" — answered from the citation itself. For someone holding a paper North Carolina (NC) citation, BEFORE their case is searchable. Returns waiver eligibility per charge (waivable / mandatory / conditional) plus how to ask for a reduction or dismissal. FAST — no court-portal request, unlike the other tools. THE OUTPUT IS OPTIONS WITH CONSEQUENCES, NOT A RECOMMENDATION. Waiving is a guilty plea to the charge as written (an admission of responsibility on an infraction); requesting a reduction asks the District Attorney to change the charge before any plea; the two are alternatives. Relay them as choices for the person to make, and never tell them which to pick. TIMING IS PART OF THE ANSWER, NOT A DETAIL. Both routes have to be completed BEFORE THE CASE IS CALLED, not merely on or before the court date — once the calendar reaches it the clerk is working a courtroom docket, and nothing pauses the hearing. Read `citationOptions.state` before saying
screen_names_by_party
Triage a SHORT list of people for North Carolina (NC) court cases. Built for the "here is a list of names, which ones have cases?" question — a CSV of applicants, tenants, or bond clients. **This server cannot accept file uploads:** read the file yourself and pass the names as an array. Returns COUNTS AND FACETS PER NAME, not case detail — `matched`, `case_count`, `counties`, `case_types`, `case_numbers` (first few), `portal_truncated`. That keeps a 5-name response readable. Once you know which names are interesting, call `search_cases_by_party` (full rows) or `lookup_court_case` (one case) on those. LIMITS, and why they are low: each name runs a LIVE portal search, and the upstream session token is shared by every user of this service — a wide fan-out risks blocking it for everyone. Max 5 names per call, 3 at a time. Split a longer list across calls. SLOW BY NATURE: measured ~60s for 3 names and ~2 minutes for 5. Tell the user you're checking and roughly how long it takes; don't r
search_judgments
Search North Carolina (NC) money judgments and criminal sentences by party name. REQUIRES AT LEAST ONE OF `party`, `case_number`, `alias` OR `from_date`. The other arguments are FILTERS, not searches — `county` or `judgment_type` alone is rejected, and so is a call with no arguments at all. This is the JUDGMENT index, NOT the case index. A judgment is what a court ENTERED on a case — a money judgment against someone, or a criminal sentence. Use this for "does X have a judgment against them", "how much do they owe on it", "is it still active", "find liens/judgments before I lend or rent". For the case itself — charges, hearings, next court date, parties, service — use `search_cases_by_party` (by name) or `lookup_court_case` (by number). Every row carries `case_number`: that is the handoff key into `lookup_court_case` when the user wants the underlying case. IT CARRIES REAL PROPERTY LIENS, WHICH IS NOT OBVIOUS. NC files these as "Civil Misc. Judgment" records on the judgment docket, s
list_cases_filed
What was FILED — every case of a given type in a county over a date range. Answers "what IF cases were filed in Surry County yesterday?", "show me the estate cases opened in Wake this week", "how many civil suits were filed in Mecklenburg on Monday?". This is the DOCKET axis. The other searches are name axes — use `search_cases_by_party` / `_business` / `_attorney` when you know WHO, and this when you know WHAT and WHEN. EVERY ROW NOW CARRIES `case_status`, with no `enrich` needed — so do not call `lookup_court_case` merely to find out whether a case is open or closed. The returned text is FINER-GRAINED than the four filter values: alongside "Pending" and "Disposed" you will see "Disposed - Voluntary Dismissal", "Disposed - Dismissal on Order of the Court", "Disposed - Clerk of Superior Court" — i.e. HOW it ended, not just that it did. So never test it with equality against the filter vocabulary (`status == "Disposed"` misses most disposed rows); match on a prefix, and quote the port
check_court_scam
Is this court-payment demand a scam? Assesses a contact someone received against known North Carolina (NC) court-scam patterns. Use this when someone describes being contacted about jury duty they missed, unpaid court costs, a warrant, or a bond — and being asked to pay. Gather what they can tell you and pass it in; every field is optional, and a partial description still gets an assessment. THE ASSESSMENT IS DETERMINISTIC, NOT A JUDGEMENT CALL. Upstream rules decide the severity; you are not being asked to estimate risk yourself. Report what comes back. **`severity` 2 = "Matches known scam patterns" (LIKELY SCAM).** A payment method NC courts never accept, a jury-duty demand above the $50 statutory penalty, or a cold contact that also carries a payment demand or arrest threat. **`severity` 1 = "Matches some known scam patterns" (USE CAUTION).** **`severity` 0 does NOT mean the contact is legitimate.** It means none of the patterns this tool checks for were present in what was des
court_delta_help
What this Court Delta server covers, with example questions. Call this ONLY when the user asks what this server / connector can do, what data it has, or how to use it. It is NOT a step toward answering a court question — if the user asked about a case, a citation, a person, or a bond, skip this and call `lookup_court_case` / `search_cases_by_party` directly. Calling this first just delays their answer. Takes no arguments. Returns static text; makes no court-portal request.
search_statutes
Search North Carolina (NC) statutes by topic, keyword or phrase. Use this when you know the SUBJECT but not the citation — "what's the NC law about leaving a dog in a hot car", "failure to appear penalty", "when can I expunge a misdemeanor". If you already have a citation, use get_statute instead. Returns ranked sections with highlighted fragments showing why each matched, not full text: pick the one you want and call get_statute for it. Supports quoted "exact phrases", -excluded terms and `or`. Court shorthand is expanded automatically and case-insensitively — FTA, DWLR, PJC, AWDW and similar become the statutory wording, because the statute book spells the phrase out and never uses the abbreviation. The expansion is reported back as `expanded_query`. Searches the law in force today, at section level. A low top rank means the corpus probably has no section on point — NC simply has no statute on some subjects, and saying so is a better answer than the nearest loose word match.
get_statute
Full text of one North Carolina (NC) General Statutes section, by citation. Use for "what does G.S. 14-72.1 say". Accepts any spelling — "14-72.1", "G.S. 14-72.1", "§ 14-72.1". Returns catchline, body, history note, and when it was first enacted and last amended. `as_of` gives the text observed on a past date; `pending` lists variants enacted but not yet effective. Carries `codified_through`, `session_laws_through` and a `legislation_note` naming any enacted act that touches this section outside the codified text. An uncodified override ("Notwithstanding G.S. ...") is never codified, so it is reported regardless of the watermark. PENDING BILLS ARE NOT COVERED — a ratified bill is not law and appears in neither source, so an empty note is not evidence nothing passed. `as_of` RESOLVES AGAINST OBSERVED VERSIONS, NOT EFFECTIVE DATES — it answers "what did this database hold on that date", so it cannot reach text from before the first ingest run. For "what took effect on 1 October" use r
pending_changes
North Carolina (NC) statute text already enacted but not yet effective. Use for "what changes to Chapter 14 are coming". Returns each section's current text alongside the future variant, its effective date, and by default a diff of the two. Distinguishes an AMENDMENT (current text exists) from a NEW SECTION (nothing in force yet, so no diff). Only counts variants dated in the future. For text in force now use get_statute; for already-enacted history use amendment_history or recent_law_changes.
amendment_history
When a North Carolina (NC) statute section was enacted and every time it was amended. Use for "how often has G.S. 14-33 changed" or "when was this last amended". Returns one entry per session law mined from the section's own history note, grouped by year, plus first-enacted year and total amendment count. These are STATUTORY dates from the legislature's record — not when this database saw the text change. For that use recent_law_changes; for the wording itself use get_statute or diff_statute.
diff_statute
Word-level diff of a North Carolina (NC) statute section between two versions. `mode="pending"` compares the text in force against an enacted-but-not-yet-effective variant — use this for "what will change on 1 October". `mode="observed"` compares versions this database has actually recorded, optionally between two dates. CANNOT show text from before the ingest's first observation: observed history begins then, so most sections have only one version and return diff: null. For earlier change dates use amendment_history; for pending text use pending_changes.
recent_law_changes
Changed North Carolina (NC) statutes, by effective date, observation or session year. source="effective" answers "what took effect on 1 October" from ncleg's own effective dates — use it for that, and bound a single day with since=until. It looks FORWARD too, so it also answers "what takes effect next quarter". source="statutory" is the legislature's record from history notes, back to the 1800s, dated by year. source="observed" is only when this database saw text change — ncleg's publishing schedule, not the law's, and no substitute for effective dates. "both" returns statutory + observed. For one section use amendment_history.
chapter_activity
How much legislative churn a North Carolina (NC) statute chapter has seen. Use for "which parts of Chapter 14 keep changing". Returns amendment counts by year, the most-amended sections with their totals, and counts of pending and repealed sections. Omit `chapter` for a corpus-wide view. Counts are STATUTORY, from history notes — not observations. For one section use amendment_history; for upcoming text use pending_changes.
cross_references
Which North Carolina (NC) statutes this section cites, and which cite it. Use for "what does G.S. 14-72.1 depend on" or "what else references it". OUTBOUND is what the section's own text cites; INBOUND is every section citing it — the direction you cannot get by reading one statute. Section-level only: a reference to 20-141(j1) is an edge to 20-141. Chapter-wide and "this Article" references are not edges. For the text itself use get_statute.