Start a FutureClinic chat with a state-licensed US doctor from your AI app, answer FutureClinic's questions, confirm the summary that goes to the doctor, and read your doctor's replies word for word. FutureClinic is cash-pay, for adults, about their own health, and not for emergencies.
One plugin, two formats: it installs in Claude Code and in Codex from this repository, which is also the plugin marketplace. ChatGPT is not supported yet.
FutureClinic's MCP server runs at https://mcp.futureclinic.com/mcp.
The plugin adds one remote MCP server and one skill. The server's tools act only inside the signed-in patient's own FutureClinic account; no tool takes a patient id.
| Tool | Title your AI app shows | What it does |
|---|---|---|
list_chats |
List your chats | Read-only. Lists your FutureClinic chats, latest activity first, each with a status line for each thing open in it and a link. |
get_chat |
Read a chat and your doctor's replies | Reads one chat: where it stands, your doctor's messages word for word, a doctor choice waiting, and any questions or summary waiting on you. It also marks the chat read, as opening it in the app does. |
send_message |
Write to FutureClinic | Starts a FutureClinic chat with a doctor, or writes in one of your chats, in your own words. |
answer_form |
Answer your questions | Sends your answers to the questions in your chat. |
upload_attachments |
Upload attachments | Gives a single-use FutureClinic upload page where you send photos or a video into your chat, as the app's chat takes them, or for a question that asks for them, after you sign in to your own FutureClinic account. The files never pass through your AI app. No PDFs or documents. |
cancel_questions |
Stop or restart your questions | Only when you ask: cancels your questions, or starts them over where a result offers it. Either drops the answers given so far. Your AI app may ask you to approve it. |
restore_questions |
Carry on with expired questions | Brings back questions that expired where you left them, answers included. |
finish_questions |
Send your answers or accept the doctor's plan | Only on your explicit go: sends answers kept unsent on to the doctor, or takes the doctor's plan shown with your questions as the answer. Your AI app asks you to approve it. |
confirm_summary |
Send your summary to a doctor | Sends the summary you confirmed to a doctor. Your AI app asks you to approve this call. |
get_treatment_plan |
Read your treatment plan | Read-only. Reads the treatment plan, or response to lab results, your doctor sent in a chat: its words, prescriptions, lab tests or scans, where it stands and what is left to do, with links. It shows the plan only after you have confirmed your home address and ID on FutureClinic. Accepting the plan, and any other change to it, happens in the FutureClinic app or on its website. |
get_payment_link |
Get the payment link | Shows the doctor choice, FutureClinic's pick and the first five doctors with their profile links, and records yours once you make it, with a link to FutureClinic's payment page when something is left to pay. The call itself pays nothing. |
try_again |
Send your request to doctors again | Sends a request no doctor took in time, or one you canceled, to doctors again. |
The server's tool descriptions, which your AI app reads, are the full rules
for each tool; this table is a summary. Each result keeps the ids and
handles your AI app passes back (a chat_id, a doctor's profile handle) in a
part marked for the AI app only, and every block your AI app shows you word
for word ends on its own end line, so no id reaches the text you read.
Every tool declares title, readOnlyHint, destructiveHint,
idempotentHint and openWorldHint. The
server's own instructions, and each tool's description, carry the rules for each call: emergency advice comes
first; FutureClinic's safety advice and your doctor's words are passed on
unchanged; a new chat starts only on your yes, after your AI app asks once for
your whole story (unless you already told it, or in an emergency), which it
uses to answer FutureClinic's questions for you to check. The chat skill
(plugins/futureclinic/skills/chat/SKILL.md) tells the model how the tools fit
together.
- "Can a FutureClinic doctor look at the itchy rash on my arms?"
- "Has my FutureClinic doctor replied yet?"
- "What did my doctor say about the cream, word for word?"
- "What's in my FutureClinic treatment plan?"
- "I want to pay for my FutureClinic request."
- "I'm ready to answer FutureClinic's questions."
- The plugin contains no executable code: two manifest pairs, one remote MCP server URL and one skill. It stores nothing on your computer.
- Your AI app connects to
https://mcp.futureclinic.com/mcpafter you sign in to FutureClinic in your browser and agree to share data with that AI app (OAuth 2.0, through FutureClinic's sign-in ataccount.futureclinic.com). FutureClinic receives only the tool calls your AI app makes. It has no access to your AI app account. list_chatsstatus lines carry no health details.get_chatshows your doctor's messages, andget_treatment_planyour doctor's treatment plan. What you send withsend_messageandanswer_form, and what you upload on the pageupload_attachmentsgives, becomes part of your FutureClinic medical record, which FutureClinic keeps for the years state law sets and cannot delete before then.- You pay only on FutureClinic's payment page in your browser, never in the AI app, by card or, when it covers FutureClinic's pick of doctor, with your FutureClinic credit.
- Whatever you send through these tools also passes through your AI company, under its own terms.
- You can disconnect an AI app at any time in your FutureClinic account settings; FutureClinic then refuses its calls.
- FutureClinic's privacy policy: https://futureclinic.com/privacy-policy. Terms: https://futureclinic.com/terms-of-service.
- For an emergency call 911, or call or text 988 for a mental-health crisis.
Patients follow https://futureclinic.com/connect-your-ai once FutureClinic publishes it, which gives one server line per app. Set FutureClinic up once per app: a second setup at the same address, such as this plugin beside a direct line, makes you sign in twice.
Claude (claude.ai, Desktop, mobile) and Claude Code signed in with a Claude
subscription: add https://mcp.futureclinic.com/mcp as a custom connector
at https://claude.ai/customize/connectors (Add custom connector), or use the
"Add to Claude" link on FutureClinic's setup page. It works in Claude Code
too, so do not also add the server below.
Claude Code without a Claude subscription:
claude mcp add --transport http --scope user futureclinic https://mcp.futureclinic.com/mcpThen type /mcp, choose futureclinic and Authenticate, or run
claude mcp login futureclinic.
Codex:
codex mcp add futureclinic --url https://mcp.futureclinic.com/mcp
codex mcp login futureclinicChange no approval settings: FutureClinic's submit step (confirm_summary)
asks for your approval on purpose.
Use the plugin or a direct line above, never both.
Claude Code:
claude plugin marketplace add futureclinic/agent-plugin
claude plugin install futureclinic@futureclinicThen type /mcp, choose plugin:futureclinic:futureclinic and Authenticate.
Codex:
codex plugin marketplace add futureclinic/agent-plugin
codex plugin add futureclinic@futureclinic
codex mcp login futureclinic- FutureClinic's sign-in page or your AI app says AI apps aren't available for your account yet. FutureClinic is opening AI apps to patients account by account, and yours does not have them yet. Your chats are still in the FutureClinic app and website.
- Your AI app says the sign-in expired or asks you to authenticate again.
In Claude Code type
/mcp, choose the FutureClinic server and Authenticate; in Codex runcodex mcp login futureclinic; in claude.ai reconnect the connector. - A tool call says the app's copy of the tools may be out of date. Start a new session (Codex keeps its old tool list until then).
- A payment or upload link expired. Ask your AI app for a new one.
- The upload page asks you to sign in or will not open. It opens only when you are signed in to your own FutureClinic account, on your phone or computer. Sign in as yourself, then open the link again.
- Your summary was not sent because you are in another state. For a request to FutureClinic's doctors: update your address on FutureClinic's website, then confirm again. For questions from your own doctor, when the answer says that doctor isn't licensed in your new state: confirming again will not send them. Update your address, then start a new FutureClinic chat, which finds a doctor licensed there; your chat with that doctor stays locked meanwhile. Your AI app passes on the way FutureClinic gives.
- Anything else. Email help@futureclinic.com.
.agents/plugins/marketplace.json marketplace "futureclinic" for Codex (its primary path)
.claude-plugin/marketplace.json marketplace "futureclinic" for Claude Code (Codex's legacy fallback)
plugins/futureclinic/
.claude-plugin/plugin.json Claude Code manifest
.claude-plugin/icon.png directory listing icon (the green square logo)
.mcp.json Claude Code server ("type": "http")
plugin.json Agent Plugins 1.0.0 manifest (Codex 0.160+, OpenAI)
mcp.json Agent Plugins server ("type": "streamable-http")
skills/chat/SKILL.md the playbook the model follows
skills/chat/agents/openai.yaml OpenAI: the skill's MCP dependency
evals/ claude plugin eval cases with MCP mocks
schemas/ vendored agent-plugins.org 1.0.0 JSON schemas
scripts/validate.mjs repository checks (CI)
scripts/validate.test.mjs one broken copy per check, so none goes quiet (CI)
Codex 0.144 reads .mcp.json, Codex 0.160+ reads mcp.json, Claude Code reads
.mcp.json. Keep the two server files identical (same name and URL), and the
two marketplace files listing the same plugins at the same paths;
scripts/validate.mjs fails when they differ. The plugin name futureclinic
is permanent once released.
pnpm install
pnpm validate # schemas, YAML, directory rules, cross-file checks
pnpm test # each check still fails when its rule breaks
claude plugin validate . --strict # marketplace
claude plugin validate plugins/futureclinic --strict # plugin
claude --plugin-dir plugins/futureclinic plugin list # loads in Claude CodeNever use --strict-mcp-config with this plugin: it drops the plugin's server.
pnpm validate also checks the Claude directory's rules that a file can show:
a skill frontmatter without allowed-tools (a directory plugin may not
pre-answer your permission prompts), no skill text that names the model's
memory, past, previous, earlier or prior chats or conversations, chat history
or logs, conversation summaries, what it already knows about the user, or the
user's files (policy 1.F; a word list, so review still reads the rest), a
plugin README of at least 40 words outside code blocks, no system files such
as .DS_Store, only remote https:// servers (the plugin runs no local
command, so it has no package launcher to pin), and, over the saved tool
list, every tool name within 64 characters as Claude Code names it and every
tool with title, readOnlyHint and destructiveHint. It fails when a
Markdown file in the plugin, this README or docs/ names a tool the saved
list does not have: a full mcp__plugin_... name anywhere, or a backticked
snake_case name that is no tool, argument or argument value of the saved
list. A skill line that lists a tool's arguments, such as
- `get_chat` (`chat_id`, optional `wait_s`), may name only that tool's
own arguments and values, and calls none optional that the tool requires.
It fails, too, when a skill's agents/openai.yaml dependency description
names a tool the list does not have, when the skill never names a tool the
list has, and when a mock hands out a chat_id that
get_chat's mocks have no file for. It checks that hints exist, not that
they are right.
plugins/futureclinic/evals/ holds claude plugin eval cases. They answer
the FutureClinic tools from mocks (evals/mocks/futureclinic/), never the
real server, and use made-up data only. They call a model on your account, so
they run locally before a release, not in CI:
cd plugins/futureclinic
claude plugin eval . --runs 3 --no-publish --max-cost-usd 5A mock answers every call the same way, except get_chat, which answers
from get_chat/<chat_id>.md for the chat asked for, so a case reads the chat
its own timeline has; a chat_id with no file there fails the run.
evals/mocks/futureclinic/_tools.json is the server's own tools/list
answer, saved as it was sent. When a tool's name, description, schema or
annotations change on the FutureClinic server, save the new answer there,
then update the skill and the mocks that answer differently, and change the
source below. The saved copy, and every mock's wording, is the answer of the
FutureClinic server built from its source of 2026-10-23, saved that day,
before that source reached production; this line is the one place that
records it. Production may still answer differently until its
release, which the submission checklist checks before the listing goes in.
Email help@futureclinic.com. Privacy policy: https://futureclinic.com/privacy-policy. Terms: https://futureclinic.com/terms-of-service.
MIT, see LICENSE. The FutureClinic name and logo are trademarks of FutureClinic and are not licensed for other use.