Skip to content

Commit 85a7965

Browse files
committed
fix(mcp): parse dependency graph API response correctly
- API returns nodes[] and edges[] arrays, not total_files/total_dependencies - Calculate critical files by counting edge targets (dependents) - Show files with most imports from nodes data - Fixes MCP showing 0 files/dependencies for dependency graph tool
1 parent 56d2309 commit 85a7965

1 file changed

Lines changed: 23 additions & 10 deletions

File tree

mcp-server/server.py

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -212,21 +212,34 @@ async def handle_call_tool(
212212
response.raise_for_status()
213213
result = response.json()
214214

215+
nodes = result.get('nodes', [])
216+
edges = result.get('edges', [])
217+
metrics = result.get('metrics', {})
218+
215219
formatted = f"# Dependency Graph Analysis\n\n"
216-
formatted += f"**Total Files:** {result.get('total_files', 0)}\n"
217-
formatted += f"**Total Dependencies:** {result.get('total_dependencies', 0)}\n"
218-
formatted += f"**Avg Dependencies per File:** {result.get('metrics', {}).get('avg_dependencies', 0):.1f}\n\n"
220+
formatted += f"**Total Files:** {len(nodes)}\n"
221+
formatted += f"**Total Dependencies:** {metrics.get('total_edges', len(edges))}\n"
222+
formatted += f"**Avg Dependencies per File:** {metrics.get('avg_dependencies', 0):.1f}\n\n"
223+
224+
# Find most imported files (most dependents)
225+
dependent_count = {}
226+
for edge in edges:
227+
target = edge.get('target', '')
228+
dependent_count[target] = dependent_count.get(target, 0) + 1
219229

220-
if result.get('metrics', {}).get('most_critical_files'):
230+
if dependent_count:
231+
sorted_deps = sorted(dependent_count.items(), key=lambda x: x[1], reverse=True)[:5]
221232
formatted += "## Most Critical Files (High Impact)\n\n"
222-
for item in result['metrics']['most_critical_files'][:5]:
223-
formatted += f"- `{item['file']}` - **{item['dependents']} dependents**\n"
233+
for file, count in sorted_deps:
234+
formatted += f"- `{file}` - **{count} dependents**\n"
224235
formatted += "\n"
225236

226-
if result.get('external_dependencies'):
227-
formatted += f"## External Dependencies\n\n"
228-
for dep in result['external_dependencies'][:10]:
229-
formatted += f"- {dep}\n"
237+
# Show high-import files
238+
high_import_files = [n for n in nodes if n.get('imports', 0) >= 3]
239+
if high_import_files:
240+
formatted += "## Files with Most Imports\n\n"
241+
for f in sorted(high_import_files, key=lambda x: x.get('imports', 0), reverse=True)[:5]:
242+
formatted += f"- `{f['id']}` - imports {f['imports']} files\n"
230243

231244
return [types.TextContent(type="text", text=formatted)]
232245

0 commit comments

Comments
 (0)