ElGraph.MCP.Stdio (ElGraph v0.3.0)

Copy Markdown View Source

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

process_line(line, deps)

@spec process_line(binary(), ElGraph.MCP.Server.deps()) ::
  {:reply, binary()} | :notification

한 줄(JSON-RPC 메시지)을 처리한다 — 응답 JSON 문자열({:reply, json}) 또는 응답 없음(:notification, 알림/빈 줄). 파싱 실패는 JSON-RPC -32700 응답.

serve(deps, opts \\ [])

@spec serve(
  ElGraph.MCP.Server.deps(),
  keyword()
) :: :ok | {:error, term()}

stdin(또는 :input)에서 메시지를 읽어 처리하는 루프. EOF까지 블록한다.