Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault

No arguments

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": true
}
logging
{}
prompts
{
  "listChanged": true
}
resources
{
  "subscribe": false,
  "listChanged": true
}
extensions
{
  "io.modelcontextprotocol/ui": {}
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
push_nodeA

발견한 노드를 그래프에 그린다 (분석 중 발견 즉시 호출).

같은 id 로 다시 부르면 갱신된다 (properties 는 merge).

push_edgeA

두 노드의 관계를 그린다. 같은 (source,target,relation,key) 재호출 = 갱신.

아직 push 하지 않은 노드를 가리켜도 된다 — 플레이스홀더 노드가 자동 생성되고, 나중에 같은 id 로 push_node 하면 해소된다.

push_batchA

여러 노드/엣지를 한 번에 그린다. 배치 안에서 서로 참조해도 된다.

nodes 를 먼저 적용한 뒤 edges 를 적용한다. 호출당 nodes+edges 합계 1,000개 상한 — 대량 유입은 import_from_file 을 쓴다.

update_nodeC

노드를 부분 갱신한다.

update_edgeC

엣지를 부분 갱신한다. patch/reason 규약은 update_node 와 같다.

[23-C] RN7 ZZ(1): patch is required, as [5-A] declares it. It had drifted to | None = None, which made this the one updater that accepted a missing patch — and the falsy-to-{} degradation that used to hide behind it reported ok:True while changing nothing but updated_at, publishing an edge.update for an edit that never happened. Keyword-only because key carries a default.

delete_nodeA

노드를 삭제한다.

연결된 엣지가 있는데 cascade=False 면 삭제를 거부하고 { ok: false, error: "has_edges", edge_count } 를 돌려준다 — 끊어진 엣지는 허용되지 않는다.

delete_edgeD

엣지를 삭제한다.

clear_layerA

특정 AI/세션이 그린 노드/엣지를 삭제한다.

삭제되는 노드에 걸린 엣지는 다른 layer 것이라도 함께 사라진다. findings 는 남는다. 실행 직전 자동 스냅샷이 저장되므로 응답의 snapshot_id 로 되돌릴 수 있다.

clear_allA

그래프의 노드/엣지를 전부 삭제한다 (스냅샷과 findings 는 유지).

실행 직전 자동 스냅샷이 저장되므로 응답의 snapshot_id 로 되돌릴 수 있다.

undoA

[M2e] 마지막 그래프 변경(push/update/delete/clear/cite/import)을 되돌린다.

되돌린 결과는 [8-C] 이벤트로 브로드캐스트되어 열린 뷰가 즉시 갱신된다. 되돌릴 것이 없으면 { ok: false, error: "nothing_to_undo" }. (필터/스타일/포커스/스냅샷 같은 뷰 상태는 대상이 아니다.)

redoA

[M2e] 방금 undo 한 변경을 다시 적용한다.

새로운 그래프 변경이 일어나면 redo 스택은 비워진다. 다시 적용할 것이 없으면 { ok: false, error: "nothing_to_redo" }.

record_findingA

AI 가 분석 중 발견한 결정적 통찰(gold)을 못박는다.

수천 개 구조 노드 사이에 묻히지 않도록 별도로 강조·조회된다.

update_findingA

기존 finding 을 부분 갱신한다 (같은 발견의 갱신은 record 대신 이것).

list_findingsA

이전 세션의 gold 목록 — 인수인계 시 가장 먼저 호출한다.

최신 발견이 먼저 온다 (created_at desc). body 는 무거워질 수 있어 목록에서 빠지며, 상세는 get_finding 으로 가져온다.

get_findingA

단일 finding 의 전체 내용 (body·evidence 포함) 과 앵커 노드 요약.

앵커가 아직 존재하지 않는 노드를 가리키면 { id, missing: true } 로 온다.

delete_findingC

finding 을 삭제한다.

citeB

노드에 근거 링크를 붙인다 (예: IDA 어드레스, 문서 URL).

한 노드에 여러 citation 이 누적된다. source_url 은 파일 경로/주소도 허용 — 반드시 http 일 필요 없다.

get_graph_summaryA

그래프 전경 — 규모·type 분포·layer·최고 허브. 인수인계 시 먼저 부른다.

수천 노드를 훑기 전에 "무엇이 얼마나 있나"를 한눈에 준다 (MVP 3대 도구).

get_nodeA

노드 하나를 통째로 조회한다 (properties·태그 포함).

properties 의 예약키(_citations/_superseded/_provenance)는 그대로 노출된다 — 읽기 전용이라 위조 위험이 없고, 근거·이력을 보여주는 게 목적이다.

list_nodesB

노드 목록 — filter 로 좁히고, 결정적 정렬 + 페이지네이션.

list_edgesB

엣지 목록 — filter 로 좁히고 결정적 정렬 + 페이지네이션.

get_neighborsD

id 로부터 depth 홉 이웃 서브그래프 ([5-B]).

find_pathsA

source→target 실제 경로 열거 (무방향, 최단 우선). path_to 의 후속.

필터 DSL 의 path_to 는 "도달 가능?"(bool)만 답한다 — 실제 경로는 여기서 준다.

searchA

노드 부분 일치 검색 — query 를 in_fields 각 필드에서 substring 매치 ([5-B]).

대소문자 무시 substring 매치(정규식 아님 — ReDoS 없음, [11]). in_fields 는 filter DSL 이 아니라 단순 필드명 목록이고, 검색 대상은 화이트리스트로 제한된다: {id, label, type, layer, created_by, parent_id, tags} 와 'properties.' (비예약 키만). 예약('_' 접두) 속성이나 미지 필드는 명확한 에러로 거부한다 — bare 필드명이 시스템 소유 키([23-B])를 읽는 구멍이 되지 않게 한다.

결과는 id 오름차순(결정적)으로 정렬해 limit(상한 1000)까지 준다. total 은 limit 이전 전체 매치 수라, 더 있으면 AI 가 안다. READ 무변형(dirty·이벤트 없음).

render_in_chatA

이 노드의 이웃 서브그래프를 chat 안 인터랙티브 카드로 렌더한다 ([9-D]).

Claude Desktop 등 MCP Apps 지원 클라이언트가 대화창 안 sandboxed iframe 으로 컴팩트 detail 뷰(이웃 노드/엣지)를 보여준다 — 전체 라이브 뷰는 브라우저 별창. 카드는 서버가 만든 자기완결 스냅샷이라 serve 에 연결하지 않고 비밀도 없다([11]).

get_active_filterA

사람이 지금 적용한 필터 ([5-C]) — 식과 매칭 노드 수. 없으면 둘 다 null.

AI 가 "사람이 무엇에 집중하고 있나"를 아는 통로다 (공유 뷰).

get_visible_nodesC

사람 화면에서 지금 보이는(필터 통과) 노드 id ([5-C]).

필터가 없으면 전부 보이므로 전체 노드를 준다. 결정적 정렬 + 페이지네이션.

get_focused_nodeA

사람이 지금 선택(focus)한 노드 ([5-C]) — id 와 얼마나 됐는지(since_ms).

선택이 없으면 null. AI 가 작업 사이에 "사람이 지금 뭘 보나"를 아는 통로다.

get_selection_historyB

최근 클릭 히스토리 ([5-C]) — 최신순 [{id, ts}, ...].

get_view_stateA

사람 화면의 뷰 상태 ([5-C], [9-C]) — mode/zoom/camera. 미설정이면 null.

여러 브라우저가 붙어 있으면 가장 최근 활동 클라이언트의 상태다.

poll_eventsA

사용자 상태 변화(focus/filter)를 커서 이후분만 폴링한다 ([5-C]).

MCP 는 단발 요청/응답이라 서버가 AI 에게 push 하지 못한다 — AI 는 작업 사이에 이걸 호출해 사람의 변화를 따라잡는다 ([5-C] 폴링 패턴).

suggest_filterA

사람에게 필터를 제안한다 ([5-D]) — 적용이 아니라 배너로 뜬다.

AI 가 "이걸 보면 좋겠다"를 제시하고, 적용 여부는 사람이 정한다.

focus_onA

사람 화면을 이 노드로 이동한다 ([5-D]) — overview → detail 전환.

set_layoutC

상세(cytoscape) 뷰의 레이아웃을 바꾼다 ([5-D], [7-B] 탭 enum 동일).

apply_styleA

방금 push 한 것 등을 임시로 강조한다 ([5-D]) — 그래프는 안 바꾼다.

clear_styleB

AI 스타일을 지운다 ([5-D]). style_id 생략하면 전부 지운다.

add_annotationC

화면 (x, y) 에 텍스트 메모를 띄운다 ([5-D]).

text 는 AI 가 쓴 것이라 프론트에서 이스케이프되어 렌더된다([11]).

save_snapshotB

이 세션의 그래프를 스냅샷으로 저장한다 (다음 세션이 이어받을 지점).

list_snapshotsA

저장된 스냅샷 목록 (최신 먼저). 인수인계 시 가장 먼저 호출한다.

kind 는 "manual"(사용자/AI 가 저장) 또는 "auto"(자동 스냅샷)다.

load_snapshotA

스냅샷을 불러와 현재 그래프를 통째로 교체한다.

교체 직전 현재 상태가 auto 스냅샷으로 저장되므로, 실수로 불러왔더라도 되돌아갈 지점이 남는다.

export_graphA

그래프를 데이터 포맷 파일로 내보낸다 ([5-E]).

파일은 서버 데이터 디렉토리 안에 생성되고(호출자 경로 지정 불가 — path traversal 차단 [11]) 그 경로를 반환한다. JSON 은 import 로 라운드트립된다.

import_graphA

인라인 JSON 데이터를 임포트한다 ([5-E]). payload 1MB 상한.

merge=True 는 identity((id) / (source,target,relation,key))로 멱등 병합, merge=False 는 전체 그래프 교체. 임포트 데이터는 WRITE 검증 경로를 통과하므로 예약('_') 키를 위조할 수 없다([11]/[23-B]) — 서버관리 필드는 무시된다.

import_from_fileA

서버 데이터 디렉토리 안의 파일에서 대량 임포트한다 ([5-E], 100K+).

서버가 파일을 직접 읽어 in-process 처리한다(push_batch 의 MCP 상한 미적용). path 는 데이터 디렉토리 내로 제한된다 — 절대경로/.. traversal/루트 밖 거부([11]). merge 의미론은 import_graph 와 같다.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

B3.1/5.0

Scored across 43 tools

Disambiguation4/5

Most tools have clearly distinct purposes (push vs update vs delete vs list vs get), but some overlap exists: clear_layer/clear_all/delete_node/delete_edge all delete things, and get_graph_summary/list_nodes/search all provide graph overviews. The descriptions help disambiguate, but the boundaries between clear_layer and delete_node could confuse an agent.

Naming Consistency4/5

The naming is predominantly verb_noun (push_node, list_edges, delete_finding, load_snapshot) with consistent snake_case. Minor deviations: undo/redo are bare verbs, and focus_on/suggest_filter use prepositions, but the overall pattern is predictable and readable.

Tool Count3/5

43 tools is on the heavy side for a graph visualization server. The scope is broad (graph CRUD, findings, snapshots, view state, events, import/export), so each tool has a role, but the count exceeds the typical well-scoped range and will increase agent selection overhead.

Completeness4/5

The surface covers the full graph lifecycle (create/read/update/delete for nodes, edges, findings), plus snapshots, import/export, and view-state awareness. Minor gaps: no explicit tool for listing layers or managing citations beyond adding them, and no bulk delete for edges, but agents can work around these.

Maintenance

ActivitySlowing
ResponsivenessNo issues