Every change Wellknown observed on this MCP server, newest first, with what it was before and what it became. Tool-surface changes carry the definition diff. Nothing here is edited after the fact.
Changed the definition of "chapter_activity", "pending_changes" and "recent_law_changes"
⟨5 unchanged words⟩ {"type":"string"},{"type":"integer"},{"type":"null"}],"default":null},"since_year": ⟨14 unchanged words⟩
⟨5 unchanged words⟩ {"type":"string"},{"type":"integer"},{"type":"null"}],"default":null},"citation": ⟨19 unchanged words⟩
⟨5 unchanged words⟩ {"type":"string"},{"type":"integer"},{"type":"null"}],"default":null},"include_baseline": ⟨7 unchanged words⟩ ,"type":"integer"},"since":{"anyOf":[{"type":"string"},{"type":"integer"}],"description":"Start of the window: a session ⟨15 unchanged words⟩ single day.","examples":[2025,"2026-10-01"],"type":"string"},"source":{"default":"both"," ⟨14 unchanged words⟩
Changed the definition of "get_statute"
⟨53 unchanged words⟩ `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 ⟨55 unchanged words⟩
Changed the definition of "amendment_history", "check_traffic_charge", "cross_references" and 10 more
{"additionalProperties":false,"properties":{"citation":{"description":"The section whose amendment record you want.","examples":["14-33","G.S. 20-141"],"type":"string"}},"required":["citation ⟨2 unchanged words⟩
{"additionalProperties":false,"properties":{"charges":{"description":"At least one charge as {offense, statute}. Speeds may be numbers or strings.","examples":[[{"actual_speed":82,"offense":"SPEEDING","speed_limit":65,"statute":"20-141"}]],"items":{"description":"One charge off a ⟨198 unchanged words⟩
Changed the definition of "get_statute" and "recent_law_changes"
⟨53 unchanged words⟩ `pending` lists variants enacted but not yet effective. `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 recent_law_changes(source="effective"). Section-level only — ask for "20-141", not ⟨14 unchanged words⟩
Recently changedChanged North Carolina (NC) statutes, by effective date, observation
Certificate changed, valid to 2026-12-23
Added "search_statutes"; changed the definition of "search_cases_by_attorney" (22 tools before, 23 now)
⟨440 unchanged words⟩ 200 `truncated: true`, spanning only 20 Nov–to 31 Dec. Narrow to a few months and ⟨115 unchanged words⟩
Search North Carolina (NC) statutes by topic or keyword — 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 sim…
Added "amendment_history", "chapter_activity", "cross_references" and 4 more (15 tools before, 22 now)
When a North Carolina (NC) statute was enacted and amended — 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.
Legislative activity across a North Carolina (NC) statute chapter — 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.
What a North Carolina (NC) statute cites, and what cites it — 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.
Changed the definition of "get_attorney_hearing_calendar" and "search_judgments"
"What am I in court for today?" — an attorney's HEARINGCALENDAR.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: ⟨95 unchanged words⟩ almost always nothing. Never substitute it for this.PASS EITHER `bar` OR BOTH `last` AND `first`. A lone first or last name is rejected.PREFER THE BAR NUMBER whenever the user can supply it: it resolves toexactly oneattorney, and a name maynot.not — see `attributable` below for what that costs. READ `attributable` BEFORE ATTRIBUTING THE CALENDAR TO ANYONE. ⟨344 unchanged words⟩
Changed the definition of "check_traffic_charge" and "estimate_license_points"
⟨49 unchanged words⟩ " branch that cannot be evaluated without thelimit.limit.\n\nSPEEDS AND FLAGS ACCEPT EITHER A NUMBER OR A STRING. They were `str`-only, and callers\nkept sending `speed_limit: 65` — the obvious thing to do, since a speed limit is a\nnumber — which pydantic rejected outright:\n\n 1 validation error for call[check_traffic_charge]\n charges.0.speed_limit Input should be a valid string [input_value=65]\n\nThat is a wasted round-trip for something the server can trivially normalise, and no\namount of documentation fixes it: the caller has to already know a number must be\nquoted. `_normalise_charge` stringifies on the way to the upstream, which wants text.","properties":{"actual_speed":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"number"}]},"construction_zone":{"anyOf":[{"type":"string"},{"type":"boolean"}]},"degree":{"type":"string"},"offense":{"type":"string"},"school_zone":{"anyOf":[{"type":"string"},
Certificate recorded, valid to 2026-10-25
Authorization not required
First tool surface recorded: 15 tools (server version 1.0.0)
Showing the latest 12 events. The API returns up to 500 and filters by kind: ?kind=tool_surface_changed
{"additionalProperties":false,"properties":{"citation":{"description":"The section whose references you want, in either direction.","examples":["15A-145.5","G.S. 1A-1"],"type":"string"},"direction":{"default" ⟨12 unchanged words⟩
{"additionalProperties":false,"properties":{"citation":{"description":"The section to diff. Add mode=\"pending\" to compare today's text against an enacted-but-not-yet-effective version.","examples":["14-78","G.S. 14-33"],"type":"string"},"format":{"default" ⟨28 unchanged words⟩
{"additionalProperties":false,"properties":{"charges":{"description":"At least one charge as {offense, statute}.","examples":[[{"offense":"SPEEDING","statute":"20-141"}]],"items":{"description":"One charge off a ⟨205 unchanged words⟩
⟨9 unchanged words⟩ }],"default":null},"citation":{"description":"One NC General Statutes SECTION. Any spelling works; subsections do not — ask for 20-141, not 20-141(j1).","examples":["14-72.1","G.S. 14-72.1","§ 14-72.1","15A-145.5"],"type":"string"},"max_chars":{"default" ⟨12 unchanged words⟩
⟨14 unchanged words⟩ }],"default":null},"case_type":{"description":"1-4 letters: IF (infraction), CR/CRS (criminal), CV (civil), E (estate), SP (special proceeding), M (magistrate).","examples":["IF","CR","CV"],"type":"string"},"county":{"anyOf" ⟨36 unchanged words⟩
⟨19 unchanged words⟩ ,"type":"integer"},"since":{"description":"Start of the window: a session year or an ISO date. Pair with `until` and source=\"effective\" to ask about a single day.","examples":[2025,"2026-10-01"],"type":"string"},"source":{"default" ⟨15 unchanged words⟩
⟨38 unchanged words⟩ }],"default":null},"names":{"description":"Up to 5 people, each with `last` and `first`. Returns counts only — triage a list, then look up the rows you care about.","examples":[[{"first":"JOHN","last":"SMITH"},{"first":"JANE","last":"DOE"}]],"items":{"description":"One person to screen. ⟨26 unchanged words⟩
⟨43 unchanged words⟩ ,"type":"integer"},"name":{"description":"The business name, written as the user wrote it — \"FOOD LION, LLC\" is a narrower search than \"FOOD LION\". For a PERSON use search_cases_by_party instead.","examples":["FOOD LION, LLC","DUKE ENERGY"],"type":"string"}},"required":["name ⟨2 unchanged words⟩
⟨51 unchanged words⟩ }],"default":null},"first":{"description":"Given name. Required: a surname alone is rejected.","examples":["JOHN","MARIA"],"type":"string"},"last":{"description":"Surname. A company has none — use search_cases_by_business.","examples":["SMITH","GARCIA"],"type":"string"},"limit":{"default ⟨13 unchanged words⟩
⟨19 unchanged words⟩ ,"type":"integer"},"query":{"description":"Topic, keyword or phrase. Supports quoted \"exact phrases\", -excluded terms and `or`. Court shorthand (FTA, DWLR, PJC) is expanded for you.","examples":["dog fighting","failure to appear penalty","\"breaking or entering\""],"type":"string"}},"required":["query ⟨2 unchanged words⟩
{"additionalProperties":false,"properties":{"case_number":{"description":"The case to monitor.","examples":["26CR031353-910"],"type":"string"},"email":{"description":"The subscriber's own address. Confirm it back to them before calling; a typo mails a stranger.","examples":["jane@example.com"],"type":"string"},"name":{"description":"The SUBSCRIBER'S OWN name — never a third party's.","examples":["Jane Doe"],"type":"string"},"phone":{"anyOf ⟨12 unchanged words⟩
⟨25 unchanged words⟩ "default":"both","type":"string"},"until":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}},"required":["since"],"type":"object"}
Diff two versions of a North Carolina (NC) 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.
Read a North Carolina (NC) General Statutes section — 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. Section-level only — ask for "20-141", not "20-141(j1)". For WHEN it changed use amendment_history; for WHAT changed use diff_statute.
North Carolina (NC) statute changes enacted but not yet effective — 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.
Recently changed North Carolina (NC) statutes — Recently changed North Carolina (NC) statutes, by date or year. Two sources, both returned by default. STATUTORY is the legislature's record from each section's history note and reaches back decades — use it for "what passed in 2025". OBSERVED is when this database saw ncleg.gov text change, and only covers the period since its first ingest run. The initial corpus load is excluded from observed results unless include_baseline=true. For one section use amendment_history.
⟨4 unchanged words⟩ 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 ⟨526 unchanged words⟩ rather than implying a clean search covered them.ProvideARGUMENTatFORMATSleast(theonerequirementofitself`party`,is`case_number`,stated`alias`,atorthe`from_date`.top). `party` is a name in "LAST, FIRST ⟨720 unchanged words⟩ than guessing a filter value. Speed: ~1-3 seconds.This tool is the FAST exception — it does NOT run the slow WAF-gated portal search that `search_cases_by_party` and `lookup_court_case` do, so do not warn the user about a long wait here. Completeness:
⟨49 unchanged words⟩ " branch that cannot be evaluated without thelimit.limit.\n\nSPEEDS AND FLAGS ACCEPT EITHER A NUMBER OR A STRING. They were `str`-only, and callers\nkept sending `speed_limit: 65` — the obvious thing to do, since a speed limit is a\nnumber — which pydantic rejected outright:\n\n 1 validation error for call[check_traffic_charge]\n charges.0.speed_limit Input should be a valid string [input_value=65]\n\nThat is a wasted round-trip for something the server can trivially normalise, and no\namount of documentation fixes it: the caller has to already know a number must be\nquoted. `_normalise_charge` stringifies on the way to the upstream, which wants text.","properties":{"actual_speed":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"number"}]},"construction_zone":{"anyOf":[{"type":"string"},{"type":"boolean"}]},"degree":{"type":"string"},"offense":{"type":"string"},"school_zone":{"anyOf":[{"type":"string"},{"type":"boolean"}]},"speed_limit":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"number"}]},"statute":{"type":"string"}} ⟨31 unchanged words⟩