Skip to main content
Glama
donggyun112

codecanvas-mcp

by donggyun112

CodeCanvas MCP

PyPI Python Лицензия: MIT

Разберитесь в незнакомой 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.

Инструменты

Обнаружение и понимание

Инструмент

Назначение

project_status

Посмотреть активный корень, количество Python-файлов, кэш, интерпретатор и кандидатов вложенных проектов

list_entrypoints

Найти маршруты FastAPI, скрипты, входы функций и экспортируемые члены распределённых библиотек

find_functions

Найти функции, методы и классы с точным совпадением имени, семантическим или гибридным поиском

logic_flow

Полу одно компактное, готовое к цитированию представление ветвей, исходов, последующих вызовов и эффектов

what_does

Быстрое триархирование функции по её сигнатуре, документации, вызовам, эффектам, исключениям и рискам

function_flow

Просмотр структурированного дерева ветвления с субъектами, условиями областями и вложенностью

reaching_conditions

Получение объемлющих guard-условий каждого возврата и исключения, а также сложности и не недостижимого кода

Отследи поведения и оценить изменения

Инструмент

Назначение

who_calls

Обход прямых или транзитивных вызывающих вверх по потоку

call_tree

Обойти внутренные вызываемые ниже по потоку и атрибутивно assign прямые/транзитивные эффекты

verify_claim

Консервативно проверить достаточно ли source reaches target с учётом путей и guard-жести

check_impact

Сопоставить inline diff или git ref с изменёнными функциями и затронутыми точками входа/public лекарствами

Воспроизведение ошибок, формируемых состоянием

Инструмент

Назначение

validate_state_schema

Сравнивает операции чтения, записи состояния и сопоставления возвращаемых результатов с выданной схемной схемой

simulate_state_transition

Исполняет сфокусированные сгенерированные или явные случаи состояния с инвариантами и переопределением зависимостей

Большие наборы результатов ограничивать. Используйте аргументы filter, kind, path, depth или пагинацию для сужения ответа каждым инструментом, прежде чем считать её полной.

Как это работает

  1. Выбейте проект. CodeCanvas находит и запоминает явный корень Python-проекта. Неоднозначные вложенные корни необходимо указывать, а не угадывать.

  2. Постройте структурные индексы. Анализ AST для Python строит общепроектный граф вызовов и данные потока управления по каждой функции. Дополнительные экстракторы добавляют маршрутное FastAPI и цепочки Depends(), скрипты, обычные входные точки functions и экспорты пакетов.

  3. Переиспользуйте совместимый анализ. Граф вызовов и точки входа кэшируются в <project>/.codecanvas/; внутрипроцессный построитель переиспользуется в течение сессии MCP.

  4. Формируйте компактные ответы. Каждый инструмент MCP запрашивает общий анализ и возвращает органиченные результаты с информацией или происхождением, достоверностью, неоднозначностью и признакам усечения.

Стандартный лимит анализа — 5,000 файлов Python. Настройте работу для крупных проектов с помощью:

Переменная

По умолч.

Описание

CODECANVAS_MAX_FILES

5000

Максимальное число анализируемых Python-файлов

CODECANVAS_BATCH_SIZE

50

Файлов до перед передачей результатов

CODECANVAS_THROTTLE_MS

10

Задержка между запусками в миллисекундах

Безопасность и ограничения

  • 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.

A
license - permissive license
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

  • A
    license
    Not graded
    quality
    F
    maintenance
    Enables 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.
    3
    GPL 3.0
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables deterministic static analysis of Python code, providing tools to inspect classes, functions, imports, dependencies, and more, without executing the code.
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Exposes codebase memory as native tools for AI agents, enabling queries, feature tracing, impact analysis, and alignment verification.
    3
    AGPL 3.0
  • A
    license
    Not graded
    quality
    A
    maintenance
    Provides 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,912
    4
    MIT

View all related MCP servers

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).

View all MCP Connectors

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/donggyun112/codecanvas'

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