Skip to main content
Glama
adelaidasofia

graph-query-mcp

graph-query-mcp

Surgical queries against an Obsidian / vault knowledge graph. Loads a graph.json (NetworkX node-link format) once at startup and answers targeted questions without making Claude read a 50K-line graph report.

Designed to pair with graphify (the graph-building skill in ai-brain-starter), but the server accepts any graph in NetworkX node-link JSON. Supports up to two scopes (primary + secondary, e.g. personal + team).

Why use this

If you've already run graphify on a vault, you've got a graph.json and a GRAPH_REPORT.md. Reading the full report into Claude burns thousands of tokens for every question. This MCP loads the graph once at startup, answers in <50ms, and never spills the whole graph into context.

Related MCP server: vault-graph-mcp

Tools

Tool

What it does

search_nodes(query, scope, limit)

Fuzzy match against node names. Returns node IDs ranked by exact / starts-with / contains.

get_neighbors(node_id, scope, max_hops, limit)

Connected nodes within N hops, sorted by degree.

find_path(source, target, scope)

Shortest path between two concepts. Auto-fuzzy-matches both ends.

get_top_nodes(scope, n)

Highest-degree nodes (the "god nodes").

query_subgraph(concepts, scope, max_hops, limit)

Subgraph around a list of concepts; reports node + edge counts.

get_node_info(node_id, scope)

Full metadata + top neighbors for one node.

get_community_members(node_id, scope, limit)

All nodes in the same community-detection cluster.

Scope defaults to personal; pass scope="onde" (or whatever secondary scope name you've configured) for the second graph.

Configuration

Two env vars, both optional:

Env var

Default

Use for

GRAPH_JSON_PATH

~/Documents/Vault/Meta/graphify-out/graph.json

Primary graph (the personal scope)

SECONDARY_GRAPH_JSON_PATH

~/Documents/Vault/Team/Meta/graphify-out/graph.json

Secondary graph (the onde scope, historical name)

ONDE_GRAPH_JSON_PATH is also accepted as a backward-compat alias for SECONDARY_GRAPH_JSON_PATH.

If a path doesn't exist at startup, the server logs a warning and the tools return a friendly error when that scope is queried. The server still starts — a missing secondary graph never blocks the primary.

Install

Open Claude Code, paste:

/plugin marketplace add adelaidasofia/graph-query-mcp
/plugin install graph-query-mcp@graph-query-mcp
git clone https://github.com/adelaidasofia/graph-query-mcp.git ~/.claude/graph-query-mcp
cd ~/.claude/graph-query-mcp
pip3 install --break-system-packages -r requirements.txt

Register in your project .mcp.json:

{
  "mcpServers": {
    "graph-query": {
      "type": "stdio",
      "command": "fastmcp",
      "args": ["run", "/Users/YOU/.claude/graph-query-mcp/server.py"],
      "env": {
        "GRAPH_JSON_PATH": "/path/to/your/vault/Meta/graphify-out/graph.json"
      }
    }
  }
}

Restart Claude Code, then claude mcp list should show graph-query connected.

Generating the graph

This MCP doesn't build the graph; it queries one. Use graphify (a skill in ai-brain-starter) to produce a graph.json from your vault, or any other NetworkX-compatible builder. The expected format is the output of networkx.node_link_data(G).

Verification

python3 tests/integration/test_smoke.py
# expected: PASSED — graph-query-mcp smoke (4 steps green)

Architecture

FastMCP, stdio transport, Python 3.10+. Graphs are loaded once at startup and cached in memory. No daemons, no listeners, no external services. NetworkX in-memory for query primitives.

Same author, same architecture pattern (FastMCP, draft+confirm on writes where applicable, vault auto-export, MIT):

Telemetry

This plugin sends a single anonymous install signal to myceliumai.co the first time it loads in a Claude Code session on a given machine.

What is sent:

  • Plugin name (e.g. slack-mcp)

  • Plugin version (e.g. 0.1.0)

What is NOT sent:

  • No user identifiers, names, emails, tokens, or API keys

  • No file paths, message content, or anything from your work

  • No IP address is stored after dedup processing

Why: Helps the maintainer know which plugins people actually install, so attention goes to the ones that get used.

Opt out: Set the environment variable MYCELIUM_NO_PING=1 before launching Claude Code. The hook will skip the network call entirely. Already-pinged installs leave a sentinel at ~/.mycelium/onboarded-<plugin> — delete it if you want to reset state.

License

MIT. See LICENSE.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to navigate, search, and rank notes in an Obsidian vault using graph relationships, providing context-aware access to knowledge without exposing raw file contents.
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Provides retrieval and graph tools for agents to search, backlink, and navigate a markdown-based knowledge vault, enabling hybrid search and serendipitous discovery.
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Enables Claude clients to interact with an Obsidian vault as a knowledge graph, supporting full-text search, backlink traversal, neighborhood exploration, and note creation/append.
    41
    82 npm
    15
    MIT