Roo Code MCP Server: Codebase Graph Setup

Roo Code (the open-source VS Code agent, formerly Roo Cline) works by reading files directly, running commands you approve, and, if you enable it, a codebase index that embeds your repo for semantic search. That combination is good at pulling relevant files into context and pattern-matching across them. It stays weaker at the structural question that matters right before an edit: who calls this symbol, and what breaks if I change it. Reading a file tells the agent what that file contains. It doesn't tell it which other files depend on the function inside.

Symvanta adds that structural layer over MCP: a real code graph (nodes are symbols, edges are calls, imports, implements, instantiates) that Roo Code queries directly, next to whatever its own reading and indexing already give it. The two run side by side. Keep Roo Code's file reading and optional index for finding and pattern search, and add Symvanta for structure: exact symbol resolution, real callers, and blast radius before an edit lands.

Setting up the Roo Code MCP server

  1. Create a free Symvanta account at symvanta.com and connect GitHub.
  2. Index the repos Roo Code works in. A webhook reindexes on every push, so the graph stays current without a manual trigger. Plans start at $19/month, and Pro (per-seat) ships with a 7-day trial.
  3. Add Symvanta as an MCP server. Open the MCP icon at the top of the Roo Code panel, scroll to the bottom of the MCP settings view, and click Edit Global MCP (the mcp_settings.json file that applies across every workspace) or Edit Project MCP (a .roo/mcp.json in the current project root). A remote server uses type: streamable-http with a url:
{
  "mcpServers": {
    "symvanta": {
      "type": "streamable-http",
      "url": "https://mcp.symvanta.com/mcp"
    }
  }
}

Set type explicitly. Roo Code does not infer the transport from a URL alone, so a URL entry with no "type": "streamable-http" fails to connect. 4. Call any Symvanta tool. The first call opens a browser window for OAuth 2.0 (PKCE) login and hands Roo Code a scoped token. There is no API key to generate and no static header to paste into the config.

If a server name exists in both files, the project-level .roo/mcp.json wins. That suits a team that wants the MCP connection checked into version control next to the code it indexes. The global mcp_settings.json suits a solo developer working across several repos on one machine.

What Roo Code's agent gets

Once the server is connected, Roo Code has 25 tools available over MCP. The ones it reaches for most during an edit-heavy session:

Tool What it gives Roo Code
find_node Exact symbol definition, file, and signature
relate (callers / dependencies / blast_radius / implementers) Real callers, what a symbol depends on, what breaks if it changes, what implements an interface
ask_codebase Behavior questions ("how does X work") answered with cited files
locate Text, semantic, or config-key search across the repo
find_http_route The handler behind a route path and method
list_file_symbols Every symbol defined in a file, without opening it
list_tests_for Existing tests that already cover a symbol
estimate_scope Rough sizing of a change before Roo Code commits to a plan

The graph covers TypeScript, JavaScript, Python, Java, Kotlin, C#, Go, Rust, Swift, PHP, and Ruby, so a polyglot repo keeps coverage at the language boundary.

Blast radius before a shared edit

Roo Code's Architect mode drafts a plan, then Code mode carries it out. Both are only as good as the context behind them. Say Roo Code is asked to change the signature of a validation helper used by three services. Reading the file it lives in, plus a grep for the name, finds a handful of call sites. It edits those and moves on, unaware of a fourth caller behind an interface or a consumer in a repo it never opened.

With Symvanta wired in, Roo Code calls relate with kind: blast_radius on the helper first. The result comes back as real edges: which functions call it directly, which route through an interface, and which repos outside the open one depend on it. That is the distinction we cover in blast radius analysis: a grep result is a list of matching lines, a blast radius is the graph of what actually depends on what. Architect mode plans against that list, and the diff Code mode writes covers every real caller on the first pass.

For an unfamiliar module, the pattern runs in reverse: call map for the module skeleton, see which files own which responsibilities, then plan, the way we walk real open-source repos through their module maps on the architecture pages. Either direction, the graph call lands while the fix is still cheap. Why a graph answers this question and embeddings can only approximate it is the subject of code embeddings vs. code graph.

Frequently asked questions

Does this replace Roo Code's codebase indexing?

No. Roo Code's file reading and its optional embeddings-based codebase index stay exactly as they are. Symvanta adds a second source Roo Code can call over MCP for the questions retrieval answers poorly: exact callers, dependencies, blast radius, and cross-repo edges. The two compose.

Do I need an API key or a header for the connection?

No. The config entry is just type and url. Authentication happens on the first tool call through an OAuth 2.0 (PKCE) browser login, so there is no key to generate or header to store in mcp_settings.json. Do set type to streamable-http, since Roo Code cannot infer the transport from the URL.

Is my code used to train anything?

No. Symvanta parses your repository into a graph of symbols and relationships. Source code is discarded by default once parsing completes and is never used to train models. An Enterprise source-storage add-on exists for teams that want raw source persisted and queryable.

What does Symvanta cost?

Starter is $19/month. Pro is $29 per seat per month with a 7-day trial. Enterprise is $99 per seat per month with a 15-seat minimum, for teams that need on-prem deployment or SSO. MCP access is included at every tier, so connecting Roo Code adds no separate charge.

Book a 15-minute demo

See Symvanta on your own codebase →