ElGraph.MCP.Server (ElGraph v0.3.0)

Copy Markdown View Source

ElGraph Action을 MCP 서버로 노출하는 순수 JSON-RPC 2.0 디스패치 (SPEC §4).

ElGraph.MCP가 외부 MCP 서버의 툴을 소비하는 클라이언트라면, 이건 그 반대 — 외부 에이전트(Claude 등 MCP 클라이언트)가 ElGraph Action을 호출하게 한다. 전송(transport) 무관한 순수 함수이므로 stdio/HTTP 어느 바인딩에도 얹는다 (HTTP 바인딩: ElGraphWeb.MCP.Router).

deps:

  • :tools — 노출할 ElGraph.Action 모듈 목록
  • :server_info%{"name" => ..., "version" => ...} (initialize 응답)
  • :context — Action run/2에 넘길 컨텍스트(선택, 기본 %{})

반환:

  • {:result, map} — JSON-RPC result로 감쌀 값
  • {:error, code, msg} — JSON-RPC error (예: -32601 method not found, -32602 invalid params)
  • :notification — 알림 메서드(notifications/*)는 응답 없음

MCP 규약: 툴 실행 실패는 프로토콜 에러가 아니라 isError: true 결과로 돌려준다 (모델이 오류를 보고 재시도할 수 있도록). 알 수 없는 툴/잘못된 메서드만 JSON-RPC error.

Summary

Types

deps()

@type deps() :: %{
  :tools => [module()],
  :server_info => map(),
  optional(:context) => term(),
  optional(:resources) => [map()],
  optional(:prompts) => [map()]
}

result()

@type result() :: {:result, map()} | {:error, integer(), String.t()} | :notification

Functions

handle(method, params, deps)

@spec handle(String.t() | nil, map(), deps()) :: result()