Code intelligence MCP server for AI-assisted development — impact analysis, semantic search, and dependency graphs
Project description
Flyto Indexer
Code intelligence MCP server for AI-assisted development
Impact analysis • Smart code search • Dependency graphs • Dead code detection
Works with Claude Code, Cursor, Windsurf, and any MCP client
"What breaks if I change this?" — Every developer asks this. Flyto Indexer answers it.
It indexes your codebase, understands symbol relationships, and exposes 23 MCP tools that give any AI assistant deep code intelligence — impact analysis, reference finding, dependency tracking, and more.
Zero dependencies. Pure Python standard library. Runs locally. No code leaves your machine.
Quick Start
Option A: Install from PyPI
pip install flyto-indexer
# Index your project (creates .flyto-index/)
flyto-index scan /path/to/your/project
# Start MCP server
python -m flyto_indexer.mcp_server
Option B: Run from source
git clone https://github.com/flytohub/flyto-indexer.git
cd flyto-indexer
pip install -e .
# Index your project
flyto-index scan /path/to/your/project
# Start MCP server (from repo)
python -m src.mcp_server
Tip: Add
.flyto-index/to your.gitignore. The index is typically a few MB for medium projects.
Connect to Claude Code
Add to ~/.claude/settings.json:
{
"mcpServers": {
"flyto-indexer": {
"command": "python3",
"args": ["-m", "flyto_indexer.mcp_server"]
}
}
}
Running from source instead?
{
"mcpServers": {
"flyto-indexer": {
"command": "python3",
"args": ["-m", "src.mcp_server"],
"cwd": "/path/to/flyto-indexer"
}
}
}
That's it. Claude Code now has access to all 23 tools.
Why This Exists
AI coding assistants are powerful, but they're flying blind:
- They don't know what breaks when they change a function
- They can't trace dependencies across files or projects
- They have no idea which code is dead and safe to remove
- They can't assess the risk of a proposed change
Flyto Indexer gives AI the structural understanding it needs to make safe, informed changes.
See It In Action
You: "Rename validateOrder to validate_order — what breaks?"
Claude: Let me check the impact first.
→ impact_analysis("myproject:src/validators.py:function:validateOrder")
→ find_references("validateOrder")
⚠️ Modifying validateOrder affects 5 locations:
→ Cart.vue:42 — calls validateOrder() directly
→ CheckoutAPI.py:18 — imports validateOrder
→ test_validators.py:55 — tests validateOrder
Risk: MEDIUM — 3 files, 2 projects
I'll rename all call sites and update the tests.
→ edit_impact_preview("validateOrder", change_type="rename")
What It Does
Impact Analysis
> "What happens if I change the checkout() function?"
⚠️ Modifying checkout() affects:
→ Cart.vue (direct caller)
→ QuickBuy.vue (calls via useCart)
→ /api/checkout (API endpoint)
Risk: MEDIUM — 3 files affected, no breaking changes detected
Smart Code Search
Search uses symbol-aware ranking with metadata matching — no embeddings or external services required.
> search_code("authentication")
1. src/composables/useAuth.ts — Auth state management, login/logout, JWT tokens
2. src/api/auth.py — Authentication API endpoints, rate limiting
3. src/middleware/auth.ts — Route guards, token validation
Dependency Graph
> dependency_graph("src/composables/useCart.ts")
useCart.ts
├── imports: useAuth, usePayment, cartApi
└── depended on by: Cart.vue, QuickBuy.vue, CartSidebar.vue
Cross-Project Tracking
> cross_project_impact("validateOrder")
Defined in: backend/src/validators.py
Used by:
→ frontend (3 references)
→ mobile-app (1 reference)
→ admin-panel (2 references)
Risk: HIGH — changes affect 3 other projects
MCP Tools
23 tools organized by category. Start with these 6:
| Tool | What it does |
|---|---|
impact_analysis |
"What breaks if I change this?" |
find_references |
"Who calls this function?" |
search_code |
"Where is the auth code?" |
dependency_graph |
"What does this file depend on?" |
get_symbol_content |
"Show me the full function" |
find_dead_code |
"What can I safely delete?" |
All 23 tools
Code Search & Discovery
| Tool | Description |
|---|---|
search_code |
Symbol-aware search across all indexed projects |
get_symbol_content |
Get full source code of a function/class |
get_file_symbols |
List all symbols defined in a file |
get_file_info |
Get file purpose, category, keywords, dependencies |
fulltext_search |
Search inside comments, strings, and TODO markers |
Impact & Dependencies
| Tool | Description |
|---|---|
impact_analysis |
Analyze blast radius of modifying a symbol |
find_references |
Find all callers and importers of a symbol |
dependency_graph |
Show import chains and dependent relationships |
cross_project_impact |
Track API usage across multiple projects |
edit_impact_preview |
Preview impact before renaming, deleting, or changing signatures |
Project Overview
| Tool | Description |
|---|---|
list_projects |
List all indexed projects with statistics |
list_categories |
Show code categories (auth, payment, etc.) |
list_apis |
List all API endpoints found in code |
check_index_status |
Check if the index is up-to-date |
Code Quality
| Tool | Description |
|---|---|
find_dead_code |
Detect unreferenced functions, classes, and components |
find_todos |
Find TODO, FIXME, HACK markers across the codebase |
File Context
| Tool | Description |
|---|---|
get_file_context |
Complete context package for a file (info + symbols + deps) |
find_test_file |
Find the test file for a source file (or vice versa) |
get_description |
Get the semantic one-liner for a file |
update_description |
Write or update a file description |
Session & Indexing
| Tool | Description |
|---|---|
session_track |
Track workspace events for search boosting |
session_get |
Inspect current session state |
check_and_reindex |
Detect file changes and trigger re-indexing |
Supported Languages
| Language | Parser | Symbols Extracted |
|---|---|---|
| Python | AST | Functions, classes, methods, decorators |
| TypeScript/JavaScript | Custom parser | Functions, classes, interfaces, types, exports |
| Vue | SFC parser | Components, composables, emits, props |
| Go | Custom parser | Functions, structs, methods, interfaces |
| Rust | Custom parser | Functions, structs, impl blocks, traits |
| Java | Custom parser | Classes, methods, interfaces, annotations |
Architecture
your-project/
├── src/ ← Your code (any language)
└── .flyto-index/ ← Generated index (add to .gitignore)
├── index.json.gz # Symbol index (compressed)
├── content.jsonl # Source code content (lazy-loaded)
├── PROJECT_MAP.json.gz # File metadata
└── workspace_manifest.json # Incremental tracking
How It Works
- Scan — AST parsers extract symbols (functions, classes, components) from your code
- Index — Symbols are organized into a searchable index with dependency relationships
- Serve — The MCP server exposes 23 tools that any AI client can call
- Incremental — Only changed files are re-scanned (tracked via content hashes)
Key Concepts
Symbol ID — Every symbol has a unique, stable identifier:
project:path:type:name
─────── ──── ──── ────
│ │ │ └── Symbol name
│ │ └── function, class, method, component, composable
│ └── File path relative to project root
└── Project name
Depth Levels — Progressive detail:
- L0 — Project outline (directory tree + one-liner per file)
- L1 — File summary (exports, imports, main functionality)
- L2 — Code chunks (only the specific symbols you need)
HTTP API
For editors and tools that don't support MCP, there's a local REST API. This runs on your machine — no data is sent externally.
# Start the local HTTP server
python -m src.api_server --port 8765
# Search
curl -X POST http://localhost:8765/search \
-H "Content-Type: application/json" \
-d '{"query": "authentication"}'
# Impact analysis
curl -X POST http://localhost:8765/impact \
-H "Content-Type: application/json" \
-d '{"symbol_id": "myproject:src/auth.py:function:login"}'
| Endpoint | Method | Description |
|---|---|---|
/search |
POST | Keyword search |
/file/info |
POST | File metadata |
/file/symbols |
POST | List file symbols |
/impact |
POST | Impact analysis |
/categories |
GET | List categories |
/apis |
GET | List API endpoints |
/stats |
GET | Index statistics |
/openapi.json |
GET | OpenAPI spec |
/health |
GET | Health check |
Integrations
- Claude Code — MCP server (native)
- Cursor — HTTP API + .cursorrules
- VSCode / Copilot — Tasks + Extension
- OpenAI GPTs — HTTP API + OpenAPI schema
CLI
# Scan and index a project
flyto-index scan /path/to/project
# Check what changed since last index
flyto-index status /path/to/project
# Analyze impact of changing a symbol
flyto-index impact myproject:src/auth.py:function:login
# Generate project outline (L0)
flyto-index brief /path/to/project
# Annotate file purposes
flyto-index describe /path/to/project
CI/CD Integration
# .github/workflows/index.yml
on:
push:
branches: [main, develop]
jobs:
index:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: pip install flyto-indexer
- run: flyto-index scan . --incremental
Security & Privacy
- Runs 100% locally. No code is sent to any external service.
- Index stored under
.flyto-index/in your project directory. - Clean up by deleting
.flyto-index/— there's no hidden state elsewhere.
Limitations
- Static analysis only — dynamic imports, metaprogramming, and runtime-generated code are not tracked.
- No type inference — TypeScript type-level computations and complex generics are simplified.
- Vue
<script setup>— most patterns are supported, but some edge cases with dynamicdefinePropsmay be missed. - Cross-project tracking requires all projects to be indexed in the same workspace.
Contributing
See CONTRIBUTING.md for guidelines.
License
MIT — Use it however you want.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file flyto_indexer-1.0.2.tar.gz.
File metadata
- Download URL: flyto_indexer-1.0.2.tar.gz
- Upload date:
- Size: 116.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3134157b12b60c5122d8d4e84c0c6b59230f99e00beeecf0996e24f95d38887b
|
|
| MD5 |
20fede8f6c268eb9f7eab99e4336fbb8
|
|
| BLAKE2b-256 |
44be7c92bee4e4580cdf5dd2d137eebd4861673c1eb557e40ae6f52e15ec02fb
|
File details
Details for the file flyto_indexer-1.0.2-py3-none-any.whl.
File metadata
- Download URL: flyto_indexer-1.0.2-py3-none-any.whl
- Upload date:
- Size: 143.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
608400f05d82f2a26d8d752cd5c8174976aef9b900e93bca0f3e22af393bbb0c
|
|
| MD5 |
db970af48370d1934aa50d7de7982f23
|
|
| BLAKE2b-256 |
ea2807eacf4828db4863cf532e75e0de2492b89711e21281d3133eb478baa8ca
|