MCP
Drive your Open Culture instruments — Habitat fluidics and MaxWell MEA recording rigs — from Claude (or any Model Context Protocol-capable assistant) in plain language. Open Culture hosts one MCP server in the cloud; connect it once and Claude can read status, run approval-gated operations, and answer questions about your rigs.
Unlike the REST API — which exposes every endpoint of a single device — the MCP
surface is compact, high-level, and fleet-aware: each tool addresses a specific
rig by its rig_id.
Connect Claude to Open Culture
You'll need
An Open Culture account — the same login you use for the web app.
Coming soon: one-click connect
We're submitting the OpenCulture connector to Anthropic's directory. Once it's listed, you'll be able to add it straight from Claude's built-in connector list — no custom URL needed. Until then, use the steps below.
Via claude.ai
- In claude.ai, open Settings → Connectors.
- Choose Add custom connector.
- For URL, enter
https://app.openculture.ai/mcp, and give it a name like OpenCulture. - Claude redirects you to the Open Culture sign-in. Log in with your Open Culture account.
- Approve the consent screen. The connector should now show as Connected.
- Open a new chat and enable the connector for that conversation (the tools / connector toggle).
That's it — ask Claude something like "Is rig MistyForest ready, and what's
its CO₂ right now?" and it will call the tools for you.
How approvals work
Nothing runs without your approval
Claude can read freely, but anything that actuates hardware (a pump move, starting a recording, powering a rig on or off) is recorded as a pending request a human must approve — in the web app's Pending Approvals panel, or via the one-click link Claude gives you. An agent can't approve its own actions. The one exception is the emergency stop (panic button), which runs immediately by design.
Every domain follows the same shape: reads return right away (or as a quick
background job you poll); operations are proposed for approval; jobs are
tracked with <domain>_list_jobs / <domain>_get_job_status; and approvals go
through <domain>_approve_job / <domain>_approve_pending (usually done in the
web app).
Where to approve
When Claude proposes an action it gives you a one-click approve link — the quickest path. You can also review everything waiting for you in the Pending Approvals panel of the Open Culture web app, which lists each request with its rig, operation, and parameters to Approve or Decline. Approval always happens in the web app, never inside the chat.
Example prompts
Once connected, just ask — Claude picks the right tools. A few to try (swap in your own rig names):
- "Is rig
MistyForestready, and what's its CO₂ and temperature right now?" - "Has CO₂ been stable on
MistyForestover the last 24 hours?" - "What have the pumps on
MistyForestbeen doing in the last hour — any failures?" - "Prime the reagent lines on
MistyForest." — Claude proposes it; you approve. - "Is the MaxWell rig
mea-1ready to record — server up, disk free?" - "Start a 5-minute recording on
mea-1." — proposed for your approval. - "What claims do we have about cortical organoids?"
Habitat — fluidics
Read status & telemetry
| Tool | What it does |
|---|---|
habitat_check_system_ready |
Is the rig ready to actuate? ready plus blocking reasons (drivers not ready, emergency active, faulted pump, stale heartbeat). |
habitat_get_rig_status |
Cached status descriptor — device/API health, safety state, pump count/faults, pending jobs. |
habitat_get_pump_status |
Per-pump snapshot and which pumps are faulted. |
habitat_get_pump_diagnostics |
Live per-pump diagnostic (encoder / registers), run as a background read job. |
habitat_get_pump_activity |
Action log over a window — what the pumps did (dispenses, primes, feeds, failures), with level / action / failed_only filters. |
habitat_get_sensor_latest · habitat_get_sensor_history · habitat_get_sensor_stats |
Latest / windowed / summarized CO₂ · temperature · humidity. |
Run operations (human-approved)
| Tool | What it does |
|---|---|
habitat_run_operation |
Propose a vetted fluidics op — dispense, prime, feed, wash, perfuse, sterilize, pump / valve / peristaltic primitives, and more (habitat_list_operations returns the live set). |
habitat_run_experiment |
Author a bespoke plan by chatting with the cloud authoring agent; it validates against a mock rig, then hands it to you to approve. |
habitat_emergency_stop |
Panic button — halts every pump immediately, no approval wait. |
habitat_ask_educator |
Ask a conceptual question about operations, errors, or microfluidics / cell-culture concepts. Read-only. |
MaxWell MEA — electrophysiology
Read status
| Tool | What it does |
|---|---|
ephys_check_system_ready |
Is the MaxWell rig ready to actuate (mxwserver listening, not busy, disk free, no emergency)? A necessary-but-not-sufficient cached check. |
ephys_get_device_info |
Device identity — device_kind, version, num_wells, sampling_rate_hz, chip_id, free disk. |
ephys_get_rig_status |
Cached status descriptor (device kind, chip id, well count, disk free, mxwserver up/down). |
ephys_get_mxwserver_status |
Is the MaxWell server listening, and its version. |
ephys_get_smartplug_status |
The rig's mains-power (smart plug) state. |
Run operations (human-approved)
| Tool | What it does |
|---|---|
ephys_run_operation |
Propose a canned rig op — start_recording, activity_scan, select_electrodes, system_on, system_off, emergency_clear (ephys_list_operations returns the live set). |
ephys_run_experiment |
Author a bespoke MaxWell experiment with the cloud authoring agent; it dummy-validates the script, then hands it to you to approve. |
ephys_emergency_stop |
Panic button — stops acquisition/stimulation and cuts the rig's mains power immediately. |
ephys_ask_educator |
Ask a conceptual question about recordings, activity scans, stimulation, or MEA hardware. Read-only. |
Recurring schedules
| Tool | What it does |
|---|---|
ephys_create_schedule |
Arm a recurring canned op — e.g. record 5 min every hour for 24 h. Bounded by an end time and/or max occurrences. Because this arms unattended future actuation, it requires a standing delegation you grant ahead of time (ocs approval delegate --hardware ephys --tier schedule --mode always) — you can't self-authorize recurring runs in the moment. |
ephys_list_schedules · ephys_cancel_schedule |
List your recurring schedules; cancel one (revokes its grant so no further occurrences fire). |
Delegate deliberately
A standing --mode always delegation lets an agent actuate hardware
unattended for the life of the grant. Grant it only when you mean to,
scope it to the specific hardware and window, and revoke it when the run is
done (ephys_cancel_schedule stops an individual schedule).
Analysis & data
Beyond driving instruments, the connector exposes tools for analyzing recordings and querying what you know — aimed at data analysis, not hardware control. These are read-oriented; committing a claim requires knowledge-graph writes to be enabled for your tenant.
Spike analysis (SpikeLab)
| Tool | What it does |
|---|---|
spikelab_list_tools |
List the deterministic SpikeLab analysis primitives you can run. |
spikelab_run, spikelab_result |
Run a primitive (non-blocking → job_id) and poll for its result. Pass a stable workspace_id to accumulate state so steps (load → curate → compute) build on each other. |
spikelab_create_thread, spikelab_send |
Open a SpikeLab session — educator (Q&A), sorter (spike sorting), or analyzer (pipelines + figures) — and converse with it. |
Ask your data
| Tool | What it does |
|---|---|
analysis_create_thread, analysis_send |
Open a general analysis session and ask it to run an analysis or produce a figure. |
graph_ask |
Ask a natural-language question about your knowledge graph; a graph-librarian agent answers, grounded on the graph, with citations. |
search_graph |
Free-text search across claims, recordings, analysis workspaces, samples, and more. |
Recordings, claims & provenance
| Tool | What it does |
|---|---|
find_recordings |
Find recordings by modality, probe, origin, or reference — your own plus the shared global pool. |
recording_windows |
The timing windows a recording carries — task/trial, stimulation, drug exposure, treatment, media, environment. |
recording_treatment_history |
How a culture was fed and treated leading up to a recording (media-state chain + fluidics schedule). |
find_claims, find_claims_by_sample, get_claim |
Browse and read hypotheses / insights, optionally scoped to a cell line or model system. |
draft_claim, author_claim |
Propose a claim (validate only) or commit one to your tenant's graph. Promotions are recorded as requests, never auto-approved. |
provenance |
Trace a derived result back to the recordings it came from. |
Bring data in
| Tool | What it does |
|---|---|
upload_recording_init |
Start a recording upload — returns presigned S3 URLs; bytes go straight to S3, never through the connector. |
Other MCP clients
The same server works with any MCP client — for example Claude Desktop or
Claude Code — by adding https://app.openculture.ai/mcp as a custom /
remote MCP server and signing in with your Open Culture account.
Prefer to call the API yourself?
If you're building your own agent rather than using these tools, drive the Habitat REST API directly — see the From code examples.