semblekit
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., "@semblekitsearch for patient named Smith"
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.
semblekit (@burrows99/semblekit)
CLI, library & MCP server for the Semble practice-management API — usable by any agent, human, or script.
semblekit drives Semble over its public GraphQL API. It models Semble's own
concepts (contacts, patients & relationships, users) rather than any one organisation's usage of them, and
ships four ways to use it: a semble CLI, an importable library, an MCP server, and a Claude Code plugin.
Not affiliated with, endorsed by, or supported by Semble Ltd. "Semble" names the API this tool interoperates with.
Design principle. Commands map to Semble resources, not workflows. A "Responsible Clinician", for example, is not a first-class Semble thing — it is just a patient relationship with a label pointing at a contact. So the tool exposes
semble patient relationship …and leaves the meaning to the consumer.
Naming. The repo and CLI command are
semblekit/semble; the published package is@burrows99/semblekiton the GitHub Packages registry (the bare namesemblekitis taken on npmjs). The Claude plugin issemble@semblekit.
Table of Contents
Related MCP server: FHIRfly MCP Server
Security
Semble is a practice-management / EHR system, so treat everything it returns as sensitive.
Health data.
patientdata is likely special-category personal data under UK GDPR / the Data Protection Act. You remain the controller or processor for anything you move with this tool. Prefer the sandbox for development.Credentials. Supplied via flags, environment variables, or
~/.config/semble/config.json— never hardcoded. Keep them out of version control; the tool never logs credential values.Tracing & data on disk. Every command appends request metadata (no bodies) to
.semble/trace.jsonl.--trace/--trace-fulladditionally persist full request and response bodies — which may contain patient data — to that file. Secrets (tokens) are redacted, patient data is not..semble/is git-ignored by default; avoid full tracing against production data unless your obligations allow it.
Background
Credentials and API URLs come from flags, environment variables, or a config file — never hardcoded — so
semblekit is not coupled to any deployment. It runs on plain Node (built-in fetch, Node ≥ 18); no Docker.
It talks to Semble's public GraphQL API (x-token). The design is object-oriented: typed entities own
their behaviour, thin resources do I/O, and a single fetch chokepoint makes request tracing a one-line wrap.
Install
Requires Node ≥ 18. semblekit is published to the GitHub Packages npm registry, which needs a
one-time scope + token setup (a GitHub token with the read:packages scope):
printf '@burrows99:registry=https://npm.pkg.github.com\n//npm.pkg.github.com/:_authToken=YOUR_GITHUB_TOKEN\n' >> ~/.npmrc
npm install -g @burrows99/semblekit # global: the `semble` CLI + `semble-mcp` MCP server
# or, as a library in a project:
npm install @burrows99/semblekitDependencies
Node ≥ 18 only (uses the built-in fetch). No Docker, no database.
Usage
Credentials resolve flags > environment > config file > built-in presets, and are auto-discovered from
the nearest .env / .claude/.env walking up from the working directory. See .env.example.
For the public API the relevant variables are SEMBLE_OPEN_URL and SEMBLE_TOKEN.
CLI
semble patient search "smith" --limit 5 # find a patient id
semble patient get <patientId> --json
semble contact search "clinic" --json # find a contact/clinician id
semble user list
semble patient relationship add <patientId> <contactId> --label "Responsible Clinician"
semble help--json for machine output, --trace for a DevTools-style request log, --limit to cap paginated results.
stdout is data, stderr is messages; exit 0 success · 1 runtime error · 2 usage error.
Library
import { SembleClient, SembleTracer, loadConfig } from "@burrows99/semblekit";
const client = new SembleClient(loadConfig({ profile: "sandbox" }));
const [patient] = await client.patients.search("smith");
const rels = await client.patients.listRelationships(patient.id);
new SembleTracer(client, (record) => console.error(record)); // optional: trace every HTTP exchangeMethods return data or throw SembleError; they never call process.exit or print. search / list
paginate automatically and accept { limit }.
MCP server
semblekit ships a stdio MCP server so an AI host can drive Semble as
tools — run it with npx, no install needed (uses the .npmrc set up in Install):
npx -p @burrows99/semblekit semble-mcpPoint an MCP host at it:
{
"mcpServers": {
"semblekit": { "command": "npx", "args": ["-y", "-p", "@burrows99/semblekit", "semble-mcp"] }
}
}Inspect it with the MCP Inspector:
npx @modelcontextprotocol/inspector npx -p @burrows99/semblekit semble-mcpRead-only tools: semble_patient_search, semble_patient_get, semble_patient_relationships,
semble_contact_search, semble_contact_get, semble_user_list, semble_user_get.
Claude Code plugin
claude plugin marketplace add /path/to/semblekit
claude plugin install semble@semblekitAPI
new SembleClient(config?)— composes the transport and resources; buildconfigwithloadConfig(options).client.patients—search(query?, { limit? }),get(id),listRelationships(patientId).client.contacts—search(query?, { limit? }),get(id).client.users—list({ limit? }),get(id).SembleTracer(client, sink, options?)— decorates the client's fetch chokepoint;sink(record)fires per request, with secrets redacted.SembleConfig/loadConfig/PRESETS— profile resolution; presets namesandboxandprod.Entities —
Patient,Contact,User,RelatedAccount; eachJSON.stringifys to its API shape.Errors —
SembleErrorand its subclassesSembleConfigError,SembleAuthError,SembleApiError,SembleNotFoundError,SembleValidationError.
Maintainers
@burrows99 (Raunak Burrows).
Contributing
Questions and bugs: open an issue at github.com/burrows99/semblekit/issues.
PRs are welcome and target main. Keep org-specific meaning out of the library — expose the generic Semble
operation.
npm install # installs deps, builds via `prepare`
npm run build # tsc → dist/ + .d.ts
npm run typecheck # tsc --noEmit
npm test # placeholder suiteSource is TypeScript (ESM, NodeNext) in src/**/*.ts, compiled to dist/. Add a resource by creating its
entity in src/entities/, a src/resources/<resource>.ts, wiring it onto the client in src/client.ts,
and a matching src/commands/<resource>.ts.
License
MIT © Raunak Burrows.
This server cannot be deployed
Maintenance
Related MCP Connectors
Hosted MCP server for Cliniko — patients, appointments, availability, and invoices for AI agents.
Hosted MCP server for the Healthie EHR & telehealth API: patients, appointments, charting, tasks.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
Hosted MCP server exposing US hospital procedure cost data to AI assistants
Related MCP Servers
- FlicenseAqualityFmaintenanceMCP server that exposes 300+ AI agents as tools via a single API key. Supports listing agents, invoking any agent with chat-completion style messages, checking agent health, and retrieving platform statistics.53-

FHIRfly MCP Serverofficial
AlicenseNot gradedqualityBmaintenanceMCP server for connecting Claude Desktop to FHIRfly healthcare reference data APIs, enabling lookup of drugs, providers, clinical codes, and more.126 npmMIT- AlicenseNot gradedqualityDmaintenanceAn MCP server that brings AI-powered search and conversation to your FHIR clinical documents.1MIT
- AlicenseNot gradedqualityDmaintenanceClinical decision-support MCP server that lets AI agents reason over live FHIR patient data for medication review, appointment scheduling, and care gap identification.5,766 npmMIT