codecanvas-mcp
CodeCanvas MCP
Разберитесь в незнакомой Python-системе, прежде чем тратить тысячи токенов, читая её файл за файлом.
CodeCanvas — это локальный сервер статического анализа для Model Context Protocol на Python. Он превращает общепроектные пути вызовов и поток управления в компактные, готовые к цитированию ответы о ветвлениях, вызывающих функциях, вызываемых функциях, побочных эффектах и влиянии изменений.
Бенчмарк теперь охватывает зафиксированные версии Google ADK, LangGraph и FastAPI. На Apple M4 Pro измеренное число холодных запусков варьировалось от 4.38s до 61.62s, а медианная задержка тёплого поиска find_symbols — от 48.264ms до 293.778ms в этих репозиториях. В контролируемом наборе из 54 сессий агента в обоих случаях оставались одни и те же встроенные инструменты поиска по коду; в экспериментальный вариант добавлялся только logic_flow. Это единственное добавление сократило среднее 22.95% общего количества токенов на три пары повторных запусков, что демонстрирует ощутимую дополнительную ценность в дополнение к обычному исследованию кода. Количество некэшированных токенов выросло на 0.78%, и ответы ещё не проверялись вслепую. См. методологию, полные таблицы и ограничения.
Используйте его для ответов на такие вопросы:
Кто вызывает эту функцию напрямую или транзитивно?
Чего может достичь эта функция и где происходят побочные эффекты?
При каких защитных условиях может произойти этот возврат или исключение?
Действительно ли этот источник достигает той цели в запрошенном режиме?
Какие API-маршруты, скрипты или публичные экспорты затрагивает diff?
CodeCanvas работает только с Python и требует Python 3.10 или новее.
Посмотрите разницу
Задайте один вопрос:
Use logic_flow on UserService.update_user. Show its branches, outcomes,
downstream effects, and evidence quality.Фрагмент реального ответа для включённого примера FastAPI:
{
"function": "app.services.user_service.UserService.update_user",
"source": "app/services/user_service.py:13",
"flow": [
"15 user = await self.user_repo.find_by_id(...)",
"16 if user is None:",
"17 → return None",
"18 → return await self.user_repo.update(user_id, user)"
],
"outcomes": [
{"at": 17, "detail": "None", "guards": ["user is None"]},
{"at": 18, "detail": "await self.user_repo.update(user_id, user)", "guards": []}
],
"downstream": [
{
"function": "app.repositories.user_repo.UserRepository.find_by_id",
"location": "app/repositories/user_repo.py:13",
"effects": ["db"]
},
{
"function": "app.repositories.user_repo.UserRepository.update",
"location": "app/repositories/user_repo.py:18",
"effects": ["db"]
}
],
"evidence_grade": "inferred",
"safe_to_summarize": false,
"response_guidance": "Do not turn inferred call edges into unconditional claims."
}Этот единственный ответ показывает ранний возврат, путь успеха, нижестоящую работу с базой данных, точные места в исходном коде и то, насколько осторожно агент может обобщить результат.
Related MCP server: python-mcp-server
Быстрый старт
Установите uv, если uvx ещё не доступен. Репозиторий содержит один общий пакет плагинов с нативными манифестами как для Claude Code, так и для Codex. Установите его из маркетплейса CodeCanvas:
# Claude Code
claude plugin marketplace add donggyun112/codecanvas
claude plugin install codecanvas@codecanvas
# Codex
codex plugin marketplace add donggyun112/codecanvas
codex plugin add codecanvas@codecanvasОба плагина запускают uvx codecanvas-mcp и предоставляют полный каталог инструментов. Руководство по локальному тестированию и команды проверки — в пакете плагина.
Если ваш клиент не поддерживает плагины, зарегистрируйте сервер напрямую. Для Claude Code:
claude mcp add codecanvas -- uvx codecanvas-mcpЭта команда открывает полный каталог инструментов. Оставляйте полный каталог включённым, когда ваш MCP-клиент поддерживает обнаружение инструментов по запросу или поиск инструментов: клиент может загружать нужные схемы только тогда, когда они нужны, поэтому остальные инструменты CodeCanvas остаются доступными, что не уплачивает стоимость их схем при каждом модельном запросе.
[mcp_servers.codecanvas]
command = "uvx"
args = ["codecanvas-mcp"]Если ваш клиент принудительно внедряет схемы всех включённых инструментов в каждый модельный запрос, используйте этот совместимый профиль:
[mcp_servers.codecanvas]
command = "uvx"
args = ["codecanvas-mcp"]
enabled_tools = ["logic_flow", "who_calls", "call_tree"]Разрешённый список из трёх инструментов — это з любой вариант для клиентов, принудительно внедряющих схемы, а не рекомендация отказываться от остального CodeCanvas. Для другого MCP-клиента используйте эквивалентную конфигурацию stdio:
{
"mcpServers": {
"codecanvas": {
"command": "uvx",
"args": ["codecanvas-mcp"]
}
}
}Передайте абсолютный project_path в первом вызове инструмента. CodeCanvas запоминает последний явно выбранный проект на всё время оставшейся работы сессии сервера.
При включённом полном каталоге project_status сообщает о кандидатных корнях анализа для вложенных Python-проектов. Пользователям компактного профиля следует явно передавать нужный вложенный корень.
Научите агента использовать свои инструменты
Добавление инструментов не гарантирует, что агент выберет их в нужное время. Поместите краткую инструкцию вроде такой в AGENTS.md, CLAUDE.md или в эквивалентный файл, используемый вашим агентом разработки:
## Code analysis
Use CodeCanvas before text search when you need to know:
- how a Python function branches, returns, and produces side effects;
- who calls it directly or transitively;
- what it reaches downstream through project-internal calls.
Pass `project_path` once, then reuse the active project. Treat
`safe_to_summarize: false`, inferred edges, ambiguity, and truncation as
qualifications rather than unconditional facts.
Start with `logic_flow`. Use `who_calls` for upstream impact and `call_tree`
for a deeper downstream trace.Затем задайте своему агенту обычный вопрос:
Use logic_flow first to understand checkout without repeated source searches.
What calls UserService.update_user, up to three hops?
What does checkout reach downstream, including HTTP or database effects?При включённом полном каталоге CodeCanvas может также отвечать:
List the entrypoints in this project.
Under exactly what conditions can authenticate raise?
Verify that dry-run publish reaches _call_api.
Analyze the impact of the current diff.Почему не просто grep или LSP?
CodeCanvas взаимодополняет оба инструмента. Он предназначен для обогащенных вопросов о поведении, которые в противном случае требуют многократных поисков и ручного восстановления.
Часть потребности | grep | LSP | CodeCanvas |
Точный текст | Наилучшее соответствие | Не его задача | Продолжайте использовать grep |
Определения и прямые ссылки | Вручную | Наилучшее соответствие | Разрешает символы внутри структурных результатов |
Транзитивные вызывающие и callee | Многократные ручные переходы | Ссылки — не путь вызова | Ограниченные графы вверх и вниз по потоку |
Guard ветвлений и их исходы | Читать и реконструировать | Обычно не моделируется | Структурированный поток и guard'рованные возвраты/исключения |
Побочные эффекты и влияние изменений | Вывести вручную | Обычно не моделируются | Эффекты, атрибутируемые по путям вызовов и точкам входа |
Неуверенность | Нет модели уверенности | Зависит от разрешения | Уровень достовер, неоднозначность, усечений и руководство |
Что делает ответы заслуживающими доверия
Статический анализ не является истиной времени исполнения, поэтому CodeCanvas делает неопределённость видимой, а не скрывает её.
Каждый успешный ответ MCP указывает выбранный analysis_root и включает метаданные, которые помогают агенту решить, насколько сильно он может заявлять результат:
evidence_gradeсообщает о прочности установленных доказательств.inferred_edge_countиambiguous_callsпоказывают неопределённые рёбра вызовов.truncatedговорит, содержит ли ограниченный ответ усечённые результаты.safe_to_summarizeговорит, поддерживает ли результат безоговорочную проверку.response_guidanceобъясняет, как оговорочно сформулировать результат, не поддерживающий её.
verify_claim идёт дальше, комбинируя пути вызовов из кандидатов с guard-условиями ветвей и возвратов/исключений. Она возвращает true, false или uncertain; неподдержанные уточняющие слова и только предполагаемые пути не могут незаметно стать определённым true.
Инструменты
Обнаружение и понимание
Инструмент | Назначение |
| Посмотреть активный корень, количество Python-файлов, кэш, интерпретатор и кандидатов вложенных проектов |
| Найти маршруты FastAPI, скрипты, входы функций и экспортируемые члены распределённых библиотек |
| Найти функции, методы и классы с точным совпадением имени, семантическим или гибридным поиском |
| Полу одно компактное, готовое к цитированию представление ветвей, исходов, последующих вызовов и эффектов |
| Быстрое триархирование функции по её сигнатуре, документации, вызовам, эффектам, исключениям и рискам |
| Просмотр структурированного дерева ветвления с субъектами, условиями областями и вложенностью |
| Получение объемлющих guard-условий каждого возврата и исключения, а также сложности и не недостижимого кода |
Отследи поведения и оценить изменения
Инструмент | Назначение |
| Обход прямых или транзитивных вызывающих вверх по потоку |
| Обойти внутренные вызываемые ниже по потоку и атрибутивно assign прямые/транзитивные эффекты |
| Консервативно проверить достаточно ли |
| Сопоставить inline diff или git ref с изменёнными функциями и затронутыми точками входа/public лекарствами |
Воспроизведение ошибок, формируемых состоянием
Инструмент | Назначение |
| Сравнивает операции чтения, записи состояния и сопоставления возвращаемых результатов с выданной схемной схемой |
| Исполняет сфокусированные сгенерированные или явные случаи состояния с инвариантами и переопределением зависимостей |
Большие наборы результатов ограничивать. Используйте аргументы filter, kind, path, depth или пагинацию для сужения ответа каждым инструментом, прежде чем считать её полной.
Как это работает
Выбейте проект. CodeCanvas находит и запоминает явный корень Python-проекта. Неоднозначные вложенные корни необходимо указывать, а не угадывать.
Постройте структурные индексы. Анализ AST для Python строит общепроектный граф вызовов и данные потока управления по каждой функции. Дополнительные экстракторы добавляют маршрутное FastAPI и цепочки
Depends(), скрипты, обычные входные точки functions и экспорты пакетов.Переиспользуйте совместимый анализ. Граф вызовов и точки входа кэшируются в
<project>/.codecanvas/; внутрипроцессный построитель переиспользуется в течение сессии MCP.Формируйте компактные ответы. Каждый инструмент MCP запрашивает общий анализ и возвращает органиченные результаты с информацией или происхождением, достоверностью, неоднозначностью и признакам усечения.
Стандартный лимит анализа — 5,000 файлов Python. Настройте работу для крупных проектов с помощью:
Переменная | По умолч. | Описание |
|
| Максимальное число анализируемых Python-файлов |
|
| Файлов до перед передачей результатов |
|
| Задержка между запусками в миллисекундах |
Безопасность и ограничения
CodeCanvas анализирует исходный код Python; он не осознаёт все возможные динамические импорты, подмену интерпретации (monkey patch), рефлексию и значения времени выполнения.
Инференцированные и не однозначные рёбра докладываются как ограничения, а не определяются как определённые доказательства.
Недотрук от средства анализа читает файлы проекта и записывает локальный кэш
.codecanvas/. Внешний сервис CodeCanvas не требуется.simulate_state_transitionотличается: он импортирует и исполняет доверенный код проекта в отдельном процессе. Это изоляция для экспериментов, но не песочница безопасности. Код проекта всё ещё может взаимодействовать с файловой системой, сетью и подпрорестами/вызывать подпроцессы, а также может иметь побочные эффекты времени импорта.Симулятор предпочитает
<project>/.venvилиvenv, затем те же каталоги в головном проекте. Используйтеpython_executableдля явного выбора и проверьте возвращаемую метаданныеworker, когда импорт не сработает.
Данные о производительности
Измерительная локальная latency-множество покрывает три зафиксированных проекта, в которых 148–1 650 Python-файлов и 4 468–16 960 проиндексированных функций. Она сообщает время холодного анализа, первого и «тёплого» поиска, получает пропускную способность восьми наборщиками "worker" и содержит "сырые" результаты в репозитории с бенчмарк-артефактами.
Модельная оценка охватывает замороженные задачи и скрытые рубрики для Google ADK, LangGraph и FastAPI. В ней сравнивается встроенное исследование кода вместе с logic_flow против того же встроенного исследования по отдельности. В 54 изолированных сеансах три парных повтора дали медианное по всему набору сокращение общего числа токенов по данным сервера на 22,95%. Все 27 экспериментальных сеансов выполнили требуемый вызов инструмента, что служит прямым свидетельством того, что один инструмент CodeCanvas добавляет значимую ценность, не заменяя существующие поисковые инструменты агента. Некэшированный ввод и вывод при этом выросли на медианные 0,78%, и ответы ещё не оценивались вслепую, так что это пока не является утверждением об эффективности при равном качестве или о биллинговой стоимости.
См. полную методологию, таблицы результатов, команды для воспроизведения и артефакты аудита.
Разработка
git clone https://github.com/donggyun112/codecanvas.git
cd codecanvas/core
uv sync --extra dev
cd ..
core/.venv/bin/python -m pytestИсходный код пакета находится в core/. Корневая конфигурация тестов запускает и тесты продукта в tests/, и тесты уровня пакета в core/tests/.
Приветствуются сообщения об ошибках и целенаправленные сценарии воспроизведения: https://github.com/donggyun112/codecanvas/issues.
Лицензия
CodeCanvas MCP — это программное обеспечение с открытым исходным кодом, распространяемое по лицензии MIT License.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceEnables AI coding agents to efficiently navigate and understand large codebases by providing tools for entry point location, call chain analysis, and impact assessment, reducing context consumption and model costs.3GPL 3.0
- AlicenseNot gradedqualityCmaintenanceEnables deterministic static analysis of Python code, providing tools to inspect classes, functions, imports, dependencies, and more, without executing the code.1MIT
- AlicenseNot gradedqualityBmaintenanceExposes codebase memory as native tools for AI agents, enabling queries, feature tracing, impact analysis, and alignment verification.3AGPL 3.0
- AlicenseNot gradedqualityAmaintenanceProvides a dependency graph of any local repository with tools for change impact, transitive dependents, health audits, and more, enabling AI coding agents to see structure and refactor safely.4,9124MIT
Related MCP Connectors
Deterministic context layer for your codebase: change impact, blast radius, answers with receipts.
Code intelligence for coding agents: semantic, AST, graph, and full-text search. 279+ languages.
AI Agent with Architectural Memory. Impact analysis (free), tests and code from the graph (pro).
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/donggyun112/codecanvas'
If you have feedback or need assistance with the MCP directory API, please join our Discord server