MCP 서버 stdio transport 바인딩 — ElGraph Action을 CLI MCP 서버로 노출한다.
ElGraph.MCP.Server 순수 디스패치 위의 얇은 stdio 계층. MCP stdio 규약대로
줄 단위(newline-delimited) JSON-RPC: stdin에서 한 줄에 메시지 하나를 읽어 처리하고
응답을 stdout에 한 줄로 쓴다(알림은 무응답). 응답 JSON에는 내장 개행이 없다.
# 호스트가 escript / `mix run`에서:
ElGraph.MCP.Stdio.serve(%{tools: [MyApp.SearchAction], server_info: %{"name" => "myapp", "version" => "1.0"}}):input/:output으로 IO 디바이스를 주입할 수 있다(기본 :standard_io) — 테스트는 StringIO.
Summary
Functions
한 줄(JSON-RPC 메시지)을 처리한다 — 응답 JSON 문자열({:reply, json}) 또는
응답 없음(:notification, 알림/빈 줄). 파싱 실패는 JSON-RPC -32700 응답.
stdin(또는 :input)에서 메시지를 읽어 처리하는 루프. EOF까지 블록한다.
Functions
@spec process_line(binary(), ElGraph.MCP.Server.deps()) :: {:reply, binary()} | :notification
한 줄(JSON-RPC 메시지)을 처리한다 — 응답 JSON 문자열({:reply, json}) 또는
응답 없음(:notification, 알림/빈 줄). 파싱 실패는 JSON-RPC -32700 응답.
@spec serve( ElGraph.MCP.Server.deps(), keyword() ) :: :ok | {:error, term()}
stdin(또는 :input)에서 메시지를 읽어 처리하는 루프. EOF까지 블록한다.