elk-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@elk-mcp layout this graph with layered algorithm and top-down direction"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
@cocrates/elk-mcp
elkjs 기반 그래프 레이아웃을 MCP로 제공하는 TypeScript 패키지입니다.
에이전트는 노드/엣지 구조만 넘기고, 좌표·엣지 경로는 이 서버가 계산합니다. 렌더링은 포함하지 않습니다.
패키지 |
|
바이너리 |
|
런타임 | Node.js 18+ |
전송 | MCP stdio (JSON-RPC) |
MCP 도구
Tool | 설명 |
|
|
| 레이아웃 전 검증 (중복 id, parent, endpoint 등) |
| 등록된 ELK 알고리즘 목록 |
| 알려진 레이아웃 옵션 ( |
| 레이아웃 카테고리 |
layout_graph 입력
graph: 구조만 (nodes,edges)options:algorithm,direction,layoutOptions등 (그래프와 분리)
options.algorithm은 ELK layout algorithm id(예: layered, mrtree, force)이고, options.direction은 RIGHT/LEFT/UP/DOWN 형태 문자열입니다.
계층은 둘 중 하나:
flat:
node.parentnested:
node.children
(같은 노드에 둘 다 쓰지 말 것)leaf 노드(자식이 없는 노드)의
width/height는 가능하면 제공하세요. 미제공이면 서버에서 기본값80x40을 사용합니다.edges의 엔드포인트는 노드 id 또는 포트 id가 될 수 있습니다(노드의ports[]로 포트를 선언한 경우).edges[]는graph.edges에 모두 모아도 됩니다. 서버가 엣지 양끝의 LCA(최저 공통 조상) 노드 아래에 배치합니다.edges[]는id가 필요합니다. 또한source/target또는sources/targets형태로 엔드포인트를 줄 수 있습니다.
{
"graph": {
"nodes": [
{ "id": "svc", "label": "Service" },
{ "id": "A", "parent": "svc", "label": "API", "width": 120, "height": 40 },
{ "id": "B", "parent": "svc", "label": "DB", "width": 100, "height": 40 },
{ "id": "C", "label": "Client", "width": 90, "height": 40 }
],
"edges": [
{ "id": "e1", "source": "A", "target": "B" },
{ "id": "e2", "source": "C", "target": "A" }
]
},
"options": {
"algorithm": "layered",
"direction": "RIGHT"
}
}출력
출력은 options.absoluteCoordinates에 따라 좌표계가 달라집니다.
options.absoluteCoordinates가true(기본):nodes[].x/y와edges[].sections[].startPoint/endPoint/bendPoints가 모두 단일(전역) 좌표계 기준입니다.options.absoluteCoordinates가false: 값들은 렌더링 프레임에서 바로 쓰기 어렵습니다(노드/엣지의 로컬 좌표계 기준으로 내려옵니다). 일반적인 캔버스 렌더링에는 기본값인true를 권장합니다.
절대좌표(기본) 기준 flat JSON의 주요 필드:
nodes[]:id,label?,x,y,width,height,parent?,children?x,y: 노드 바운딩박스의 좌상단 기준 좌표(ELK 결과 기준)ports?: 각 포트의id,x,y,width,heightlabels?: 각 라벨의id?,text?,x,y,width,height
edges[]:id,sources,targets,sections[],junctionPoints?sections[]는 ELK extended edge 라우팅이 분해된 구간 목록입니다.각
sections[]항목은startPoint,endPoint,bendPoints[]로 구성되며,bendPoints는 폴리라인 중간 정점(순서대로 연결)입니다.junctionPoints는 하이퍼엣지 등에서 분기/합류점이 계산된 경우에만 내려옵니다.
Related MCP server: Graphiti MCP Server
클라이언트 설정
{
"mcpServers": {
"elk": {
"command": "npx",
"args": ["-y", "@cocrates/elk-mcp"]
}
}
}로컬 빌드:
{
"mcpServers": {
"elk": {
"command": "node",
"args": ["/path/to/elk-mcp/dist/mcp/index.js"]
}
}
}개발
npm install
npm run build
npm test
npm run start:mcp프로그램에서 코어 API를 직접 쓸 수도 있습니다:
import { layoutGraph } from "@cocrates/elk-mcp";
const result = await layoutGraph(
{
nodes: [
{ id: "A", width: 120, height: 40 },
{ id: "B", width: 100, height: 40 },
],
edges: [{ id: "e1", source: "A", target: "B" }],
},
{ algorithm: "layered", direction: "RIGHT" },
);GitHub Release · npm 배포
패키지 이름: @cocrates/elk-mcp (scoped). npm에 퍼블리시하려면 해당 scope 권한이 필요합니다.
1. 버전 올리기
npm version patch # 0.1.0 → 0.1.1
# 또는 minor / major
npm run build2. npm 배포
npm login
npm publish --access publicfiles 필드에 dist, README.md, LICENSE만 포함되므로 publish 전에 반드시 npm run build 하세요. (dist/는 gitignore일 수 있습니다.)
3. GitHub Release
git push origin main --follow-tags
gh release create v0.1.1 \
--title "v0.1.1" \
--notes "$(cat <<'EOF'
## Changes
- …
## Install
npm install -g @cocrates/elk-mcp@0.1.1
EOF
)"태그/릴리스는 npm version이 만든 git tag와 버전을 맞추면 됩니다.
권장 순서
PR 머지 →
mainnpm version+npm run build+npm publishgit push --follow-tags+gh release create
CI에서 publish하려면 Node 18+, NPM_TOKEN, (선택) GITHUB_TOKEN을 시크릿으로 두면 됩니다.
참고
elkjs 인터페이스:
docs/elkjs.md
Available Tools
5 toolslayout_graphA
Compute graph layout with elkjs and return node positions (x,y,width,height) and edge routing (sections with start/end/bend points). Pass graph structure in graph and layout settings in options separately. Hierarchy: use node.parent (flat) or node.children (nested), not both on one node. Put all edges in graph.edges; they are placed under the lowest common ancestor (LCA). Coordinates: defaults to absolute mode. When options.absoluteCoordinates=true, all returned node x/y and edge section points are in one global coordinate system. When options.absoluteCoordinates=false, values are returned in local coordinate systems (nodes/ports/labels relative to their containing node), so for typical rendering you should keep the default true. Node x/y are the top-left corner of the node bounding box (ELK semantics). edge.sections[] is an ordered list of routed polyline segments; each section has startPoint/endPoint and optional bendPoints (intermediate polyline vertices). edge.junctionPoints? may be present when ELK computes junction points (e.g. hyperedges).
Inputs: graph (required), options.
list_algorithmsA
List registered elkjs layout algorithms with metadata. Use before layout_graph to pick algorithm (layered, mrtree, force, ...).
Inputs: no named parameters.
list_layout_categoriesA
List elkjs layout categories.
Inputs: no named parameters.
list_layout_optionsA
List known ELK layout options (id, group, etc.). Optional query filters by substring match on id or name.
Inputs: query.
validate_graphA
Validate a graph before layout: duplicate ids, unknown parents/endpoints, parent cycles, missing leaf sizes (warnings). Does not run layout.
Inputs: graph (required).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 5 tools
Each tool has a distinct purpose: layout_graph computes layout, validate_graph checks validity, list_algorithms lists algorithms, list_layout_options lists options, and list_layout_categories lists categories. No overlap in functionality.
All tool names follow a consistent verb_noun pattern in snake_case (e.g., layout_graph, list_algorithms). No mixing of conventions.
5 tools is well-scoped for an ELK layout server. It covers layout computation, validation, and exploration of algorithms/options without being excessive or insufficient.
The set covers core layout operations (validation, layout computation) and discovery (algorithms, options, categories). Minor gap: no tool to retrieve default options for a specific algorithm, but not critical.
Maintenance
Related MCP Connectors
Shared graph-based task tracker for agents, agents’ agents and people. Source-available, free cloud.
Shared long-term memory for AI agents: save and recall context as a searchable knowledge graph.
Live, editable canvas for AI agents — author graphs via MCP, then watch and reroute runs live.
Shared product-knowledge graph for AI agent fleets — vault tools + agent self-signup over MCP.
Related MCP Servers
AlicenseAqualityDmaintenanceGPU-accelerated graph visualization and analytics server for Large Language Models that integrates with Model Control Protocol (MCP), enabling AI assistants to visualize and analyze complex network data.1717 npm12MIT
Graphiti MCP Serverofficial
AlicenseNot gradedqualityDmaintenanceA knowledge graph server for AI agents, built with Neo4j and integrated with Model Context Protocol, enabling dynamic graph management and semantic search.141MIT- AlicenseAqualityDmaintenanceAI-native architecture diagramming for MCP clients (Claude Code, Cursor, Windsurf). The calling agent authors the graph (nodes, groups, edges); Flowgraf validates it, lays it out deterministically with ELK, renders an SVG + Mermaid, and returns a link to a live, editable canvas you can refine by chat, drag, or one-click AI design review. Agent-authored ops — no API key and no LLM cost to the calle349 npmMIT
- AlicenseNot gradedqualityBmaintenanceEnables agents to compute shortest paths, topological dependency order, maximum flow and minimum-cut bottlenecks, minimum spanning trees, and PageRank centrality over weighted graphs for routing and execution planning. It exposes these graph-analysis capabilities as MCP tools through a zero-dependency Python server.7MIT