{"protocolVersion":"0.3.0","name":"TrafficVision for Gemini Enterprise — ITS America 2026 Demo - TrafficVision TMC3","description":"Real-time traffic incidents, speeds/volumes, charts, maps, and historical analysis from your TrafficVision TMC3 system (free value-add). IMPORTANT for the orchestrator (Gemini): prefer invoking a single skill from this card with a structured data part {\"skill\": \"<skill_id>\", \"parameters\": {...}} when the user intent matches a skill. Use free text only when the intent is clear from the skill examples. Disambiguate carefully: (1) MAP vs LIST — 'map of incidents/activity' or 'where are...' → get_camera_activity_map; 'list/show recent incidents with photos' → get_most_recent_incidents; (2) RANKING — slowest/fastest speeds → get_slowest_cameras / get_fastest_cameras; busiest/highest volume/vph → get_busiest_cameras; most incidents/alerts → get_cameras_with_most_incidents or get_top_cameras_by_incident_type; (3) TRENDS — 'change over days/week', today vs yesterday → get_incident_trends; (4) LIVE — 'how is traffic', queues, current conditions → get_realtime_traffic_data; a camera/place/road ('S Moore', 'I-40 near Charlotte') → get_roadway_status; cameras off preset / camera status / camera health → get_camera_status. Pass limit, time window, incident_type, and chart_type in parameters when the user states them.","url":"https://tv-gemini-demo.trafficvision.com/a2a","preferredTransport":"JSONRPC","additionalInterfaces":[{"url":"https://tv-gemini-demo.trafficvision.com/a2a","transport":"JSONRPC"}],"version":"1.4.0","iconUrl":"https://tv-gemini-demo.trafficvision.com/static/agent-icon.png","documentationUrl":"https://tv-gemini-demo.trafficvision.com/user-guide/","provider":{"organization":"TrafficVision","url":"https://www.trafficvision.com"},"defaultInputModes":["text/plain","application/json"],"defaultOutputModes":["application/json","text/plain","image/jpeg","image/png","application/a2ui+json","application/json+a2ui","video/mp4"],"capabilities":{"streaming":false,"pushNotifications":false,"stateTransitionHistory":false,"extensions":[{"uri":"https://a2ui.org/a2a-extension/a2ui/v0.9","description":"A2UI v0.9 interactive surfaces","required":false,"params":{"supportedCatalogIds":["https://www.gstatic.com/vertexaisearch/a2ui/v0_9/gemini_enterprise_composite_catalog.json","a2ui://maps-agentic-ui-catalog.json"],"acceptsInlineCatalogs":false}},{"uri":"https://a2ui.org/a2a-extension/a2ui/v0.8","description":"A2UI v0.8 (legacy GE renderer)","required":false,"params":{"supportedCatalogIds":["https://a2ui.org/specification/v0_8/standard_catalog_definition.json","a2ui://maps-agentic-ui-catalog.json"],"acceptsInlineCatalogs":false}}]},"securitySchemes":{"apiKey":{"type":"apiKey","in":"header","name":"X-API-Key","description":"Optional per-customer shared secret (A2A_API_KEY). When unset in the adapter, /a2a accepts unauthenticated requests — use Gemini Enterprise 'Skip and finish' registration."}},"security":[],"skills":[{"id":"get_realtime_traffic_data","name":"Get Real-Time Traffic Data","description":"Returns the latest real-time traffic data across all cameras as a text summary plus structured JSON. Includes per-lane speeds, VPH, occupancy, density, queue status, inline highlights for slow/busy cameras, and active incident summaries. Best for current overall conditions and vague prompts like 'how is traffic'.","tags":["traffic","realtime","flow","speeds","volumes","queues"],"inputModes":["text/plain","application/json"],"outputModes":["application/json","text/plain"],"examples":["What are the current average speeds and volumes?","Show me real-time traffic data for all cameras","Which cameras currently have queues or congestion?","Give me a full traffic snapshot including camera health","Show the traffic","How is traffic right now?","What's going on with the traffic?"]},{"id":"get_camera_status","name":"Get Camera Status","description":"Live TMC3 camera health: which cameras are on preset, off preset, or disabled, cameras with no recent video (known-old timestamp and no current flow), or a full status dump for one named camera (preset, last video, view quality as an operator preview score, active incidents, speeds/volumes). Empty speed/volume is not off-preset. This is current camera state, not historical. Do not attach preset to incidents — alerts only fire while a camera is on a calibrated view. Optional parameters: camera_name, focus=off_preset.","tags":["camera","health","preset","status","ptz","realtime"],"inputModes":["text/plain","application/json"],"outputModes":["application/json","text/plain"],"examples":["Which cameras are off preset?","Show cameras away from preset","Camera status","Camera health for all cameras","Camera status of N_I-24 WB @ Ellington Parkway","Is S Moore on preset?","Which cameras are disabled?"]},{"id":"get_roadway_status","name":"Get Roadway Status","description":"Live traffic at a place or corridor: speeds, volumes, queues, and active incidents. A camera/place name (S Moore, Ellington) seeds the match; I-40 near Charlotte (or I-24 near Moore) walks that route both directions until a limit (default 10). A bare I-24/I-40 with no 'near' lists about 10 cameras ranked by incidents/queues; 'all cameras on I-24' returns every camera on that route (capped at 30). Empty speed/volume is 'no speed/volume this sample', not off-preset; off-preset and no-recent-video are called out only from TMC3 flags/timestamps. Do NOT use this for PTZ health — that is get_camera_status. Parameters: place, route (I-40), metro, limit.","tags":["traffic","roadway","corridor","realtime","cameras","speeds"],"inputModes":["text/plain","application/json"],"outputModes":["application/json","text/plain"],"examples":["S Moore","Ellington","I-40 near Charlotte","I-24 near S Moore","What's going on at Ellington Parkway","I-24","All cameras on I-24","Roadway status for I-65 near Hogan"]},{"id":"get_active_incidents","name":"Get Active Incidents","description":"Returns all currently active incidents as text plus interleaved snapshot images (JPEG file parts after each incident line). Includes camera names, incident type, priority, and location. Video clips are not attached on active incidents (privacy). Optional incident_type parameter (e.g. 'wrong-way', 'stopped', 'ww') filters results and produces type-specific messages such as 'No active wrong way incidents...'","tags":["incidents","safety","alerts","realtime","images"],"inputModes":["text/plain","application/json"],"outputModes":["application/json","text/plain","image/jpeg","image/png"],"examples":["Are there any active incidents right now?","Show me the stopped vehicle incidents with pictures","What incidents are happening and show the photos","What happened here?","List current active alerts and attach the snapshot images","Are there any wrong way alerts right now?","Any ww alerts active?"]},{"id":"get_most_recent_incidents","name":"Get Most Recent Incidents","description":"Returns the most recent incidents (active + cleared) as text with snapshot images interleaved after each incident. Expands lookback automatically for 'most recent' queries (up to days/weeks in free text). Supports limit, min_results, max_lookback_hours, requested_period, include_images (bool), and optional incident_type (string: 'wrong-way', 'stopped', 'congestion', 'slow', 'pedestrian', 'ww', etc.) to narrow to a specific alert type. When a type is provided, both filtering and response messages are type-specific. Queries like 'the last low visibility alert' or 'last wrong-way incident with a picture' automatically search up to ~90 days to locate infrequent events. Uses TMC3 historical incident files when needed.","tags":["incidents","recent","history","images","alerts"],"inputModes":["text/plain","application/json"],"outputModes":["application/json","text/plain","image/jpeg","image/png"],"examples":["Show me the most recent incidents with photos","What cleared incidents happened yesterday? Show the images","Give me the 8 most recent incidents over the past week with pictures","Show me at least 10 recent incidents from the last 3 days","Most recent stopped vehicle incidents with images in the past month","Have there been any wrong way alerts in the past 24 hours","Low visibility incidents from the last two days with pictures"]},{"id":"get_slowest_cameras","name":"Get Slowest Cameras","description":"Returns ranked slowest cameras (current or 5/15/60 minute rolling windows) as text plus optional attached PNG distribution chart (horizontal bar, pie, or donut). Ask for a chart type in natural language.","tags":["traffic","slow","bottlenecks","analysis","chart"],"inputModes":["text/plain","application/json"],"outputModes":["application/json","text/plain","image/jpeg","image/png"],"examples":["What are the 10 slowest cameras right now as a bar chart?","Show me the cameras with the lowest average speeds over the last 15 minutes","Slowest cameras this hour — show distribution as donut","Which locations have the slowest speeds currently?"]},{"id":"get_fastest_cameras","name":"Get Fastest Cameras","description":"Returns ranked fastest cameras (current or 5/15/60 minute rolling windows) as text plus optional attached PNG distribution chart (horizontal bar, pie, or donut). Ask for a chart type in natural language.","tags":["traffic","fast","speed","analysis","chart"],"inputModes":["text/plain","application/json"],"outputModes":["application/json","text/plain","image/jpeg","image/png"],"examples":["What are the 10 fastest cameras right now as a bar chart?","Show me the cameras with the highest average speeds over the last 15 minutes","Fastest cameras this hour — show distribution as donut","Which locations have the fastest speeds currently?"]},{"id":"get_cameras_with_most_incidents","name":"Get Cameras With Most Incidents","description":"Returns top N cameras by total incident count over a time period as text plus optional attached PNG chart (pie, donut, or horizontal bar). Supports today, last 24h, last 7d, and custom since windows. Optional incident_type filter.","tags":["incidents","analysis","problem areas","trends","chart"],"inputModes":["text/plain","application/json"],"outputModes":["application/json","text/plain","image/jpeg","image/png"],"examples":["Which cameras have had the most incidents today?","Top cameras for stopped vehicle incidents last week as a pie chart","Show the distribution of incidents by camera over the last 7 days","Cameras with the most activity over the past 24 hours"]},{"id":"get_top_cameras_by_incident_type","name":"Get Top Cameras by Incident Type","description":"Returns top N cameras for one incident type (stopped, congestion, slow speed, etc.) as text plus optional attached PNG distribution chart. Use when the user names a specific incident type.","tags":["incidents","analysis","hotspots","specific-type","chart"],"inputModes":["text/plain","application/json"],"outputModes":["application/json","text/plain","image/jpeg","image/png"],"examples":["Which cameras have had the most stopped vehicle incidents in the last 24 hours as a pie chart?","Top locations for congestion incidents today — show as donut","Distribution of slow speed incidents by camera over the past week","Top 5 cameras for stopped vehicles this morning"]},{"id":"get_busiest_cameras","name":"Get Busiest Cameras","description":"Returns top N cameras by traffic volume (VPH) for current or rolling windows as text plus optional attached PNG chart. Use for 'busiest', 'highest traffic volumes', or 'top VPH'.","tags":["traffic","volume","busiest","analysis","chart"],"inputModes":["text/plain","application/json"],"outputModes":["application/json","text/plain","image/jpeg","image/png"],"examples":["What are the busiest cameras in the last hour as a bar chart?","Show the volume distribution of the top cameras over the last 15 minutes","What are the highest traffic volumes right now?","Top 8 cameras by VPH in the past hour"]},{"id":"get_incident_trends","name":"Get Incident Trends & Comparisons","description":"Returns daily incident totals, today-vs-yesterday deltas, and overall type breakdowns (most common incident types + counts + percentages) as text plus an attached PNG chart. Supports time-series (line/bar/area) or pie/donut for type distribution. Works with geo scoping and multi-day/week/month windows. Use for 'most common incident types', 'list of the types of alerts over the past 24 hours', 'how did counts change', etc.","tags":["incidents","trends","comparison","type breakdown","level3","chart"],"inputModes":["text/plain","application/json"],"outputModes":["application/json","text/plain","image/jpeg","image/png"],"examples":["How do today's incident counts compare to yesterday?","Show me the incident trend over the last 5 days as a bar chart","How did the incident counts differ over the past month? Use an area chart","Incident trend for the last week as a line graph","What are the most common incident types in the last 24 hours?","Give me a list of the types of alerts for the past week as a pie chart","Most common types of incidents around a city over the last 3 days"]},{"id":"get_camera_activity_map","name":"Camera Activity Map","description":"Returns an attached PNG map image with camera locations sized/colored by activity, plus a text legend (letters A, B, C match map markers). Google Static Maps or built-in vector roads. Filter by incident type, time window, and area. When the user says 'near <city>' / 'around <place>', pass parameters.near_place (the place name only — not lat/lon). The adapter scopes pins and zoom from cameras whose names include that place; do not omit near_place or the map is statewide. Not the same as a recent-incident list — use for geographic/spatial views.","tags":["incidents","map","location","visual","analysis","geographic"],"inputModes":["text/plain","application/json"],"outputModes":["application/json","text/plain","image/png"],"examples":["Show me a map of stopped vehicle incidents from today","Camera activity map of congestion over the last 2 days near a city","Where are the most stopped vehicles happening right now?","Camera activity map as 16:9","Show me a map of recent activity around a city","Map of camera activity for the past week"]},{"id":"get_tmc3_capabilities","name":"Get TMC3 System Capabilities & Documentation","description":"Returns a text overview of available skills, data sources, chart/map/image outputs, time windows, adapter version, and example phrasings. Use for help, capability discovery, version checks ('what version of the Gemini integration is this?'), or vague 'what can you do' questions. Supports interactive filter UIs (A2UI) for many analytical queries when the client (Gemini Enterprise) supports it.","tags":["help","documentation","capabilities","reference"],"inputModes":["text/plain","application/json"],"outputModes":["application/json","text/plain"],"examples":["What can this TMC3 system tell me?","What version of the Gemini A2A adapter is this?","What analytical skills or historical data do you have access to?","How do I get historical traffic data?","Can I retrieve photos or video of incidents?","What kind of data is available from the cameras?","What can you help me with?","Show busiest cameras (interactive filters)","test a2ui (hello world A2UI v0.9 surface)","test a2ui 0.8 (legacy A2UI hello world)"]}]}