Model Context Protocol · public catalogue
Spectra is invokable from any agent that speaks MCP.
The Spectra MCP server ships 13 live tools and 6 declared-but-not-yet-wired tools. Two of the live tools (submit_portal_action and record_diary_entry) bridge to the Spectra frontend; calling them from a peer agent (Gemini Enterprise, LangChain, an A2A peer) drives the same patient-portal actions the in-browser agent at /demo/patient-portal performs.
Live tools
13 · 6 more declared as v0.2
Patient-portal actions
- submit_portal_action
args { action: string, target: string, task: string }
Submit one patient-portal action (one of select_practitioner, select_slot, fill_phone, submit_booking_form, fill_2fa, verify_2fa, switch_tab, open_lab_panel, read_aloud, select_medication, select_pharmacy, submit_refill, done, error). Returns the booking confirmation envelope. Proxies the Spectra frontend /api/demo/agent-step route.
- click_elementv0.2
args { session_id: string, description: string }
Click a named UI element in an active Spectra session. v0.2: requires the WebSocket-to-MCP bridge currently on the spectra-mcp roadmap.
- fill_inputv0.2
args { session_id: string, field_description: string, text: string }
Type text into a named form field in an active session. v0.2 (requires WebSocket bridge).
- navigate_tov0.2
args { session_id: string, url: string }
Navigate the active session's tab to a URL. v0.2 (requires WebSocket bridge).
- scroll_tov0.2
args { session_id: string, direction: "up"|"down"|"top"|"bottom", amount?: number }
Scroll the active session's viewport. v0.2 (requires WebSocket bridge).
Voice diary (FHIR R4)
- record_diary_entry
args { type: "seizure"|"aura"|"recovery"|"medication"|"note", freeform: string, duration_sec?: number, occurred_at?: ISO8601 }
Record one voice-diary entry. Returns a FHIR R4 Observation suitable for hand-off into a clinical record. Freeform is NFC-normalised server-side.
Page understanding
- describe_page
args { url: string }
Structured description of a public web page: title, headings, interactive elements with CSS selectors and importance tiers. Calls the Spectra overlay endpoint.
- get_page_headings
args { url: string }
All headings on a public page in document order with level and selector. Useful for outline navigation and auditing heading hierarchy.
- get_form_fields
args { url: string }
All interactive inputs on a public page with label, type, selector, and placeholder. Helpful for a peer agent that wants to know what a form expects before submitting it.
Accessibility
- apply_cognitive_modev0.2
args { session_id: string, mode: "simplify" | "chunks" | "slow_speech" }
Switch a session into a reduced-cognitive-load mode (shorter sentences, slower speech, one step at a time). v0.2.
- audit_accessibilityv0.2
args { url: string }
WCAG 2.1 AA check on a public page. Returns issues with criterion references and severity. v0.2: needs a second pass with axe-core or a vision model on a screenshot.
Data lookups
- lookup_crisis_helpline
args { region: "uk"|"ie"|"us"|"ca"|"au"|"eu"|"global", line_type?: string }
Pure directory lookup for crisis and mental-health helplines. No AI in the path; the caller decides which line is appropriate. Spectra never classifies whether a user is in crisis.
- get_voice_commands
args { category?: "Navigation"|"Reading"|"Interaction"|"Modes"|"Help" }
Return the voice commands a user can say to Spectra, grouped by category. For help surfaces or for an upstream agent coaching a new user.
- list_supported_languages
args { mode?: "online" | "offline" }
Language coverage for both cloud (Gemini Live, broader) and offline (Gemma 4 + Piper TTS, narrower) modes so a caller can route a user to the right provider.
- list_supported_gestures
args { user_group?: "motor_disability"|"deaf_mute"|"low_vision"|"cognitive_load"|"noise_constrained"|"all" }
Hand-gesture vocabulary recognised by MediaPipe Hands. Camera frames never leave the device; the MCP layer only sees the recognised intent label.
- get_gesture_for_command
args { command: string }
Map a voice command to its gesture equivalent (or vice versa). Useful for users who have temporarily lost voice (post-surgery, noise) or permanently rely on gesture.
Session management
- start_session
args { user_id: string, mode?: "gemini" | "ollama" }
Initialise a new Spectra streaming session and return the WebSocket URL the caller connects to. Either Gemini Live (cloud) or Gemma 4 nano via Ollama (offline).
- get_session_status
args { session_id: string }
Read connection state, screen-share status, and last-activity timestamp of an active streaming session.
- end_session
args { session_id: string }
Cleanly terminate a Spectra session and release its resources.
Logical action ids for submit_portal_action
The patient-portal demo emits one of these action ids per step. These are the values to pass as the action argument when calling submit_portal_action from a peer agent.
select_practitioner
Pick the clinician.
select_slot
Pick an open appointment slot.
fill_phone
Set the contact telephone for the booking.
submit_booking_form
Submit the booking form (triggers 2FA).
fill_2fa
Fill the 2FA code (digits-only).
verify_2fa
Submit the 2FA code and confirm the appointment.
switch_tab
Move between appointments / results / prescriptions.
open_lab_panel
Open a specific lab-results panel.
read_aloud
Read a page region aloud at the user's pace.
select_medication
Select a prescription to refill.
select_pharmacy
Choose the dispatch pharmacy.
submit_refill
Submit the refill request.
done
Declare the task complete (orchestrator signal).
error
Declare an error (orchestrator signal, with reason).