Skip to main content
Glama
orlando-derm

advancedmd-connector

by orlando-derm

advancedmd-connector

advancedmd-connector は、組織内で AdvancedMD と通信する唯一のプロセスです。AdvancedMD データのすべてのコンシューマー(バックエンドワークフローの appointment-validator、srt-auths、note-audit、patient-intake、admin-console の資格情報チェック、および AI エージェント(Adam と任意の Claude Code、Cursor、Desktop エージェント))は、HTTP または MCP 経由でツール呼び出しを送信し、JSON 結果を受け取ります。このコネクタだけが AdvancedMD の資格情報、ログインセッション、レートクロックを保持します。

現在、15 のプロセスがそれぞれ AdvancedMD の資格情報を保持し、独立してログインし、AdvancedMD のオフィスキーごとの上限(超過呼び出しごとに $0.01 を請求し、約 1 分に 1 回以上のログインを拒否する)に対して独立してレート制限を行っています。コネクタは、セッションとクロックを中央で一元管理することでこれを修正します。1 つのプロセス、1 つのレートクロック、1 つのツールサーフェス、既存のすべてのコンシューマに対してツール名と結果の形状は変更されません。完全な契約については SPEC.md を、各選択の理由については docs/CONNECTOR_DECISIONS.md を参照してください。

アーキテクチャ

 backend workflows ------ JSON tool call ------> +-----------------------------+
 (validator, srt-auths,                          |    advancedmd-connector     |
  note-audit, intake,                            |                             |
  admin-console, chatbot)                        |  HTTP API   MCP surface     |
                                                  |      \        /             |
 agents ----------------- MCP tool call -------> |     receivers (one per      |
 (Adam via remote MCP;                           |       open request)         |
  Cursor, Claude Code,                           |          |                  |
  Desktop via stdio shim                         |     entry queue             |
  or remote MCP)                                 |          |                  |
                                                  |     worker loop  (1 at a    |
                                                  |          |        time)     |
                                                  |      handler                |
                                                  |          |                  |
                                                  |    request queue            |
                                                  |          |                  |
                                                  |     sender loop  (clock,    |
                                                  |          |        session)  |
                                                  +----------|------------------+
                                                             |  XML over HTTPS
                                                             v
                                                        AdvancedMD

1 つのプロセス。1 つのポート(デフォルト 8820)。破線のボックスより上はすべてコンシューマです。ボックスの外側で AMD 資格情報を保持したり XML を送信したりするものはありません。

Related MCP server: Enterprise MCP Gateway and Tool Registry

5 つのコマンドでローカル実行

cp .env.example .env                      # fill AMD_USERNAME, AMD_PASSWORD, AMD_OFFICE_KEY
pip install -e ".[dev]"
export $(cat .env | grep -v '^#' | xargs) CONNECTOR_TOKENS_PATH=/tmp/tokens.json
connector tokens add myapp --priority interactive --tools '*'   # prints a token once
uvicorn --factory connector.app:build_app --host 0.0.0.0 --port 8820

GET http://localhost:8820/health は、最初のログイン試行が完了すると {"status": "starting"} または "ok" を返すはずです。docker compose up --build は同じものをコンテナ化して実行し、同じ .env を読み取ります。

エージェントを接続する

ツール名、引数スキーマ、および編集済みの結果形状は、3 つの接続方法すべてで同一です(SPEC 12.1)。そのため、エージェント設定はプロンプトを変更せずに別の方法へ移行できます。

リモート MCP(ホスト型エージェント、例: Adam)— コネクタのストリーミング HTTP サーフェスを直接指定します:

{"mcpServers": {"amd-patients": {"type": "http",
  "url": "http://advancedmd-connector:8820/mcp/patients",
  "headers": {"Authorization": "Bearer <agent token>"}}}}

10 のルートが提供されます: /mcp/patients、/mcp/visits、/mcp/providers、/mcp/codes、/mcp/billing、/mcp/payments、/mcp/masterfiles、/mcp/system、/mcp/ehr、/mcp/all(和集合)。

ローカル stdio シム(ワークステーション上のエージェント)— 公開済みの advancedmd-mcp パッケージをインストールし、ネットワーク経由でコネクタを指定します。資格情報もツールロジックも保持しません:

{"mcpServers": {"amd-patients": {"command": "uvx",
  "args": ["advancedmd-mcp", "--domain", "patients"],
  "env": {"ADVANCEDMD_CONNECTOR_URL": "http://100.94.62.115:8820",
          "ADVANCEDMD_CONNECTOR_TOKEN": "<agent token>"}}}}

Claude Code プラグイン — plugin/ は、${ADVANCEDMD_CONNECTOR_URL} と ${ADVANCEDMD_CONNECTOR_TOKEN} の環境変数参照を使用して、9 つの stdio サーバーすべてを宣言します:

claude plugin add <path or repo>/plugin

同じ plugin/.mcp.json は、コピーにより Cursor および Claude Desktop でも有効です。

ワークフローから使用する

バックエンドの Python サービスは、orlando-derm-backend/lib/advancedmd_connector/ の SDK を使用します。この SDK は、既存のすべてのメソッド名と型付き結果を維持します:

from lib.advancedmd_connector import AmdConnector

connector = AmdConnector.from_env()          # ADVANCEDMD_CONNECTOR_URL, ADVANCEDMD_CONNECTOR_TOKEN
bundle = await connector.get_patient_bundle(patient_id)
result = await connector.tool("getdemographic", patient_id=patient_id)   # generic call

SDK は AMD 資格情報、XML、AMD URL を保持しません。HTTP のみです。完全なメソッドテーブルと例外マッピングについては SPEC 13 を参照してください。

トークンを発行する

トークンは、バンドルされた connector CLI を使用してトークンテーブルファイル(CONNECTOR_TOKENS_PATH)に対して発行および失効されます:

connector tokens add appointment-validator --priority batch --tools '*'
connector tokens add my-agent --priority interactive --tools getdemographic,lookuppatient
connector tokens list
connector tokens revoke my-agent

平文トークンは発行時に一度だけ印刷され、保存も復元もできません。完全なフラグリファレンスは docs/OPERATIONS.md、トークンモデルは docs/TOKENS.md を参照してください。

遅いときに確認すべき場所

  • GET /health(トークン不要、内部ネットワークのみ)— セッション状態、エントリーキューの深さと最長待機時間、リクエストキューの深さ、およびレートクロックのティア別使用量/制限を 1 回の呼び出しで確認できます。

  • GET /metrics(トークン不要)— Prometheus テキスト: 呼び出し元/ツール/結果別のツール呼び出し数と待機ヒストグラム、ティア別の AMD リクエスト数とポスト時間ヒストグラム、ティア別のクロック使用/制限/スリープ時間、再ログインおよびログイン拒否カウンター、キューの深さ。完全なメトリクスリストは SPEC 18、アラート条件は SPEC 18.2 を参照してください。

  • AMD の応答が遅くても /health を遅延させてはなりません — 送信ループと /health は同じイベントループ上で実行されますが、ブロッキング I/O は禁止されているため(SPEC 4.4)、ハングした AMD 呼び出しは /health の応答不能としてではなく、クロック/キューの圧力として /health に現れます。

バッチスケジュール

コネクタ自体はバッチジョブを実行しません。バッチ優先度の呼び出し元が送信するものを直列化するだけです。現在スケジュールされているコンシューマ(SPEC 22 移行テーブル)は、appointment-validator(夜間 1 回)、srt-auths(スキャンとイベント実行)、note-audit(毎日 1 回)です。バッチ優先度のリクエストは、BATCH_AGING_MS(デフォルト 60 秒)後に昇格してエージングされるため、長いバッチバックログが対話型呼び出しを無期限に飢餓させません(SPEC 5.3)。ただし、再起動するとインメモリセッションが失われるため(SPEC 16.3)、デプロイはこれらのウィンドウを避ける必要があります。

関連資料

Related MCP Connectors

Related MCP Servers

  • F
    license
    A
    quality
    F
    maintenance
    MCP 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.
    5
    4
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    A universal MCP server for registering internal, external, and OpenAPI-based APIs as MCP tools. It exposes them to MCP clients via Streamable HTTP and provides admin portal, RBAC/session auth, credential injection, and audit logging.
    Academic Free v1.1