Skip to main content

Court Delta

com.courtdelta/court-deltaVersion 1.0.1

Look up North Carolina court cases, citations, judgments & hearings; search by name; scam check.

Status

Responds225 msAnswered our handshake without sign-in.

Registry data may be out of date

We could not refresh it, so this page shows the last copy.
Last checked
Nov 14, 2026, 13:52 UTC
Latency
225 ms
Remotes responding
1 of 1
Sign-in
No sign-in
Hosting
Hosted outside the EU (detected)
Registry data as of
Nov 14, 2026, 22:14 UTC

Data from the official MCP Registry, checked by run.zero. How we check

Connect

Streamable HTTP
https://mcp.courtdelta.com/mcpResponds225 ms
No sign-in

Claude Code

claude mcp add --transport http court-delta https://mcp.courtdelta.com/mcp

Claude Desktop and claude.ai

Settings > Connectors > Add custom connector
Name: court-delta
Remote MCP server URL: https://mcp.courtdelta.com/mcp

Cursor

{
  "mcpServers": {
    "court-delta": {
      "url": "https://mcp.courtdelta.com/mcp"
    }
  }
}

VS Code

code --add-mcp '{"name":"court-delta","type":"http","url":"https://mcp.courtdelta.com/mcp"}'

Built your own server? run.zero hosts MCP servers on European infrastructure.

Host your own MCP server on run.zero

Tools

12 tools

Tools of Court Delta
Read-only
Idempotent
Open world
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 anything about appearing: "lastDay" the court date is TODAY. It can still be settled with the clerk, but only before the case is called, and there is NO time left to file online — do not offer Guide & File. If the clerk cannot be reached in time, the person should go to court. "noCourtDate" no upcoming hearing, OR today's has already been called. Do NOT assert a failure to appear — you cannot see the courtroom and they may have attended that morning. Say: if they already went, this does not apply; if they missed it, contact the Clerk of Superior Court, because a missed date can become an FTA. "mandatory" | "conditional" | "onlineWaivable" | "inPersonWaivable" as before. NEVER REPORT "no appearance needed" ON "lastDay" OR "noCourtDate", however many of the individual charges come back `waivable`. Missing a court date on a Chapter 20 casNot declaredYesNot declaredNo
court_delta_helpWhat 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.Not declaredYesNot declaredNo
court_visit_infoWhich 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 directory — "Buncombe Co. Judicial Complex" is the Buncombe County Courthouse, "Alamance Co. JB Allen" is the Alamance County Courthouse. When it doesn't map cleanly, SHOW THE OPTIONS and let the user choose. Guessing between Wake's Courthouse and its Justice Center is exactly the wrong place to be confident. HOURS ARE REAL — and watch for lunch closures. A value like "08:30-12:30, 13:30-17:00" means the venue SHUTS between those times; someone arriving at 1pm in Nash, Wilson, Cherokee or either Guilford courthouse finds a locked door. Say the closure out loud. Courts also close on NC state holidays, which these hours do not encode. `parkingAttributes` are what the venue publishes — "freeLot", "paidGarage", "onSite" etc. ABSENT MEANS NOT CLAIMED, NOT "no parking". `nearbyParking` (actual lots near the building, with `distanceMeters` and a `mapsUrl`) and `parkingMapUrl` (a static map image, courthouse marked "C") appear on AT MOST ONE location — the one the scrape described. Their absence onNot declaredYesNot declaredYes
estimate_license_pointsDriver'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 SCORED — always mention them. The schedule has a real "All other moving violations = 2" row, so a charge that matched the catch-all (`viaCatchAll: true`) and one we failed to classify are different things; do not let a total silently omit either. Non-Chapter-20 charges score nothing at all — a drug or assault charge is not a traffic offence and gets no points. Non-moving violations (improper equipment, parking, inspection, registration, adult seat belt) are 0, which is why "reduce to improper equipment" is the standard outcome people seek. SPEEDING TURNS ON ABSOLUTE SPEED, not how far over the limit: the schedule row is "speeding in excess of 55 mph = 3". 50-in-a-45 is 2, not 3. Pass `actual_speed` when known — without it a speeding charge cannot be scored and lands in `unmatched`. POINTS ARE NOT THE WHOLE CONSEQUENCE OF A SPEEDING CONVICTION. Check `excessiveSpeedingSuspension` and report it whenever it applies. G.S. 20-16.1(a) mandates a 30-DAY LICENCE SUSPENSION, imposed by the DiNot declaredYesNot declaredNo
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 can supply it: it resolves to exactly one attorney, and a name may not — see `attributable` below for what that costs. READ `attributable` BEFORE ATTRIBUTING THE CALENDAR TO ANYONE. True means these hearings belong to exactly one attorney; false means they do not and must not be described as one person's day. On a BAR search it is always true and `attorney_name` is null — the hearing search returns no name, so that null means "not reported", not "ambiguous". A NAME SEARCH MAY NOT BE ATTRIBUTABLE. The hearing grid has no attorney column, so if a name matches several attorneys their hearings come back MERGED with no way to tell whose is whose. To catch this the tool cross-checks the name against the case index and reports `matched_attorneys`: - exactly one match -> `attorney_name` is set; treat the calendar as that person's - more than one -> the calendar spans them all and CANNOT be split. Say so and ask for a State Bar number. Do not present it as one Not declaredYesNot declaredYes
list_cases_filedWhat 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 portal's own wording when you report it. `date_start`/`date_end` are the **FILED** date, not a hearing date. A case filed in 2023 can have a hearing today — for "who is in court today", use `get_attorney_hearing_calendar`. Accepts YYYY-MM-DD, or the words "today" and "yesterday" (resolved in North Carolina (NC) time). **Defaults to YESTERDAY, not today**, when no date is given, and says so in `date_note`. Today's filings are still being keyed in by clerks, so a "today" answer is a partial set that reads like a complete one. **`case_type` is a case-number PREFIX, not a type code.** `CR` also returns `CRS`; `CV` also returns `CVD` and `CVM`. Read `case_type_breakdown` before reporting a count as "42 CR cases" — some of them may be CRS. Common types: `IF` infraction (traffic), `CR`/`CRS` criminal, `CV`/`CVD`/`CVM` civil, `E` estate, `SP` special proceeding, `M` civil misc. judgment (liens, lis pendens). **Completeness.** The portal caps a search at 200 cases; this splits the query by datNot declaredYesNot declaredYes
lookup_court_caseLook 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 dismissal (online via NC Guide & File when the county participates, else in person via the District Attorney) in `citationOptions.howToRequest`. Those are OPTIONS WITH CONSEQUENCES, NOT A RECOMMENDATION: waiving is a guilty plea to the charge as written (an admission of responsibility on an infraction), while a reduction changes the charge before any plea, and both have to be completed BEFORE THE CASE IS CALLED — not merely on or before the court date. Present them as choices, not advice; `citationOptions.notice` carries this caveat verbatim. `citationOptions.state` IS THE RESOLUTION PATH AND OUTRANKS THE PER-CHARGE CLASSES. Two of its values turn on the clock, and both forbid "no appearance needed" no matter how many charges read `waivable`: "lastDay" (the hearing is TODAY — settleable with the clerk only before the case is called, no time to file online) and "noCourtDate" (no upcoming hearing, or today's has already been called — do not assert a failure to appear, since the person may hNot declaredYesNot declaredYes
search_cases_by_attorneyCases 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 WAF-and-CAPTCHA hearing scrape, so do NOT warn the user about a long wait here. PASS EITHER `bar` OR BOTH `last` AND `first` — a first name alone or a last name alone is rejected. Prefer the bar number when you have it: it resolves to exactly one attorney, whereas a name can match several. WHEN A NAME MATCHES MORE THAN ONE ATTORNEY, `attorney_name` comes back NULL and `matched_attorneys` lists everyone matched — the results are then a MERGED docket spanning all of them. Say so and offer to narrow by bar number; do not present it as one lawyer's caseload. When exactly one attorney matched, `attorney_name` is set, and it is worth echoing so the user can confirm it resolved to who they meant. `case_status="Pending"` is usually what someone means by "my cases" — without it you get their entire history, which for a working attorney is mostly closed matters and will hit the cap below. Old cases legitimately remain Pending, so a 2016 case in a Pending list is not necessarily an error. THE Not declaredYesNot declaredYes
search_cases_by_businessCases 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 it. TYPE THE NAME AS IT APPEARS, COMMA INCLUDED. The comma is significant and NARROWING: "FOOD LION, LLC" is a different, smaller search than "FOOD LION". Do not strip it, and do not replace it with a wildcard — advice to do that appears in the portal's help text but applies to a different search mode. WILDCARD: a trailing `*` is allowed and needs AT LEAST 4 characters before it. "WALM*" works; "WAL*" is rejected. Use it for a company whose exact registered name you do not know ("CAROLINA TOWING*"). THERE IS NO PARTY ROLE IN THIS RESULT, ON PURPOSE. The portal labels every row "Defendant" regardless of the truth — including cases the company FILED as plaintiff and criminal cases where it was the victim. NEVER say the business is the defendant. Read the side from `case_name` ("X VS Y" — the company's position in the caption is the real signal), or call `lookup_court_case` for the actual party list. THE 200-CASE CAP BITES IMMEDIATELY FOR ANY CHAIN OR INSURER. `results_truncated: true`Not declaredYesNot declaredYes
search_cases_by_partySearch 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 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. Rows carry `party_type` (the person's role) plus `party_role_source`: "caption" = surname confirmed in the case caption (trust it); "portal_party_type" = role from the portal's own PartyTypeKey but no caption to confirm (common on SP / foreclosure cases — usable, but corroborate for high-stakes use); null = no role (or a role dropped as suspect, e.g. a citing officer mislabeled "Defendant" on someone else's caption). For an AUTHORITATIVE role/roster, call `lookup_court_case` and read its `parties` list. `party_role_verified` (bool) = source == "caption". Read-only. NC only. Informational, not legal advice. Required: `last`, `first`. Filters differ in where they apply:Not declaredYesNot declaredYes
search_judgmentsSearch 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, so this index — not the case search — is where they live. `cause_of_action` on each row says which kind, and the values seen in production include: CV - Claim of Lien (G.S. 44A claim of lien on real property) CV - Federal Tax Lien CV - NC Certificate of Tax Liability CV - Lien CV - Employment Security Comm Lien CV - Institutional Lien (Hospitals) CV - Lis Pendens (pending action against the property) CV - Transcript of Judgment (a judgment docketed from another county) CV - Summary Ejectment, CV - Money Owed, CV - Possession, CV - Collection on Account, CV - Other, FAM - Divorce, ... So "are there any liens against this person?" is answerable HERE, and answerable well: this index has no 200-cap, so a clean search really does mean none found. DO NOT FILTER TO "lien" TO ANSWER "ARE THERE ANY LIENS?" — that under-reports badly. A money judgment docketed with the clerk is ITSELF a lien on the Not declaredYesNot declaredYes
subscribe_to_case_updatesSign 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, nothing is ever sent and the signup stays dormant. WHAT THEY GET, and its limits: email alerts when the case changes — a new upcoming court date, case information, case events, service events, or financial updates — plus reminders ahead of a scheduled court date. Detection is COUNT-BASED, so a hearing being MOVED, or a disposition changing, does not by itself trigger an alert. Do not promise those. WHAT IS STORED: name, email, optional phone, and the case number. Every alert carries a one-click unsubscribe link. Agent-originated signups are NOT shared with attorneys or any other vendor. Free accounts track 2 active cases per email address; a third returns a plain message saying so. A case number is required — subscribe to a case, not to a person's name. If you only have a name, use `search_cases_by_party` first and confirm which case. NC only. Informational, not legal advice.NoNoYesYes

Details

Registry status
Active
Published
Sep 8, 2026
Updated
Sep 8, 2026
Repository
Not given
Categories (suggested)
CommunicationSuggested categories are assigned automatically from the registry text and may be wrong. Verified operators can correct them.
GDPR
Not declared

Are you the operator? Claim this listing