MCP Server

AppealGo

com.appealgo/appealgo
Legal & Compliance Public & reachable MCP 2025-11-25

What this MCP does

Analyzes UK parking notices, calculates appeal deadlines, explains contravention codes, drafts appeals, and can file them after confirmation and payment.

calculate_deadlines
Calculate PCN and parking charge deadlines
Given the notice type and the date on the notice, returns the discount deadline, the challenge/representations deadline, when escalation can start, and (if you pass a rejection date) the tribunal or POPLA/IAS deadline. Statutory defaults; the notice is authoritative.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['notice_type', 'notice_date'], 'properties': {'event_date': {'type': 'string', 'description': 'yyyy-mm-dd, the parking date if different (private ANPR/windscreen)'}, 'notice_date': {'type': 'string', 'description': 'yyyy-mm-dd, the date on the notice'}, 'notice_type': {'enum': ['council_parking', 'council_postal', 'london_moving', 'tfl_charge', 'clean_air_zone', 'private_anpr', 'private_windscreen'], 'type': 'string', 'description': 'council_parking = Council parking PCN (windscreen or handed to you); council_postal = Council PCN by post (CCTV parking, bus lane or moving traffic outside London); london_moving = London bus lane, yellow box or banned turn (borough or TfL red route); tfl_charge = ULEZ, LEZ or Congestion Charge PCN (TfL); clean_air_zone = Clean Air Zone PCN (Birmingham, Bristol, Bath, Bradford, Portsmouth, Sheffield, Tyneside); private_anpr = Private parking charge by post (ANPR camera); private_windscreen = Private parking charge left on the windscreen'}, 'rejection_date': {'type': 'string', 'description': 'yyyy-mm-dd on the Notice of Rejection, if you have one'}, 'notice_to_owner_date': {'type': 'string'}}}
check_notice
Scan a parking ticket / PCN and get the grounds + draft appeal
Upload a photo or PDF of a UK parking ticket, council PCN, private parking charge, bus lane, ULEZ or Clean Air Zone notice. AppealGo reads it, identifies the issuer and contravention, finds the grounds to challenge it and drafts the appeal. Checking is free (fair-use cap per key per day); filing costs £6.99 or is covered by an Unlimited plan. Provide image_url OR image_base64. Takes 20–90 seconds. Never invent notice details: report exactly what this tool returns.
Open world
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'force': {'type': 'boolean', 'description': 'Scan even if this account already appealed the same notice'}, 'file_name': {'type': 'string'}, 'image_url': {'type': 'string', 'description': 'Public https URL of the photo/PDF'}, 'content_type': {'type': 'string', 'description': 'image/jpeg, image/png, image/heic or application/pdf (for image_base64)'}, 'image_base64': {'type': 'string', 'description': 'Base64 of the photo/PDF (data: URLs accepted)'}}}
explain_contravention_code
Explain a PCN contravention code
What a two-digit council PCN contravention code means (e.g. 01, 12, 30, 34, 62), its penalty band, and the grounds that usually beat it.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['code'], 'properties': {'code': {'type': 'string', 'description': "The code on the PCN, e.g. '12' or '31J'"}}}
file_appeal
File the appeal with the issuer
Files the drafted appeal for a notice in the account holder's own name. This sends a real appeal to a real council or parking operator and cannot be undone, so confirm with the user first. If the notice is unpaid and not covered by a plan, returns a Stripe checkout_url (£6.99 standard); once paid, AppealGo files it automatically. Name and postal address are required (saved on the profile, or pass them here). Always show the user the checkout_url rather than claiming the appeal was filed.
Destructive Open world
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['id'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string', 'description': 'Full name the appeal is filed under'}, 'address': {'type': 'string', 'description': 'Full postal address including postcode'}}}
get_guide
Read a guide
Returns a full AppealGo guide as Markdown, with its sources.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug'], 'properties': {'slug': {'type': 'string'}}}
get_notice
Get one notice with its draft appeal and status
Full detail for a notice id returned by check_notice or list_my_notices.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['id'], 'properties': {'id': {'type': 'string'}}}
list_my_notices
List the account's notices and appeals
Every notice this AppealGo account has scanned, with status and links.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
lookup_appeal_status
Look up an AppealGo appeal by reference
Public status for a customer reference such as PCN-4471A2B9.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['reference'], 'properties': {'reference': {'type': 'string'}}}
search_contravention_codes
Search contravention codes by description
Find the code for a description, e.g. 'disabled bay' or 'bus lane'.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['query'], 'properties': {'query': {'type': 'string'}}}
search_guides
Search AppealGo's appeal guides
Search plain-English guides on appealing UK parking tickets: council PCNs, private parking charges (ParkingEye, Euro Car Parks, APCOA...), bus lane, ULEZ, Clean Air Zone, Notice to Owner, TE9 witness statements, London boroughs and contravention codes. Returns slugs to pass to get_guide.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['query'], 'properties': {'query': {'type': 'string', 'description': "Free text, e.g. 'ParkingEye grace period' or 'yellow box'"}, 'category': {'enum': ['notice-types', 'operators', 'councils', 'codes'], 'type': 'string'}}}
Added
file_appeal
Sept. 21, 2026, 2:40 a.m.
Added
get_notice
Sept. 21, 2026, 2:40 a.m.
Added
list_my_notices
Sept. 21, 2026, 2:40 a.m.
Added
check_notice
Sept. 21, 2026, 2:40 a.m.
Added
lookup_appeal_status
Sept. 21, 2026, 2:40 a.m.
Added
calculate_deadlines
Sept. 21, 2026, 2:40 a.m.
Added
search_contravention_codes
Sept. 21, 2026, 2:40 a.m.
Added
explain_contravention_code
Sept. 21, 2026, 2:40 a.m.
Added
get_guide
Sept. 21, 2026, 2:40 a.m.
Added
search_guides
Sept. 21, 2026, 2:40 a.m.