You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
neighbors(out, [CALLS]) on a typical service method returns a wall of edges where most are noise. An agent doing hop-based exploration (neighbors(out, [CALLS]) → pick target → repeat) floods its context window with ~30 noise items per ~5 signal items at each hop.
Evidence
Concrete example from the bank-chat-system fixture — ChatManagementService#assign(AssignmentRequest) returns 35 outgoing CALLS edges:
After 3 hops: ~90 tokens of noise versus ~15 of signal.
Why NodeFilter on neighbors can't help today
All targets (services, entities, phantoms) have role=OTHER — the role system doesn't distinguish "service I delegate to" from "entity I call a setter on."
There's no filter on edge attributes (confidence, strategy, resolved) — these exist in attrs on the response but can't be used as input predicates.
There's no exclude_phantom or min_confidence parameter.
Duplicate edges (same callee called N times from different call sites) aren't deduplicated.
Noise taxonomy
The noise breaks into recognizable categories that could be filtered either server-side or client-side:
Phantom / chained-receiver edges: strategy in (phantom, chained_receiver) or confidence < 0.3. These are unresolved call sites — the graph builder couldn't determine the actual target.
JDK / library utility calls: fqn starts with java., javax., org.slf4j., org.apache.logging., lombok.. Standard library calls that never carry business logic.
Entity accessor calls: getter (get*), setter (set*), constructor (<init>) on DTO/Entity types. High volume, low information during hop traversal.
Duplicates: same callee FQN from multiple call sites within the same method.
Server-side edge-attr filter — add min_confidence, exclude_phantom, or general edge-attr predicates to neighbors. Requires a propose for MCP surface change.
Smarter role assignment — classify entity accessor methods differently from business-logic methods so NodeFilter can distinguish them. Requires ontology work.
Deduplicate in response — collapse same-callee edges into one with a count. Small MCP change.
Problem
neighbors(out, [CALLS])on a typical service method returns a wall of edges where most are noise. An agent doing hop-based exploration (neighbors(out, [CALLS])→ pick target → repeat) floods its context window with ~30 noise items per ~5 signal items at each hop.Evidence
Concrete example from the bank-chat-system fixture —
ChatManagementService#assign(AssignmentRequest)returns 35 outgoing CALLS edges:SplitResolverService#resolveSplitName(String),DistributionTriggerPublisher#publishTrigger()AssignChatRepository#findByConversationId(String),AssignQueueRepository#save(?)AssignChatEntity#setEpkId(String),AssignmentRequest#getConversationId()×3?ResponseStatusException#<init>(2),?c#setId(1),UUID#randomUUID(?),Instant#now(?),?...#orElseGet(1)After 3 hops: ~90 tokens of noise versus ~15 of signal.
Why
NodeFilteronneighborscan't help todayrole=OTHER— the role system doesn't distinguish "service I delegate to" from "entity I call a setter on."confidence,strategy,resolved) — these exist inattrson the response but can't be used as input predicates.exclude_phantomormin_confidenceparameter.Noise taxonomy
The noise breaks into recognizable categories that could be filtered either server-side or client-side:
strategy in (phantom, chained_receiver)orconfidence < 0.3. These are unresolved call sites — the graph builder couldn't determine the actual target.fqnstarts withjava.,javax.,org.slf4j.,org.apache.logging.,lombok.. Standard library calls that never carry business logic.get*), setter (set*), constructor (<init>) on DTO/Entity types. High volume, low information during hop traversal.Possible solution directions (not prescriptive)
/mini-map) callsneighbors, receives all edges, and applies classification rules client-side. No MCP surface change. See PR propose: agent skills and commands — Layer 3 over the 4-tool MCP #59 (/mini-mapskill).min_confidence,exclude_phantom, or general edge-attr predicates toneighbors. Requires a propose for MCP surface change.NodeFiltercan distinguish them. Requires ontology work.These are not mutually exclusive.
Reproduction