care-agent
Enables medical care management by retrieving and synthesizing PubMed literature, drafting provider emails for user review, and supporting human-in-the-loop approvals.
README
care-agent
A personal care-management agent, medical module first. Built as a reusable MCP + LangGraph skeleton — the medical domain is the first instance, not the only one. Finance, licensing, or other domains can reuse the same graph shape later with different tools and a different retrieval source plugged in, without touching the graph itself.
Deliberately a separate repo from J-Bishop-PA, not a merge into it. J-Bishop-PA sprawled across four phases and became hard to track. This repo is scoped to one domain on purpose. MCP's whole design point is that a client can connect to several servers at once — there's no need to share a codebase to use both alongside each other.
Why these choices
LangGraph over a linear pipeline. The domain has two real branches:
does this query need literature research or just local history, and does
the answer require an external action that needs sign-off first. A fixed
chain can't express that; a state graph with conditional edges can.
interrupt() plus a checkpointer gives human-in-the-loop for free instead
of hand-rolling a pause/resume mechanism.
Chroma, embedded, local default embeddings. The corpus is small — tens to low hundreds of abstracts, not millions of documents — and cost matters. No hosted vector DB to stand up or pay for, no per-call embeddings API charge for a static, small corpus. Revisit this if the corpus grows past a few hundred documents or retrieval quality turns out to need more than a small local model can give.
PubMed plus a short allowlist, not general web search. RAG output is only as trustworthy as what's indexed. General web search pulls in forums and content-farm health content right alongside real research — the source restriction is a correctness decision, not a shortcut.
No send-capable tool anywhere in this server. Every provider-facing
action is draft-only (draft_provider_email), mirroring J-Bishop-PA's
draft_reply pattern. Enforced by tests/test_no_send_tool.py, not just a
convention in a docstring — see the note below on why that distinction
matters.
Synthesis never states a diagnostic or causal conclusion. The model has no clinical grounding to draw that line itself. Output is always framed as "here's what's published, here's what to ask your doctor," never a standalone conclusion — enforced in the system prompt for the synthesize node, checked again by the guardrail node.
Same model as judge, not a separate one. Cheaper and simpler at this scale — a second Claude call with a distinct system prompt. Known limitation, worth being upfront about: this is weaker separation than a genuinely independent judge model or human review. Fine here; wouldn't be at higher stakes.
On the guardrail-as-code test: an earlier project (Baysa Analytics) had
a leakage-prevention test that looked real but mostly asserted on database
rows rather than actual function output — it would pass even if the thing
it was meant to catch happened. test_no_send_tool.py here is written
against the actual registered tool list for that reason, not against
something adjacent to it.
Status
Scaffolded, not built. Everything in graph/nodes.py, tools/*.py, and
rag/*.py is a docstring and a NotImplementedError describing intent —
see the build plan for what gets implemented in what order.
Setup
python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
cp .env.example .env # fill in ANTHROPIC_API_KEY and PUBMED_EMAIL
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
Neon Database
MCP server for interacting with Neon Management API and databases
E2B
Using MCP to run code via e2b.
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.