open-dental-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@open-dental-mcp Summarize patient 4523 for my 2pm appointment."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
open-dental-mcp
Model Context Protocol (MCP) server for Open Dental — dental practice management software.
Talk to your Open Dental data from Claude, Cursor, or any MCP client. Read patients, appointments, providers, procedures, recalls. Write communications (phone calls, messages) back to patient charts.
Built against the Open Dental REST API. No existing MCP for Open Dental — this is the first.
What you can do with it
You: "Pull patient 4523 and show me their last 5 appointments + outstanding recalls."
Claude: *calls get_patient, then find_appointments, then find_recalls*
You: "Find every recall due this month and draft a friendly reminder for each."
Claude: *calls find_recalls with due_date window, drafts the messages*
You: "Just got off a call with the Smith family about rescheduling — log it."
Claude: *calls log_communication with the right comm_type + comm_mode*
You: "What providers are working at clinic 2 tomorrow?"
Claude: *calls list_providers + find_appointments, filters*Related MCP server: personaleasy-mcp-server
Install
pip install -e .Configure
You need two API keys from Open Dental's Developer Portal:
Developer API Key — applies to your integration (you register via
vendor.relations@opendental.com)Customer API Key — generated per-customer in the Developer Portal
export OPENDENTAL_DEVELOPER_KEY="..."
export OPENDENTAL_CUSTOMER_KEY="..."Who uses this server?
Approved Open Dental API Partners building tools for dental practices. Your developer key + customer keys work directly.
Dental practices / DSOs doing custom integration work. Email
vendor.relations@opendental.comto get set up.
Use with Claude Desktop
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"open_dental_mcp": {
"command": "open_dental_mcp",
"env": {
"OPENDENTAL_DEVELOPER_KEY": "your-developer-key",
"OPENDENTAL_CUSTOMER_KEY": "your-customer-key"
}
}
}
}Tools
Tool | Type | What it does |
| Diagnostic | Verifies credentials |
| Read | Fetch a patient by PatNum |
| Read | Search by name / phone / email / DOB |
| Write | Patch patient fields |
| Read | Fetch an appointment by AptNum |
| Read | List appointments (by date / patient / provider) |
| Write | Book a new appointment |
| Read | All providers in the practice |
| Read | All clinics (offices) accessible |
| Read | Treatment rooms |
| Read | Cleaning / filling / exam definitions |
| Read | Treatments performed |
| Write | Log a phone call / email / message |
| Read | Hygiene follow-up reminders |
Common patterns
Pre-visit brief
User: I'm seeing patient 4523 at 2pm. Brief me.
Agent: get_patient(patnum=4523)
find_appointments(patnum=4523, limit=5)
find_procedurelogs(patnum=4523, limit=10)
find_recalls(patnum=4523)
→ Summary: patient info, last visits, what's been done, what's dueRecall campaign
User: Build this week's recall list and draft rebooking messages.
Agent: find_recalls(due_date_start="2026-06-26", due_date_end="2026-07-03")
→ for each: pull patient, draft a friendly messagePost-call documentation
User: Just took a call from the Smiths about rescheduling next week's cleaning.
Agent: find_patients(lname="Smith", fname="...", phone="...")
log_communication(
patnum=<found>,
comm_datetime="2026-06-26T15:30:00",
comm_type=1, # ApptRelated
comm_mode=2, # Phone
sent_or_received=1, # Received
note="Patient called to reschedule cleaning. Will call back with new date."
)API coverage
Open Dental endpoint | MCP tool |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Full Open Dental API: https://www.opendental.com/site/apispecification.html
Development
pip install -e ".[dev]"
pytest
open_dental_mcpNeed a custom MCP for your SaaS?
I build production-grade MCP servers for vertical SaaS — insurance, dental, veterinary, legal, property mgmt, home services. Typical engagement: 2-4 weeks, $25K-$120K. Source-owned, MIT-licensed, no vendor lock-in.
See sanjibani/mcp-services or email sanjibani@users.noreply.github.com.
Ships in the sanjibani vertical-MCP portfolio — see also hawksoft-mcp, open-dental-mcp, ezyvet-mcp, jobber-mcp, paid-skills, mcp-vertical-template.
MIT — see LICENSE.
Acknowledgements
Open Dental for the public REST API
Built using mcp-vertical-template
Inspired by sanjibani/hawksoft-mcp (insurance vertical, same pattern)
See also
Available Tools
14 toolscreate_appointmentA
Create a new appointment.
appointment_json is a JSON object string with at minimum:
PatNum, AptDateTime, ProvNum, Op, AppointmentTypeNum.
See Open Dental API docs for the full schema.
Inputs: appointment_json (required). Returns: result
find_appointmentsA
List appointments with optional filters.
Use date=YYYY-MM-DD for a single day, or date_start + date_end
for a range. Filter by patnum, provnum, or clinicnum.
Inputs: date, limit, patnum, provnum, +3 more. Returns: result
find_patientsA
Search for patients by name / phone / email / DOB. Returns matching records.
At least one criterion must be provided. Use this to find a patient's
PatNum before calling get_patient or other record-specific tools.
Inputs: email, fname, limit, lname, +2 more. Returns: result
find_procedurelogsC
List procedure log entries (treatments performed). Filterable.
Inputs: limit, patnum, date_end, date_start. Returns: result
find_recallsB
List recalls due for patients. Use due_date_start + due_date_end
to get everyone due for a hygiene visit in a date window.
Inputs: limit, patnum, recall_type, due_date_end, +1 more. Returns: result
get_appointmentB
Fetch a single appointment by AptNum.
Inputs: aptnum (required). Returns: result
get_patientA
Fetch a single patient by PatNum (Open Dental's internal patient ID).
Inputs: patnum (required). Returns: result
health_checkA
Verify credentials are valid by hitting /providers (always accessible).
Inputs: no named parameters. Returns: result
list_appointment_typesB
List appointment type definitions (cleaning, filling, exam, etc.).
Inputs: no named parameters. Returns: result
list_clinicsA
List clinics (offices) accessible to this developer account.
Inputs: no named parameters. Returns: result
list_operatoriesB
List operatories (treatment rooms). Optionally filter by clinic number.
Inputs: clinicnum. Returns: result
list_providersA
List all providers (dentists + hygienists) in the practice.
Inputs: no named parameters. Returns: result
log_communicationB
Log a phone call / email / message to a patient chart (commlog).
Open Dental uses integer codes — see: https://www.opendental.com/site/apicommlogs.html
Common values: comm_type: 1=ApptRelated, 2=Insurance, 3=Recalls/Statements, 4=General, 5=Lab, 6=Financial, 7=Medical, 8=Other comm_mode: 1=None, 2=Phone, 3=Email, 4=TextMessage, 5=Mail sent_or_received: 0=Sent, 1=Received
Inputs: note (required), patnum (required), comm_type (required), comm_datetime (required), +2 more. Returns: result
update_patientA
Update fields on an existing patient record.
updates_json is a JSON object string of fields to change, e.g.
'{"Email": "new@example.com", "WkPhone": "5551234567"}'. Only fields
included in the object will be modified.
Inputs: patnum (required), updates_json (required). Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 14 tools
Each tool has a clear and distinct purpose, targeting different entities (appointments, patients, procedures, recalls, clinics, etc.) with no overlap or ambiguity.
All tools follow a consistent verb_noun pattern using lowercase with underscores (e.g., create_appointment, list_providers), making them predictable and easy to understand.
With 14 tools covering core dental practice operations, the count is well-scoped and appropriate for the domain, avoiding bloat or insufficiency.
The tool set is predominantly read-focused, missing critical write operations such as creating patients or updating/deleting appointments, which limits agent autonomy and may cause failures.
Maintenance
Related MCP Connectors
Read appointments, open slots, providers, procedure codes and recalls in Open Dental.
Read-only MCP: US dental intel, all-category Medicaid fee schedules, dentist lookup. Free tier.
Read and write NexHealth appointments, patients, providers and locations.
Hosted MCP server for the Healthie EHR & telehealth API: patients, appointments, charting, tasks.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables integration with the Cliniko practice management system through MCP tools and resources. Supports patient management, appointment scheduling, and practice data access through natural language interactions.-
- FlicenseAqualityDmaintenanceMCP server for accessing PersonalEasy / EasyDental Cloud / DentalKids APIs, enabling read-only queries of appointments, production KPIs, provider info, and active units.4-
- AlicenseNot gradedqualityBmaintenanceEnables dental clinic staff to manage appointments, verify patient affiliation, and track accounts receivable through MCP tools, with OAuth 2.1, per-tool scopes, and human approval required for every mutation.MIT
- AlicenseNot gradedqualityCmaintenanceEnables LLMs and MCP clients to interact with patient records, encounters, and practice information through tools for clinical, scheduling, messaging, and administrative workflows.MIT