Skip to main content
Glama

Smart EHR MCP Server

by jmandel
ehretriever.html9.82 kB
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>EHR Data Retriever</title> <style> /* Basic Reset & Defaults */ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; line-height: 1.6; background-color: #f4f7f6; color: #333; padding: 1rem; } /* App Layout */ .app-container { max-width: 1200px; margin: 2rem auto; padding: 1rem; background-color: #fff; border-radius: 8px; box-shadow: 0 2px 10px rgba(0,0,0,0.05); } h1 { text-align: center; margin-bottom: 1.5rem; color: #2c3e50; } /* Brand Selector Search Area */ .brand-controls-container { /* Keep wrapper for potential future controls */ margin-bottom: 2rem; } .brand-search-container { position: relative; /* For spinner */ } .brand-search-container label { /* Optional: Add label */ display: block; margin-bottom: 0.4rem; font-weight: bold; font-size: 0.9rem; color: #555; } #brand-search-input { width: 100%; padding: 0.75rem 1rem; font-size: 1rem; border: 1px solid #ccc; border-radius: 6px; box-shadow: inset 0 1px 3px rgba(0,0,0,0.06); } #brand-search-input:focus { outline: none; border-color: #3498db; box-shadow: 0 0 0 2px rgba(52, 152, 219, 0.2); } #brand-search-spinner { position: absolute; right: 10px; top: 50%; transform: translateY(-50%); width: 20px; height: 20px; border: 3px solid rgba(0, 0, 0, 0.1); border-left-color: #3498db; border-radius: 50%; animation: spin 1s linear infinite; display: none; } /* Adjust spinner position if label is added */ .brand-search-container label + #brand-search-input + #brand-search-spinner { top: calc(50% + 10px); /* Approx vertical center relative to input */ } @keyframes spin { to { transform: translateY(-50%) rotate(360deg); } } /* Brand Selector Results Grid */ #brand-results-container { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 1.5rem; min-height: 100px; } .brand-tile { background-color: #ffffff; border: 1px solid #e0e0e0; border-radius: 8px; padding: 1.25rem; cursor: pointer; transition: transform 0.2s ease-in-out, box-shadow 0.2s ease-in-out; box-shadow: 0 1px 3px rgba(0,0,0,0.05); display: flex; flex-direction: column; justify-content: space-between; } .brand-tile:hover { transform: translateY(-3px); box-shadow: 0 4px 12px rgba(0,0,0,0.08); } .brand-tile h3 { font-size: 1.1rem; margin-bottom: 0.5rem; color: #3498db; word-break: break-word; } .brand-tile p { font-size: 0.9rem; color: #555; margin-bottom: 0.3rem; word-break: break-word; } .brand-tile .provider-info { font-style: italic; color: #777; font-size: 0.85rem; } .brand-tile .location-info { font-weight: bold; color: #444; font-size: 0.85rem; } /* Brand Selector Modal Styles */ .brand-modal-backdrop { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.6); display: flex; justify-content: center; align-items: center; z-index: 1000; opacity: 0; visibility: hidden; transition: opacity 0.3s ease, visibility 0s 0.3s linear; } .brand-modal-backdrop.visible { opacity: 1; visibility: visible; transition: opacity 0.3s ease; } .brand-modal { background-color: #fff; padding: 2rem; border-radius: 8px; box-shadow: 0 5px 15px rgba(0,0,0,0.2); max-width: 500px; width: 90%; transform: scale(0.9); transition: transform 0.3s ease; } .brand-modal-backdrop.visible .brand-modal { transform: scale(1.0); } .brand-modal h2 { margin-top: 0; margin-bottom: 1rem; color: #2c3e50; } #brand-modal-details p { margin-bottom: 0.5rem; color: #333; } #brand-modal-details strong { color: #555; } #brand-modal-details ul { list-style: none; padding-left: 0; margin-top: 0.5rem;} #brand-modal-details li { margin-bottom: 0.25rem; font-size: 0.9em; color: #444;} .brand-modal-actions { margin-top: 1.5rem; display: flex; justify-content: flex-end; gap: 0.75rem; } .brand-modal-button { padding: 0.6rem 1.2rem; font-size: 0.95rem; border: none; border-radius: 5px; cursor: pointer; transition: background-color 0.2s ease; } .brand-modal-button.connect { background-color: #2ecc71; color: white; } .brand-modal-button.connect:hover { background-color: #27ae60; } .brand-modal-button.cancel { background-color: #e74c3c; color: white; } .brand-modal-button.cancel:hover { background-color: #c0392b; } /* Brand Utility */ .brand-status-message { grid-column: 1 / -1; text-align: center; color: #777; font-style: italic; padding: 2rem; } #brand-initial-loading-message { text-align: center; padding: 2rem; color: #555; font-size: 1.1em; } /* Original EHR Retriever Styles (kept separate) */ /* body { font-family: sans-serif; padding: 1em; } */ /* Overlaps with brand styles, adjusted above */ label { display: block; margin-bottom: 0.5em; } input[type="text"], input[type="url"] { width: 90%; max-width: 400px; padding: 0.5em; margin-bottom: 1em; box-sizing: border-box; } button { padding: 0.8em 1.5em; cursor: pointer; } #form-container, #status-container { margin-top: 1em; } #status-container { border: 1px solid #ccc; padding: 1em; background-color: #f9f9f9; } </style> </head> <body> <div class="app-container"> <h1>Connect to your record</h1> <!-- ===== BRAND SELECTOR UI ===== --> <div id="brand-selector-container"> <div id="brand-initial-loading-message">Loading organizations data...</div> <div class="brand-controls-container" id="brand-controls-container"> <div class="brand-search-container"> <!-- <label for="brand-search-input">Search Organizations</label> --> <input autofocus type="search" id="brand-search-input" placeholder="Search by name, provider, city, state, zip..." disabled> <div id="brand-search-spinner"></div> </div> </div> <div id="brand-results-container" style="display: none;"> <!-- Initially hidden --> <!-- Results populated by JS --> </div> <!-- ===== Pagination Controls ===== --> <div id="brand-pagination-controls" style="display: none; margin-top: 1.5rem; text-align: center;"> <button id="brand-prev-btn" disabled>&laquo; Previous</button> <span id="brand-page-info" style="margin: 0 1rem; display: inline-block; min-width: 80px;">Page 1 of 1</span> <button id="brand-next-btn" disabled>Next &raquo;</button> </div> <!-- =============================== --> </div> <!-- ===== END BRAND SELECTOR UI ===== --> <!-- Bundled script will be included here --> <script src="./dist/ehretriever.bundle.js"></script> <!-- Status/Progress containers remain unchanged --> <div id="status-container" style="display: none;"> <h2>Status</h2> <p id="status-message">Loading...</p> <!-- NEW Download Button --> <button id="download-data-btn" style="display: none; margin-left: 1em; padding: 0.6em 1.1em;">Download Data (JSON)</button> </div> <div id="progress-container" style="display: none; margin-top: 1em;"> <h3>Fetch Progress</h3> <progress id="fetch-progress" max="100" value="0" style="width: 90%; max-width: 400px;"></progress> <span id="progress-text" style="margin-left: 10px;">(0/0)</span> </div> <!-- Inline Confirmation Container (Hidden by default) --> <div id="confirmation-container" style="display: none; margin: 1.5rem auto; padding: 1.5rem; border: 1px solid #e0e0e0; background-color: #f9f9f9; border-radius: 6px; max-width: 600px; box-shadow: 0 1px 4px rgba(0,0,0,0.04); text-align: center;"> <h2>Confirm Data Delivery</h2> <p id="confirmation-message" style="margin-bottom: 1.5rem;">You have successfully fetched your EHR data. Do you want to send this data back to the application at origin [Origin Placeholder]?</p> <div class="confirmation-actions"> <button id="confirm-send-btn" style="background-color: #2ecc71; color: white; padding: 0.7rem 1.5rem; border: none; border-radius: 5px; cursor: pointer; margin-right: 1rem;">Yes, Send Data</button> <button id="cancel-send-btn" style="background-color: #e74c3c; color: white; padding: 0.7rem 1.5rem; border: none; border-radius: 5px; cursor: pointer;">No, Cancel</button> </div> </div> </div> <!-- End app-container --> <!-- Brand Selector Modal Structure --> <div id="brand-modal-backdrop" class="brand-modal-backdrop"> <div id="brand-modal" class="brand-modal"> <h2 id="brand-modal-title">Confirm Selection</h2> <div id="brand-modal-details"></div> <div class="brand-modal-actions"> <button id="brand-modal-cancel" class="brand-modal-button cancel">Cancel</button> <button id="brand-modal-connect" class="brand-modal-button connect">Connect</button> </div> </div> </div> </body> </html>

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/jmandel/health-record-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server