Semantic code search, symbol lookup, call graphs, dependency graphs, ownership maps, and context pack generation for ADK-Rust Enterprise agents. Provides 8 MCP tools that work against any local workspace.
- Workspace-local — searches your actual codebase on disk, not a remote index.
- Multi-language — supports Rust, TypeScript, Python, Go, Java, JavaScript.
- Structural awareness — understands symbols, call graphs, dependencies, and ownership.
- Context packs — gather related files, deps, and tests for LLM context windows.
- Zero config — point at a directory and search. No indexing step required.
- Registry-ready — ships with
mcp-server.tomlfor ADK-Rust Enterprise onboarding.
| Tool | Purpose | Risk Class |
|---|---|---|
semantic_code_search |
Find code by meaning — regex search with language filtering | Read-only |
symbol_lookup |
Look up symbol definitions (fn, struct, trait, class, def) | Read-only |
find_references |
Find all references to a symbol across the codebase | Read-only |
get_call_graph |
Get callers and callees for a function | Read-only |
get_dependency_graph |
Parse Cargo.toml/package.json for dependency tree | Read-only |
get_codeowners |
Get CODEOWNERS for a file or directory | Read-only |
build_context_pack |
Gather related files, dependencies, and tests | Read-only |
explain_symbol |
Definition, signature, doc comments, usage count, location | Read-only |
Tested against the mcp-a2a codebase:
> semantic_code_search(query: "resolve_card", language: "rust", limit: 5)
{ "query": "resolve_card", "count": 5, "results": [
{ "file": "src/store.rs", "line": 30, "text": "pub async fn resolve_card(&self, base_url: &str) -> Result<A..." },
{ "file": "src/server.rs", "line": 64, "text": "match self.store.resolve_card(&i.base_url).await {" }
]}
> symbol_lookup(symbol: "A2aStore", kind: "struct")
{ "symbol": "A2aStore", "kind": "struct", "definitions": [
{ "file": "src/store.rs", "line": 10 }
], "count": 1 }
> get_dependency_graph(path: ".")
{ "path": ".", "count": 15, "dependencies": [
{ "name": "adk-mcp-sdk", "version": "0.1.0" },
{ "name": "rmcp", "version": "3.1.2" },
{ "name": "tokio", "version": "1.43" },
{ "name": "serde", "version": "1.0" },
{ "name": "reqwest", "version": "0.12" }
]}
> find_references(symbol: "send_message")
{ "symbol": "send_message", "count": 20, "references": [...] }
> explain_symbol(symbol: "AgentCard")
{ "symbol": "AgentCard", "definition_count": 7, "reference_count": 20 }
git clone https://github.com/zavora-ai/mcp-code-search
cd mcp-code-search
cargo build --releaseThe binary is at target/release/mcp-code-search.
export CODE_SEARCH_WORKSPACE=/path/to/your/projectIf not set, defaults to the current working directory.
{
"mcpServers": {
"code-search": {
"command": "/path/to/mcp-code-search",
"env": { "CODE_SEARCH_WORKSPACE": "/path/to/project" }
}
}
}{
"mcpServers": {
"code-search": {
"command": "/path/to/mcp-code-search",
"env": { "CODE_SEARCH_WORKSPACE": "/path/to/project" }
}
}
}{
"mcpServers": {
"code-search": {
"command": "/path/to/mcp-code-search",
"env": { "CODE_SEARCH_WORKSPACE": "/path/to/project" }
}
}
}{
"mcpServers": {
"code-search": {
"command": "/path/to/mcp-code-search",
"env": { "CODE_SEARCH_WORKSPACE": "/path/to/project" }
}
}
}| Language | Extensions | Symbol Patterns |
|---|---|---|
| Rust | .rs |
fn, struct, trait, enum, type, const |
| TypeScript | .ts, .tsx |
function, class, interface, type, const |
| Python | .py |
def, class |
| Go | .go |
func, type, const |
| Java | .java |
class, interface |
| JavaScript | .js |
function, class, const |
server_id = "mcp_code_search"
display_name = "Code Search MCP"
version = "1.2.0"
domain = "developer"
risk_level = "low"
writes_allowed = "none"
transports = ["stdio"]
governance_gates = []![]() James Karanja Maina |
|---|
Apache-2.0 — see LICENSE for details.
Part of the ADK-Rust Enterprise MCP server ecosystem.
This server implements the ADK MCP SDK contract:
- HealthCheck — async health probe for registry monitoring
- mcp-server.toml — manifest declaring tools, risk classes, and credentials
- Structured tracing —
RUST_LOGenv-filter for observability
This server is built with rmcp 3.1.2 and requires Rust 1.94.1 or newer. The rmcp 3 rollout retains legacy MCP initialization compatibility and targets MCP protocol revisions 2025-11-25 and 2026-07-28.
This server uses rmcp 3.1.2 and adk-mcp-sdk 0.2 with a minimum supported
Rust version of 1.94.1. It accepts stateless MCP 2026 requests with
per-request protocol, client identity, and capability metadata while retaining
the legacy MCP 2025-11-25 initialize flow for ordinary tools.
- Tasks:
build_context_pack - MRTR approvals: None; this server exposes no manifest-classified protected operations.
- Discovery and routing: rmcp serves on-demand discovery and validates the
per-request protocol envelope; HTTP deployments can route with
Mcp-MethodandMcp-Name. The packaged binary currently uses stdio. - Caching:
tools/listreturns a publicttlMsof 60,000 for MCP 2026; rmcp omits the cache fields for legacy clients. - Deprecated extensions: this server does not add new Roots, Sampling, or dynamic client-registration dependencies.
Protected tools require MCP_REQUEST_STATE_KEY with at least 32 high-entropy
bytes. All replicas must share that key so sealed approval state can resume on
another instance. Approval state is bound to the client identity, tool, and
arguments and expires after two minutes. Missing identity, invalid state,
rejection, or legacy protocol use fails closed. Task records are process-local
for the current stdio runtime; use a durable task store before deploying the
server behind scale-to-zero HTTP infrastructure.
