soapnoteapi-mcp
OfficialClick 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., "@soapnoteapi-mcpCreate a SOAP note from this transcript."
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.
soapnoteapi-mcp
A Model Context Protocol (MCP) server for SOAPNoteAPI. It lets AI agents (Claude Desktop/Code, Cursor, Windsurf, VS Code + Copilot, etc.) turn clinical transcripts or audio recordings into structured SOAP notes, ICD-10/CPT billing-code suggestions, patient summaries, and visit summaries.
⚕️ All clinical content and billing codes are AI-generated decision support and must be reviewed by a qualified clinician/coder before use. HIPAA: this server only transits PHI to the API over TLS and never logs note content.
Tools
Tool | What it does | API |
| List supported specialties (no key needed) |
|
| Transcript → SOAP note (+ optional billing codes, patient summary) |
|
| Fetch a note by |
|
| Consolidate visits into a longitudinal summary |
|
| Local audio file → SOAP note (waits for async jobs) |
|
| Poll an async audio job |
|
Related MCP server: Medikode Medical Coding MCP Server
Setup
Get an API key at https://app.soapnoteapi.com (free tier: $10 credit, first 20 notes free).
Claude Desktop / Cursor (mcp.json)
{
"mcpServers": {
"soapnoteapi": {
"command": "npx",
"args": ["-y", "soapnoteapi-mcp"],
"env": { "SOAPNOTEAPI_KEY": "snapi_sk_live_xxxxxxxx" }
}
}
}Claude Code
claude mcp add soapnoteapi --env SOAPNOTEAPI_KEY=snapi_sk_live_xxxxxxxx -- npx -y soapnoteapi-mcpEnvironment variables
Variable | Required | Notes |
| yes (for all tools except | Bearer key, |
| no | Override API base (default |
Develop
pnpm install
pnpm --filter soapnoteapi-mcp dev # run from source (tsx)
pnpm --filter soapnoteapi-mcp build # compile to dist/
npx @modelcontextprotocol/inspector node dist/index.js # interactive testPublish
pnpm --filter soapnoteapi-mcp build
cd packages/mcp && npm publish # publishes soapnoteapi-mcp to npmLicense
MIT
Available Tools
6 toolsgenerate_soap_noteGenerate SOAP note from transcriptA
Generate a structured SOAP note (Subjective, Objective, Assessment, Plan) from a clinical transcript or shorthand. Optionally returns ICD-10/CPT/HCPCS billing-code suggestions and a plain-language patient summary. Billing codes are AI decision support and require clinician review.
| Name | Required | Description | Default |
|---|---|---|---|
| patient | No | Optional patient demographics & history to enrich the note. | |
| template | No | Optional template within the specialty (default "standard"). | |
| specialty | Yes | Medical specialty. Call list_specialties for the full list. | |
| transcript | Yes | Clinical transcript or shorthand to expand into a SOAP note (min ~50 characters). | |
| include_icd11 | No | Also return advisory ICD-11 codes (not for US billing). | |
| patient_history | No | Free-text prior history to enrich the note. | |
| custom_instructions | No | Free-text instructions to steer formatting/content. | |
| include_billing_codes | No | Return ICD-10/CPT/HCPCS billing-code suggestions. | |
| include_patient_summary | No | Return a plain-language patient-facing summary. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses that billing codes are AI decision support, but does not discuss other behavioral aspects like potential errors, need for review, or limitations of the AI-generated content. Provides some transparency but incomplete.
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 two sentences long, front-loads the primary purpose, and every sentence adds value. It is appropriately sized for the tool's complexity.
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?
With 9 parameters (2 required) and no output schema, the description covers the main output (SOAP note structure) and optional features. It explains the specialty selection via reference to a sibling tool. Missing details on how patient or custom_instructions parameters affect the output, but overall sufficient for an agent to understand the tool's function and main inputs.
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 100%, so baseline is 3. The description adds context about optional outputs (billing codes, patient summary) but does not significantly expand on parameter meanings beyond what the schema provides. For example, 'patient' object description already says 'enrich the note.' Minimal added value.
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 generates a structured SOAP note from clinical transcript or shorthand, and lists optional additions like billing codes and patient summary. It effectively distinguishes from sibling 'transcribe_audio_to_soap' which handles audio input.
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 a caution about billing codes requiring clinician review but lacks explicit guidance on when to use this tool vs alternatives like transcribe_audio_to_soap for audio input or list_specialties for available specialties. Usage context is implied but not directly addressed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_audio_statusCheck audio job statusA
Check the processing status of an asynchronous audio-to-SOAP job by noteId.
| Name | Required | Description | Default |
|---|---|---|---|
| noteId | Yes | The noteId returned by transcribe_audio_to_soap for a long recording. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavior. It only states it checks status, but does not mention that it's a read-only operation, possible status values, error cases, or side effects. Minimal transparency for a polling 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?
One concise sentence (14 words) that front-loads the purpose. No redundancy or 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?
For a simple status check tool with no output schema and no annotations, the description is incomplete: it does not hint at possible return values (e.g., 'completed', 'failed') or what happens if the noteId is invalid. Given the async nature, this information is important for an agent to handle responses correctly.
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 single parameter noteId is fully described in the input schema (100% coverage). The description adds 'by noteId' but does not provide additional meaning or format beyond what the schema already says.
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 the verb 'Check' and the resource 'processing status of an asynchronous audio-to-SOAP job', distinguishing it from sibling tools like transcribe_audio_to_soap which initiates the job. The tool name and description align well.
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?
Indicates the tool is for checking status after an asynchronous job, but does not explicitly state when not to use it or mention alternatives. Could be more direct about using it after transcribe_audio_to_soap returns a noteId.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_noteRetrieve a generated noteA
Retrieve a previously generated note by its noteId. Useful for fetching the result of an asynchronous audio job once status is 'completed'. Notes auto-expire (see expires_at).
| Name | Required | Description | Default |
|---|---|---|---|
| noteId | Yes | The noteId returned by a generate/audio call (e.g. note_01jfg…). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must cover behavior. It discloses auto-expiration (expires_at) and implies read-only retrieval, but does not mention error handling (e.g., what if noteId invalid or expired) or authentication requirements.
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?
Three sentences, front-loaded with action, no unnecessary words. 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?
Lacks output schema, so description should hint at return structure. It mentions expires_at but not other fields like note content or metadata. Adequate but incomplete for a retrieval tool.
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 description coverage is 100% and already describes noteId format and origin. Description adds minimal value beyond restating the parameter's role.
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 verb 'Retrieve' and the resource 'generated note', and distinguishes it from sibling tools by specifying it fetches results of async audio jobs.
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 gives explicit context: use when status is 'completed' after an audio job. It implies when not to use (before completion) but does not explicitly state alternatives like get_audio_status.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_specialtiesList medical specialtiesA
List the medical specialties (and template variants) supported by SOAPNoteAPI. Use the returned specialty IDs as the specialty argument for note generation. No API key required.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears the full burden. It discloses that no API key is needed, which is a helpful behavioral note. However, it omits details like whether it is read-only, pagination limits, or rate limits. For a simple list tool with no parameters, this is adequate but not exhaustive.
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 two sentences with no fluff. It front-loads the action and immediately adds practical context. Every word serves a purpose.
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?
For a zero-parameter tool with no output schema, the description provides everything needed: what it lists, how to use the output, and access requirements. It is fully complete given the tool's simplicity.
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 is empty (0 parameters), and the schema description coverage is 100%. The description adds value by explaining that the output (specialty IDs) should be used as an argument for note generation, which is not in the schema. Given zero parameters, a baseline of 4 is appropriate.
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 specifically states 'List the medical specialties (and template variants) supported by SOAPNoteAPI', clearly identifying the action and resource. It distinguishes from sibling tools (e.g., generating notes, transcription) by focusing on listing reference data.
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 instructs 'Use the returned specialty IDs as the `specialty` argument for note generation', providing direct guidance on when and how to use the tool. It also mentions 'No API key required', clarifying access requirements.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
summarize_visitsSummarize visit historyA
Consolidate multiple past visits (SOAP notes and/or free-text summaries) into a longitudinal summary with key findings and active diagnoses. Useful for care coordination and chart prep.
| Name | Required | Description | Default |
|---|---|---|---|
| focus | No | Optional focus area to bias the summary (e.g. 'diabetes management'). | |
| visits | Yes | Chronological list of prior visits. Each needs a soap_note or a summary. | |
| patient | No | Optional patient demographics & history to enrich the note. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It does not disclose whether the operation is read-only, destructive, requires authentication, or stores the summary. The word 'consolidate' leaves behavioral ambiguity.
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 a single, front-loaded sentence with a parenthetical for detail, followed by a brief use-case sentence. 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 the moderate complexity (3 parameters, nested objects, no output schema, no annotations), the description lacks details on return value, error behavior, and the effect of optional patient data.
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 description coverage is 100%; all parameters have descriptions. The tool description adds the overall purpose but does not provide additional semantic context beyond what the schema already offers.
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 consolidates multiple past visits into a longitudinal summary with key findings and active diagnoses, naming specific sources (SOAP notes, free-text summaries) and use cases (care coordination, chart prep). It effectively distinguishes from sibling tools like list_specialties and get_note.
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 mentions usefulness for care coordination and chart prep, implying context, but does not explicitly state when not to use the tool or mention alternatives among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
transcribe_audio_to_soapAudio recording → SOAP noteA
Upload a local audio recording of a clinical encounter and get back a SOAP note. Short recordings return immediately; long ones process asynchronously — by default this tool waits and returns the finished note. Supported: mp3, m4a, wav, ogg, webm, flac.
| Name | Required | Description | Default |
|---|---|---|---|
| patient | No | Optional patient demographics & history to enrich the note. | |
| template | No | ||
| specialty | Yes | Medical specialty. Call list_specialties for the full list. | |
| audio_path | Yes | Absolute path to a local audio file (mp3/m4a/wav/ogg/webm/flac). | |
| include_icd11 | No | ||
| patient_history | No | ||
| timeout_seconds | No | Max seconds to wait when polling an async job (default 300). | |
| include_transcript | No | Return the diarized, timestamped transcript. | |
| custom_instructions | No | ||
| wait_for_completion | No | If true (default), poll until the note is ready for long async recordings. | |
| include_billing_codes | No | ||
| include_patient_summary | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, description bears full burden for behavioral traits. It discloses async processing, waiting behavior, and supported file formats. Missing details on error handling, file storage, or size limits. Adequate but not thorough.
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, front-loaded with core action and key behaviors. No redundant information; every word 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 12 parameters, nested objects, and multiple optional features (include_* options, specialty, patient info), the description only covers audio input and output format. Does not mention customization options or output structure, leaving significant gaps for agent understanding.
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 covers 50% of parameters with descriptions. Description reinforces audio_path and async behavior (wait_for_completion, timeout_seconds) but does not explain other parameters like patient, template, or custom_instructions. Adds marginal value beyond 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?
Description clearly states the specific verb 'transcribe' and resource 'audio recording to SOAP note', and distinguishes it from siblings like 'list_specialties' and 'generate_soap_note' by focusing on audio input. The supported formats and behavior (sync/async) further clarify purpose.
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?
Description implies use when you have a local audio recording of a clinical encounter, and mentions short vs long recordings with async behavior. However, it does not explicitly state when not to use this tool (e.g., for transcript-only tasks) or list alternatives among siblings. Usage is implied but not exhaustive.
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. Dates show when Glama detected each change.
6 tool updates
v0.1.1- First observed
generate_soap_note - First observed
get_audio_status - First observed
get_note - First observed
list_specialties - First observed
summarize_visits - First observed
transcribe_audio_to_soap
TDQS
Each tool has a clearly distinct purpose: listing specialties, generating notes from text, transcribing audio, retrieving notes, checking status, and summarizing visits. No overlap or ambiguity.
All tool names follow a consistent verb_noun pattern in snake_case (e.g., list_specialties, generate_soap_note), making them predictable and easy to understand.
6 tools is well-scoped for a clinical note generation server. Each tool provides essential functionality without redundancy, covering the core workflow.
Covers the full lifecycle: specialty listing, note generation (text/audio), retrieval, status checking, and visit summarization. Minor gaps like lack of update/delete are acceptable given auto-expiration.
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
Transcribe audio & video to text for AI agents: 100+ languages, speaker labels, webhooks.
Podcast intelligence for agents: transcripts, clips, speaker diarization, mention tracking.
Verified, pay-per-use API tools for AI agents through one authenticated connection.
Connect AI agents to 1000+ apps with managed authentication and tool-calling.
Related MCP Servers
- FlicenseBqualityDmaintenanceEnables AI-powered clinical decision support by integrating with athenahealth's API to access patient data, manage prescriptions, check drug interactions, and generate clinical assessments. Provides HIPAA-compliant healthcare workflows with comprehensive audit logging and data sanitization.142-
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to access Medikode's medical coding platform for validating CPT/ICD-10 codes, performing chart quality assurance, parsing EOBs, calculating RAF scores, and extracting HCC codes from clinical documentation.232ISC
- AlicenseAqualityBmaintenanceHealthcare billing AI for agents — 12 tools for ICD-10/CPT/HCPCS code lookup (80K+ codes), prior auth prediction, medical NER, claims validation, HIPAA compliance auditing, and provider/drug enrichment. Pay-per-call via credits or USDC.20442MIT

Appendixofficial
FlicenseNot gradedqualityDmaintenanceAppendix turns any AI health conversation into a board-certified physician's opinion — with a real prescription when clinically appropriate. Search medical literature and submit a clinical encounter for review, all from your agent.2-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/soapnoteaicom/soapnoteapi-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server