Skip to main content
Glama

solograph

Code intelligence MCP server for Claude Code. Multi-project code graph, semantic search, session history, knowledge base, web search.

PyPI: pip install solograph / uvx solograph

All vector search powered by FalkorDB (embedded, no Docker). No ChromaDB dependency.

Embeddings

Two backends, both produce 384-dimensional vectors:

Backend

Model

Platform

Languages

MLX (primary)

multilingual-e5-small-mlx

Apple Silicon

RU + EN

sentence-transformers (fallback)

all-MiniLM-L6-v2

Any

EN

Auto-detects Apple Silicon → uses MLX. Falls back to sentence-transformers on other platforms.

Install MLX support (optional):

uv add solograph[mlx]

Related MCP server: mcp-context

Install

uv add solograph
# or
pip install solograph

Usage

MCP Server (for Claude Code)

claude mcp add -s project solograph -- uvx solograph

Or add manually to .mcp.json:

{
  "mcpServers": {
    "solograph": {
      "command": "uvx",
      "args": ["solograph"]
    }
  }
}

CLI

solograph-cli init ~/my-projects       # First-time setup (scan + build graph)
solograph-cli init ~/my-projects --deep # + imports, calls, inheritance
solograph-cli scan                     # Re-scan projects into graph
solograph-cli scan --deep              # + imports, calls, inheritance (tree-sitter)
solograph-cli stats                    # Graph statistics
solograph-cli explain my-app           # Architecture overview
solograph-cli xray ~/my-projects       # Portfolio X-Ray (all projects at once)
solograph-cli diagram my-app           # Mermaid diagram
solograph-cli query "MATCH (n) RETURN n LIMIT 5"
solograph-cli web-search "query"       # Web search via SearXNG/Tavily
solograph-cli index-youtube -c GregIsenberg -n 10  # Index YouTube channel
solograph-cli index-youtube -u "https://youtube.com/watch?v=ID"  # Index specific video by URL
solograph-cli index-youtube             # Index all channels from channels.yaml

Install globally:

uv tool install solograph              # → solograph + solograph-cli in PATH

Quick Start

# 1. Install
uv tool install solograph

# 2. Init — creates ~/.solo/, scans projects, builds graph
solograph-cli init ~/my-projects

# 3. Add MCP to Claude Code
claude mcp add -s project solograph -- uvx solograph

# 4. Done — MCP tools available in Claude Code

Configuration

Environment variables:

Variable

Default

Description

CODEGRAPH_DB_PATH

~/.solo/codegraph.db

FalkorDB code graph path

CODEGRAPH_REGISTRY

~/.solo/registry.yaml

Project registry path

CODEGRAPH_SCAN_PATH

~/projects

Where to scan for projects

KB_PATH

(none)

Knowledge base root (markdown files with YAML frontmatter)

TAVILY_API_URL

http://localhost:8013

Tavily-compatible search URL

TAVILY_API_KEY

(none)

API key for Tavily

15 MCP Tools

  • codegraph_query — Cypher queries against code graph

  • codegraph_stats — graph statistics (projects, files, symbols, packages)

  • codegraph_explain — architecture overview of a project

  • codegraph_shared — packages shared across projects

  • project_code_search — semantic code search (auto-indexes on first call)

  • project_code_reindex — reindex project code into FalkorDB vectors

  • session_search — Claude Code session history search

  • project_info — project registry info

  • kb_search — knowledge base semantic search

  • web_search — web search (Tavily/SearXNG)

  • source_search — search indexed external sources (YouTube, Telegram)

  • source_list — list indexed sources with document counts

  • source_tags — auto-detected topics with video counts

  • source_related — find related videos by shared tags

The web_search tool connects to any Tavily-compatible API. Works great with self-hosted SearXNG + Tavily Adapter — private, no API keys, smart engine routing.

# Self-hosted (Docker, 1 minute setup)
git clone https://github.com/fortunto2/searxng-docker-tavily-adapter.git
cd searxng-docker-tavily-adapter
cp config.example.yaml config.yaml
docker compose up -d
# → http://localhost:8013/search (Tavily API)
# → http://localhost:8999 (SearXNG UI)

Or use Tavily API directly — set TAVILY_API_URL=https://api.tavily.com and TAVILY_API_KEY.

Smart engine routing auto-selects search engines by query type:

  • tech: github, stackoverflow (keywords: python, react, code)

  • academic: arxiv, google scholar (keywords: research, paper)

  • product: brave, reddit, app stores (keywords: app, competitor, pricing)

  • news: google news (keywords: news, latest, trend)

  • general: google, duckduckgo, brave (default)

Graph Schema

Nodes

Node

Key Properties

Source

Project

name, stack, path

registry.yaml

File

path, lang, lines, project

tree-sitter scan

Symbol

name, kind (class/function/method), file, line

tree-sitter AST

Package

name, version, source (npm/pip/spm/gradle)

manifest files

Session

session_id, project_name, started_at, slug

.claude/ history

Edges

Edge

From → To

Description

HAS_FILE

Project → File

Project contains file

DEFINES

File → Symbol

File defines symbol

IMPORTS

File → File/Package

Import relationship

CALLS

File → Symbol

File calls symbol

INHERITS

Symbol → Symbol

Class inheritance

DEPENDS_ON

Project → Package

Package dependency

MODIFIED

Session → File

Git history (lines added/removed)

TOUCHED / EDITED / CREATED

Session → File

Session file operations

IN_PROJECT

Session → Project

Session belongs to project

Example Cypher Queries

-- Hub files (most imported)
MATCH (f:File)<-[:IMPORTS]-(other:File)
RETURN f.path, COUNT(other) AS importers
ORDER BY importers DESC LIMIT 10

-- Shared packages across projects
MATCH (p1:Project)-[:DEPENDS_ON]->(pkg:Package)<-[:DEPENDS_ON]-(p2:Project)
WHERE p1.name <> p2.name
RETURN pkg.name, COLLECT(DISTINCT p1.name) AS projects

-- Impact analysis: what breaks if I change this file?
MATCH (f:File {path: 'lib/utils.ts'})<-[:IMPORTS*1..3]-(dep:File)
RETURN dep.path

-- Most edited files (from session history)
MATCH (s:Session)-[:EDITED]->(f:File)
RETURN f.path, COUNT(s) AS sessions
ORDER BY sessions DESC LIMIT 10

-- Files touched by sessions in a project
MATCH (s:Session {project_name: 'my-app'})-[r]->(f:File)
RETURN f.path, type(r) AS action, COUNT(s) AS times
ORDER BY times DESC

YouTube Source Graph

Separate FalkorDB graph at ~/.solo/sources/youtube/graph.db:

Node

Key Properties

Channel

name, handle, subscriber_count

Video

video_id, title, duration, view_count, created

VideoChunk

text, chapter, start_time, start_seconds, chunk_index, chunk_type, embedding (384-dim)

Tag

name

Edge

Description

HAS_VIDEO

Channel → Video

HAS_CHUNK

Video → VideoChunk

TAGGED

Video → Tag (weighted by confidence)

Indexer: solograph-cli index-youtube — discovers videos via SearXNG, fetches metadata + VTT via yt-dlp, chunks by chapters, embeds, upserts into graph.

Channels: ~/.solo/sources/youtube/channels.yaml — YAML list of YouTube handles to index. Symlink from your project's channels.yaml.

Chunking: VTT subtitles parsed into timestamped segments, grouped by chapter boundaries via chunk_segments_by_chapters(). Each chunk has accurate start_seconds from real VTT timestamps.

VTT cache: ~/.solo/sources/youtube/vtt/{videoId}.vtt — persistent, reused on re-index.

ProductHunt Source Graph

Separate FalkorDB graph at ~/.solo/sources/producthunt/graph.db:

Node

Key Properties

SourceDoc

doc_id, title, url, content, tags, created, popularity, embedding (384-dim)

Maker

username, name, headline, bio, points, streak_days, followers, twitter, linkedin

Indexer: solograph-cli index-producthunt — scrapes ProductHunt GraphQL API v2, maps products to SourceDoc with upvotes as popularity.

solograph-cli index-producthunt -d 30            # Last 30 days
solograph-cli index-producthunt --all --resume    # Full 3-year dump with checkpoint
solograph-cli import-producthunt data.jsonl       # Import from JSONL file

Ranking: Search results are boosted by popularity (upvotes). At equal semantic relevance, products with more upvotes rank higher.

Search Server

HTTP API for vector search across all indexed sources. Designed to run as a Docker service alongside SearXNG.

# Standalone
solograph-search  # starts on port 8002

# Docker (in searxng-docker-tavily-adapter)
docker compose up -d solograph-search

Endpoints:

  • GET /search?q=AI+tool&source=producthunt&n=5 — semantic search (source optional)

  • GET /sources — list indexed sources with counts

  • GET /health — status

Popularity boost: Products with more upvotes rank higher at equal relevance. Score = cosine_similarity * 0.85 + log10(upvotes) * boost. Fetch 3x candidates, re-rank, return top N.

Variable

Default

Description

SOLOGRAPH_SEARCH_PORT

8002

HTTP server port

SOURCES_ROOT

~/.solo/sources

FalkorDB graphs directory

Storage

  • Code graph: ~/.solo/codegraph.db (FalkorDB)

  • Session vectors: ~/.solo/sessions/graph.db (FalkorDB)

  • KB vectors: {KB_PATH}/.solo/kb/graph.db (FalkorDB)

  • Project vectors: {project_path}/.solo/vectors/graph.db (per-project FalkorDB)

  • YouTube source: ~/.solo/sources/youtube/graph.db (FalkorDB) + youtube/vtt/ (cached VTT files) + youtube/channels.yaml

  • ProductHunt source: ~/.solo/sources/producthunt/graph.db (FalkorDB) — 26k+ products with upvote-based ranking

Part of Solo Factory

Solograph is the MCP backend for Solo Factory — 9 skills and 3 agents for shipping startups faster. PyPI

Install skills + MCP together:

# Option 1: Skills for any agent (Claude Code, Cursor, Copilot, Gemini CLI, etc.)
npx skills add fortunto2/solo-factory --all

# Option 2: Claude Code plugin (skills + agents + MCP auto-start)
claude plugin marketplace add fortunto2/solo-factory
claude plugin install solo --scope user

Or use solograph standalone — just add to .mcp.json as shown above.

License

MIT

Available Tools

15 tools
codegraph_explainA

Architecture overview of a project from the code graph.

Returns structured data: stack, languages, directory layers, key patterns (mixins, base classes, CRUD schemas), top dependencies, and hub files.

Args: project: Project name (e.g. "my-app", "backend-api")

ParametersJSON Schema
NameRequiredDescriptionDefault
projectYes

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral disclosure burden. It clearly states that the tool returns structured data and lists the categories, which is useful. It does not explicitly say the operation is read-only, how the code graph is accessed, or describe failure behavior, though nothing suggests side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-structured: a one-line purpose statement, a concise list of return categories, and a clearly labeled Args section. Every sentence adds value and there is no redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Since there is no output schema, the description compensates by enumerating the major return categories and giving an example for the single parameter. It is complete enough for correct invocation, but the absence of explicit read-only confirmation and sibling differentiation leaves a small gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate. It does by defining the only parameter: 'project: Project name (e.g. "my-app", "backend-api")', which provides both meaning and examples. For a single required string parameter, this is sufficient, though it could mention whether an ID, path, or exact name format is expected.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear purpose: it provides an architecture overview of a project from the code graph, and it enumerates concrete return categories such as stack, languages, directory layers, key patterns, top dependencies, and hub files. It does not explicitly differentiate itself from sibling tools like codegraph_repomap or codegraph_stats, but the purpose is not vague.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The intended use case is implied by 'Architecture overview' and the listed output categories, suggesting the tool is for high-level project understanding. However, there is no explicit when-to-use guidance, no exclusions, and no mention of alternatives among the many sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

codegraph_queryA

Execute a raw Cypher query against the code intelligence graph.

The graph contains: Project, File, Symbol, Package, Session nodes. Edges: HAS_FILE, DEFINES, DEPENDS_ON, MODIFIED, IN_PROJECT, TOUCHED, EDITED, CREATED, IMPORTS (File->File or File->Package), CALLS (File->Symbol), INHERITS (Symbol->Symbol).

Example queries:

  • MATCH (p:Project) RETURN p.name, p.path LIMIT 10

  • MATCH (f:File {project: 'my-app'}) RETURN f.path, f.lang LIMIT 20

  • MATCH (p:Project)-[:DEPENDS_ON]->(pkg:Package) WHERE pkg.name = 'react' RETURN p.name

  • MATCH (s:Session)-[:EDITED]->(f:File) RETURN f.path, COUNT(s) ORDER BY COUNT(s) DESC LIMIT 10

Args: query: Cypher query string

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It explains the tool's data model and provides example queries, which sets expectations about the graph structure. However, it does not disclose whether queries are read-only, performance implications, potential for heavy load, or error behavior on malformed queries. For a raw-query tool, this is a notable gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured: a single sentence opens with the core function, then a structured list of graph components, followed by examples. It is slightly long but each element earns its place, especially the examples which are essential for an action with a single free-form parameter. Dense but not bloated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the graph schema, edge types, and parameter semantics, and there is an output schema present (not shown) that may convey return structure. What is missing is guidance on performance, query limits, or security considerations. For a power-user tool, this is adequate but not fully comprehensive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema only defines 'query' as a string with 0% description coverage. The description compensates fully by specifying that it is a Cypher query string, describing the available entities and edges, and offering multiple concrete examples that illustrate valid query syntax. This adds significant meaning beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool executes a raw Cypher query against a code intelligence graph, specifying node types and edge types. This provides a precise verb and resource, and visually distinguishes it from siblings like source_search or kb_search, which are likely semantic. The examples solidify the intended scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description conveys that this is for raw Cypher queries, which implies flexibility for complex or custom analyses. However, it does not explicitly state when to prefer this over sibling tools like codegraph_stats or source_search, nor does it mention any exclusions or recommended fallbacks. The usage context is clear but not contrastive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

codegraph_repomapA

Generate a YAML-formatted repository map showing the most important files and their symbols.

Helps understand the global structure of a project without reading all files.

Args: project: Project name (e.g. "my-app") limit: Maximum number of top files to include (default 20)

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
projectYes

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations are absent, so the description carries the full burden. The description explains the tool generates a YAML map, which implies a read-only operation, but it does not explicitly state that it is non-destructive, requires no special permissions, or has any side effects. No contradictions exist, but the description would benefit from an explicit statement that it only reads repository data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a concise intro and a clean 'Args:' section. Every sentence is purposeful, with no unnecessary verbosity. It is front-loaded with the core purpose and uses a list for parameters, making it easy to scan. A minor improvement would be to mention the output format once at the start, which it already does.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with two parameters and no output schema, the description is fairly complete. It explains the purpose, output format, and both parameters. It does not explicitly cover error conditions or prerequisites (e.g., the project must be indexed), but these are not critical for basic usage and are likely implied by the context of the codegraph system.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, so the description must compensate. It does so by explaining each parameter: 'project: Project name (e.g. "my-app")' and 'limit: Maximum number of top files to include (default 20)'. It adds examples and semantic meaning, although it leaves some ambiguity about 'most important' and how the limit is applied.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Generate a YAML-formatted repository map showing the most important files and their symbols.' It specifies the verb 'Generate', the resource 'repository map', and the output format (YAML). This distinguishes it from siblings like codegraph_query and codegraph_explain, which focus on querying or explaining code.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides usage context: 'Helps understand the global structure of a project without reading all files.' This gives a clear scenario for when to use the tool. However, it does not explicitly mention when NOT to use it or contrast with alternative tools, which is a minor gap.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

codegraph_sharedA

Packages shared across multiple projects in the code graph.

Returns list of packages with the projects that depend on them, sorted by number of projects (most shared first). Useful for finding common dependencies and potential shared infrastructure.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses key behavioral traits: returns a list, includes dependent projects, and sorts by number of projects (most shared first). It does not describe side effects, but the nature ('Returns') implies a read-only query. Minor gaps like pagination or error handling are not critical for a zero-parameter tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loaded: it opens with the core purpose ('Packages shared...') and then explains the output and sorting. Every sentence adds value, and there is no filler. It is appropriately sized for a simple tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (no parameters, no annotations) and the presence of an output schema, the description covers the essential information: what it returns, the ordering, and a use case. It does not explain what constitutes a 'package' or a 'project,' but these are likely defined elsewhere in the code graph context. Overall, it is sufficiently complete for an agent to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are zero parameters, so the schema coverage is 100% by default. The baseline for zero parameters is 4, and the description offers no parameter details because none exist. This score reflects that there is nothing to explain and the description is not lacking in this area.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific resource ('packages shared across multiple projects') and the action ('Returns list...'). It is distinct from siblings like codegraph_stats or codegraph_query by focusing on shared dependencies across projects. The wording is unambiguous and directly conveys what the tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit context for when to use the tool: 'Useful for finding common dependencies and potential shared infrastructure.' This gives clear use-case guidance. However, it does not explicitly mention when not to use it or name alternative tools, so it falls short of the highest score for explicit exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

codegraph_statsA

Get code intelligence graph statistics.

Returns counts of projects, files, symbols, packages, sessions, and edge type breakdown.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

There are no annotations, so the description carries the full burden. It discloses that the tool returns statistics and counts, which implicitly indicates a read-only aggregation, but it does not explicitly state the absence of side effects, potential resource costs, or any error behavior. For a simple stats tool, this is adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences: the first front-loads the core purpose, the second enumerates the returned metrics. Every word earns its place; no fluff or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a no-argument statistics tool with no output schema, the description is complete: it lists the exact categories of counts returned. An agent can predict the shape and intent of the call without needing extra context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so schema coverage is trivially 100%. Baseline for 0 parameters is 4; there is no parameter information needed beyond what is already empty.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('Get') and a concrete resource ('code intelligence graph statistics'), then enumerates exactly what is returned (counts of projects, files, symbols, packages, sessions, edge type breakdown). This clearly distinguishes it from sibling tools like codegraph_query or codegraph_repomap, which target different purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage — if an agent needs aggregate counts or a breakdown of graph elements, this is the tool — but it does not explicitly state when to use it over alternatives or mention any exclusions. No sibling differentiation is provided in the text.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

project_code_reindexA

Reindex a project's source code and docs into FalkorDB vectors.

Call this after significant code changes to update the search index. Uses sentence-transformers backend (safe for memory).

Args: project: Project name or path (e.g. "my-app", "~/projects/my-app")

ParametersJSON Schema
NameRequiredDescriptionDefault
projectYes

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It does disclose the backend ('sentence-transformers'), notes that it is memory-safe, and implies an index mutation. However, it does not state whether existing vectors are replaced or cleared, whether the operation is expensive or blocking, or what permissions are needed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-structured: a one-sentence purpose, a clear when-to-use instruction, a useful safety/backend note, and a simple Args section. Every sentence earns its place, and key information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter tool, this is mostly adequate, but significant gaps remain because there are no annotations and no output schema. The description does not mention return values, the cost or duration of reindexing, whether the operation overwrites the existing index, or how to handle partial failures. These are relevant for a mutating indexing tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter, 'project', is described as 'Project name or path' with concrete examples ('my-app', '~/projects/my-app'). With 0% schema description coverage, this fully compensates for the missing schema-level detail and adds real meaning beyond the parameter's title.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Reindex'), a specific resource ('a project's source code and docs'), and a clear target ('FalkorDB vectors'). It clearly differentiates this tool from sibling search/query tools by framing it as the index-updating operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a clear usage condition: 'Call this after significant code changes to update the search index.' It does not explicitly name alternatives or exclusions, but the context is clear enough for an agent to know when to select this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

project_infoA

Get project information from the registry.

Without name: returns list of all active projects with stacks. With name: returns detailed info for one project.

Args: name: Project name (e.g. "my-app"). Omit for full list.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description shoulders the full burden of disclosing behavior. It does describe the two return modes (list vs. detail) and implies a read-only operation, but it does not explicitly confirm safety, mention error handling (e.g., what happens if the name does not exist), or note any side effects or authentication requirements. The description adds some behavioral detail but is not comprehensive for an unannotated tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is highly concise, front-loading the core purpose and then clearly delineating the two modes before listing the argument. Every sentence contributes value, with no filler. The structure is optimal for quick agent scanning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the low complexity (single optional parameter) and the presence of an output schema (which handles return value documentation), the description covers the essential calling context: what the tool does and how the parameter alters the result. It could go further by noting expected error behavior or clarifying what 'active projects' means, but overall it is sufficient for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema only defines an optional 'name' field with a default null and anyOf string/null, providing no semantic meaning. The description compensates by explaining that omitting the name returns a list of all projects, while including it returns detailed info for one named project. This adds significant behavioral meaning beyond the raw schema, effectively covering the parameter's semantics despite 0% schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves project information from a registry, with two explicit modes: listing all active projects (with stacks) when no name is given, and returning detailed info for a specific project when a name is provided. This is a specific verb-resource pairing. However, it does not differentiate itself from sibling tools like source_list or project_code_search, which could overlap in purpose or context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when to omit the name (to get a full list) versus when to provide it (to get a single project's details), which is clear self-usage guidance. However, it does not explicitly tell the agent when to choose this tool over siblings, nor does it mention any exclusion criteria or alternatives. The guidance is contextually clear but lacks cross-tool comparison.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

source_listA

List indexed external sources with document counts.

Shows all source graphs under ~/.solo/sources/ with their sizes. YouTube sources include video/chunk breakdown (videos, video_chunks fields).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the disclosure burden. It adds useful behavioral context beyond the title: the storage location (~/.solo/sources/), that sizes are shown, and that YouTube sources include a videos/video_chunks breakdown. The verb 'List' strongly implies a read-only operation, though it does not explicitly state side-effect safety.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three short sentences with no filler. The opening sentence gives the primary purpose, and the following sentences add specific and relevant details about location, sizes, and YouTube-specific fields. It is front-loaded and every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a no-argument list tool with an output schema present, the description is complete: it states what is listed, where the data comes from, what measurements are included, and the special case for YouTube sources. No additional context appears necessary for an agent to select and invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has zero parameters and schema coverage is 100%, so there is no parameter documentation burden. The 0-parameter baseline of 4 applies; the description adds no parameter meaning because none is needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('List') and resource ('indexed external sources') and adds a document-count detail. It further clarifies scope by specifying all source graphs under ~/.solo/sources/, which distinguishes it from sibling tools like source_search, source_tags, and source_related as a global enumeration rather than a filtered query.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use when an overview of all indexed sources and their sizes/document counts is needed, but it does not explicitly say when not to use it or name alternatives. There is no explicit routing guidance against sibling tools, so the agent must infer the usage boundary from the word 'List' and the scope detail.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

source_tagsB

List all auto-detected topics with video counts.

Tags are assigned automatically via zero-shot embedding similarity during video indexing. Shared across videos — enables topic clustering.

Args: source: Source name (default: "youtube")

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceNoyoutube

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry behavioral disclosure. It adds useful context: tags are assigned automatically via zero-shot embedding similarity during video indexing, and are shared across videos. However, it does not clarify whether the operation is strictly read-only, how counts are computed, or any caveats such as staleness or re-indexing effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the main purpose, followed by relevant mechanism context and a parameter note. Every sentence adds value and there is no redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple, and the output schema presumably covers return values. Yet the description leaves a notable gap: it does not tell the agent how to obtain valid source names or that source_list might need to be called first, and it omits any mention of pagination or limits. Overall it is adequate but not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for the undocumented 'source' parameter. It merely restates 'Source name (default: "youtube")', which adds little beyond the schema's title and default. It does not provide valid source examples, format constraints, or how source affects the returned tags.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific action and resource: 'List all auto-detected topics with video counts.' It is unambiguous and distinct from siblings like source_list or source_search, but does not explicitly name or differentiate itself from them, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage through context: tags are auto-detected, shared across videos, and enable topic clustering. However, there is no explicit guidance on when to choose source_tags over sibling tools or any exclusions, leaving the agent to infer the appropriate context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

web_fetchA

Fetch a URL with browser-like headers to bypass basic bot protection.

Returns page content as plain text (HTML tags stripped) or raw HTML. Handles redirects, cookies, and common anti-bot headers automatically.

Args: url: URL to fetch max_length: Max content length in chars (default 20000) extract_text: Strip HTML tags and return plain text (default true) timeout: Request timeout in seconds (default 30)

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes
timeoutNo
max_lengthNo
extract_textNo

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral disclosure. It reveals automatic handling of redirects, cookies, and anti-bot headers, and explains the dual output modes (plain text vs raw HTML). It stops short of describing failure modes or JavaScript-rendering limitations, but the core runtime behaviors are transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well organized: one sentence for the core purpose and behavior, another for return types, then a minimal Args list. Every sentence contributes meaningful information with no fluff or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple fetch tool with four parameters and no output schema, the description covers the essential aspects: what it fetches, how it behaves, return types, and all parameters with defaults. It doesn't mention error handling or non-HTML responses, but those are minor omissions given the straightforward use case and sibling context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The Args section adds meaningful semantics to every parameter: url, max_length (in chars), extract_text (strip HTML), and timeout (in seconds) with defaults. This fully compensates for the 0% schema description coverage, giving the agent a complete understanding beyond bare parameter names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description begins with a specific verb and resource — 'Fetch a URL' — and immediately adds distinctive behavior ('with browser-like headers to bypass basic bot protection'). It clearly distinguishes this tool from the source-code-oriented sibling tools by domain and use case.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies when to use the tool: when needing to retrieve web content, especially when basic bot protection may interfere. It doesn't explicitly mention when not to use it or name alternative tools, but among the listed siblings there is no competing fetch tool, so the intended context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 15 tool updatesv0.6.0
    • First observedcodegraph_explain
    • First observedcodegraph_query
    • First observedcodegraph_repomap
    • First observedcodegraph_shared
    • First observedcodegraph_stats
    • First observedkb_search
    • First observedproject_code_reindex
    • First observedproject_code_search
    • First observedproject_info
    • First observedsession_search
    • First observedsource_list
    • First observedsource_related
    • First observedsource_search
    • First observedsource_tags
    • First observedweb_fetch

TDQS

A3.9/5.0
Disambiguation5/5

Each tool targets a distinct resource and operation: codegraph stats/query/explain/repomap/shared, source list/search/tags/related, kb_search vs project_code_search vs session_search clearly separated by domain, project_info, web_fetch, and project_code_reindex. No two tools appear to do the same thing.

Naming Consistency4/5

Most tools follow a clear prefix_descriptive pattern (codegraph_, source_, kb_, session_, project_, web_) with snake_case. Some descriptors are nouns or adjectives (repomap, shared, tags, related) rather than verbs, but the pattern is predictable and uniform in style.

Tool Count5/5

15 tools is well within the optimal range for a server with this scope. Each tool serves a distinct purpose, covering stats, search, querying, and metadata across multiple knowledge domains without unnecessary bloat or missing essentials.

Completeness4/5

The server covers core read and query operations for code graphs, knowledge bases, sessions, external sources, and project metadata. It includes reindexing for code search, but lacks explicit create/update/delete operations—appropriate for a read-oriented server. Minor gaps exist (e.g., no direct session listing), but agents can work around them via search and query tools.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP server enabling symbol-aware semantic search in Claude Code, allowing precise location of functions, types, and implementations via a symbol graph and embeddings.
    9
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Local MCP server that provides semantic search (RAG) over code repositories, enabling AI clients like Claude and Gemini to access project context without manual re-upload.
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    MCP server providing RAG context and failure capture for Claude Code, enabling semantic search across project knowledge and storing/analyzing failures.
    1
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    MCP server for local-first code intelligence, providing structural code graph, semantic search, and impact analysis to AI agents.
    2
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/fortunto2/solograph'

If you have feedback or need assistance with the MCP directory API, please join our Discord server