careops-mcp
Click on "Install 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., "@careops-mcpCheck which carers have compliance issues in the next 30 days"
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.
careops-mcp
An MCP (Model Context Protocol) server that exposes a home-care provider's operational database to Claude — with schema-validated write tools and a tamper-evident, hash-chained audit log of every call.
Built as a working demonstration of authoring a production-style MCP server in Python: secure bidirectional connection between an LLM and local data, strict input validation before anything touches the database, and an audit trail that can prove it hasn't been altered.
What it does
Surface | Name | Purpose |
Tool |
| Query clients by suburb / preferred language |
Tool |
| One client's record + upcoming visits |
Tool |
| Write tool, Pydantic-validated: rejects past dates, malformed times, out-of-range durations, unknown IDs, and carer double-bookings |
Tool |
| Carer certifications expired or expiring within N days |
Tool |
| Re-walks the hash chain; reports the exact line if tampered |
Resource |
| Full JSONL audit trail of every tool call |
The audit log
Every tool invocation appends a JSONL entry carrying the SHA-256 of the previous entry:
{"ts": "...", "tool": "schedule_visit", "arguments": {...}, "status": "ok",
"prev_hash": "3f2a...", "hash": "9c41..."}Editing or deleting any historical record breaks the chain, and
verify_audit_log pinpoints the broken line. In compliance-sensitive
settings (aged care, audit) the question isn't only what did the AI do but
can you prove the record of it is intact — this answers both.
Related MCP server: mcp-ratchet-clinical-charting
Run it
python3 -m venv .venv
.venv/bin/pip install -e ".[dev]"
.venv/bin/python -m pytest # 9 tests: validation, double-booking, chain tamperingRegister with Claude Code:
claude mcp add careops -- /absolute/path/to/.venv/bin/python -m careops.serverOr Claude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"careops": {
"command": "/absolute/path/to/.venv/bin/python",
"args": ["-m", "careops.server"]
}
}
}Then ask Claude things like:
"Which carers have compliance problems in the next 30 days?"
"Schedule a personal-care visit for Mei Lin with a Mandarin-speaking carer tomorrow at 9am."
"Verify the audit log is intact."
The SQLite database self-seeds with demo data on first run.
Design notes
Validation before side effects.
schedule_visittakes a Pydantic model; bad input fails at the schema boundary and never reaches SQL. The double-booking check runs before the insert.Errors are honest. Unknown IDs and clashes raise with a clear message (surfaced to the model as a tool error) and are still audit-logged with an
error:*status — failures are part of the record.Compatible with mcp 1.x and 2.x. Imports
MCPServer(2.x) and falls back toFastMCP(1.x).
Available Tools
5 toolscheck_complianceA
Report carer certifications that are expired or expiring soon.
Aged-care providers must not roster carers with lapsed mandatory certifications (First Aid, Police Check). Use this before assigning visits or for a weekly compliance review.
| Name | Required | Description | Default |
|---|---|---|---|
| days_ahead | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It indicates a read operation ('report') and specifies which certifications are checked (First Aid, Police Check). It does not explicitly state non-destructiveness, but the verb implies no modification. Missing details on authentication or rate limits, but acceptable for a simple reporting tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise: three sentences, front-loaded with the purpose, followed by context and usage. No unnecessary words or redundancy. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, output schema exists), the description covers the purpose, usage context, and what certifications are checked. It does not explain the parameter or the output format, but the output schema compensates. Minor gap in parameter explanation, but overall adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, and the description does not mention the only parameter 'days_ahead'. The phrase 'expiring soon' vaguely relates, but the parameter's meaning, default, and effect are not explained. The description fails to add value beyond the schema's property name and type.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: reporting carer certifications that are expired or expiring soon, with a specific verb ('Report') and resource ('carer certifications'). It distinguishes itself from siblings by focusing on compliance, while siblings handle client management, scheduling, or audit logs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly advises when to use the tool ('before assigning visits or for a weekly compliance review') and provides context about mandatory certifications. It does not mention when not to use it or directly compare to alternatives, but the positive guidance is clear and helpful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_clientB
Get one client's full record, including their upcoming visits.
| Name | Required | Description | Default |
|---|---|---|---|
| client_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden but only states what it returns. It does not disclose permissions, failure modes, rate limits, or any additional behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, perfectly concise and front-loaded with essential information. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists, the description need not detail return fields. However, it lacks prerequisites, error conditions, or hints about when to use this over list_clients. Adequate for a simple retrieval but could be more complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The parameter client_id is obvious from name and schema, and description clarifies it retrieves a single client's record. However, with 0% schema coverage, description adds only minimal context beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (get), resource (one client's full record), and scope (including upcoming visits). It distinguishes from siblings like list_clients which retrieves multiple clients.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives. The description does not mention exclusions or scenarios where list_clients or other siblings would be preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_clientsA
List clients, optionally filtered by suburb or preferred language.
Use this to find a client before scheduling a visit or answering questions about the client base.
| Name | Required | Description | Default |
|---|---|---|---|
| suburb | No | ||
| language | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses basic behavior (list with filters) but lacks details on pagination, ordering, or that it returns all clients when no filters applied. Minimally adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no waste. First sentence states core action, second provides usage context. Excellent structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the existence of an output schema and the simplicity of the tool (list with two optional filters), the description covers the essential purpose. Could mention that it returns all clients if no filters, but remains largely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so description adds some value by mentioning 'suburb or preferred language' and the optional nature. But it does not provide additional semantic detail beyond the schema property names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List clients' with optional filters, differentiating it from sibling tools like get_client (single client) and schedule_visit. However, explicit contrast with get_client is missing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides usage context: 'Use this to find a client before scheduling a visit or answering questions about the client base.' No explicit when-not-to or alternatives are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
schedule_visitA
Schedule a care visit. Input is strictly validated (Pydantic).
Rejects past dates, malformed times, and out-of-range durations before anything touches the database. Refuses to double-book a carer at an already-scheduled date and start time.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of disclosing behavior. It thoroughly explains validation checks (past dates, malformed times, out-of-range durations, double-booking refusal), giving a clear picture of what the tool will and won't do. However, it does not discuss authentication, side effects on database, or success response.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with three short sentences that front-load the main purpose and then add essential behavioral details. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers validation and double-booking but omits prerequisites (e.g., client/carer existence), success output (likely covered by output schema), and any side effects. Adequate but with notable gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has detailed descriptions for each property, so schema coverage is effectively high (despite context signal claiming 0%). The tool description adds no parameter-level meaning beyond validation context, so it meets the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose as 'Schedule a care visit.' It uses a specific verb-resource pair and distinguishes it from siblings like check_compliance, get_client, etc., which are unrelated to scheduling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool (to schedule a visit) but does not provide explicit when-not-to-use instructions or alternative tools. It mentions validation and double-booking rejection, which helps but falls short of full guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_audit_logA
Verify the integrity of the hash-chained audit log.
Re-computes every entry's SHA-256 link. Returns valid=false with the breaking line number if any record was altered or removed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description fully carries the burden. Details the verification process (re-computes SHA-256 links) and output (valid=false with breaking line number). No destructive behavior implied.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: first defines purpose, second adds detail. No wasted words, efficiently structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters and an output schema exists, the description is complete. It explains the action and the return value structure effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters, baseline 4. Description adds meaning beyond schema by explaining the tool's purpose and output.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Verify the integrity of the hash-chained audit log' and explains it re-computes SHA-256 links. Distinct from sibling tools like check_compliance or list_clients.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly describes what the tool does and what it returns, providing clear context for when to use it. No explicit alternatives or when-not-to-use, but usage is well implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
5 tool updates
v0.1.0- First observed
check_compliance - First observed
get_client - First observed
list_clients - First observed
schedule_visit - First observed
verify_audit_log
TDQS
Scored across 5 tools
Each tool serves a distinct purpose: compliance checking, client retrieval, client listing, scheduling, and audit verification. No overlap or ambiguity.
All tool names follow a consistent verb_noun pattern (check_compliance, get_client, list_clients, schedule_visit, verify_audit_log). No mixing of conventions.
With 5 tools covering compliance, client management, scheduling, and audit, the count is well-scoped for the care operations domain. Each tool adds clear value.
The tool set covers key workflows: compliance checks, client lookup, visit scheduling, and integrity verification. Minor gaps exist (e.g., no tool to update or cancel a visit), but the core lifecycle is supported.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Truth-validated, SHA-512-sealed AI memory for Claude & Cursor. Free tier, OAuth, 38 tools.
Read and write a CRM built for agents. Every change carries who asserted it and how.
HealthGuard - 12-tool health/medical AI safety MCP: PII redaction, HIPAA, GDPR Art.9.
Give Claude only the Google Drive files you choose. Every action logged.
Related MCP Servers
FlicenseNot gradedqualityCmaintenanceEnables AI agents to manage virtual clinic data including patients, visits, diagnoses, treatments, lab/radiology orders, and search medical literature and internal knowledge base.-- AlicenseAqualityDmaintenanceMCP server for clinical charting with Claude (codename: Ratchet) - Enables Claude to document patient visits directly into Electronic Medical Records, reducing administrative burden for home health nurses.333MIT
- AlicenseNot gradedqualityDmaintenanceEnables Claude and other AI assistants to trigger HIPAA-compliant patient task management workflows through natural language.1MIT
- FlicenseAqualityCmaintenanceExposes a clinic's knowledge base and structured records to Claude Desktop as callable tools, with read tools grounded with citations and write tools gated behind approval.4-