Skip to main content
Glama
rajendarmuddasani

graph-mcp-java-gen

graph-mcp-java-gen

CI Python Evidence License MCP Neo4j

MCP-сервер на основе графа, который преобразует запросы на естественном языке в проверенные, компилируемые Java-методы тестов — без выдуманных импортов, без необоснованных символов, без тихих сбоев.

Запрос на естественном языке или структурированный запрос поступает в официальный сервер Model Context Protocol (MCP) stdio. Версионированный графовый каталог (Neo4j или JSON-фикстура) предоставляет единственные символы, которые генератор может цитировать. Многоуровневый валидатор проверяет синтаксис, контракт фреймворка, обоснованность и правила запрещённых API перед возвратом любого исходного кода. Два опциональных LLM-агента — нормализатор намерений и рецензент после генерации — расширяют конвейер для работы с произвольным вводом, не нарушая детерминированную оболочку безопасности.


Архитектура

%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#1e3a5f", "primaryTextColor": "#ffffff", "primaryBorderColor": "#0d2137", "lineColor": "#4a9eca", "secondaryColor": "#2d6a4f", "tertiaryColor": "#7b2d8b"}}}%%
flowchart TD
    classDef input    fill:#7b2d8b,stroke:#4a1a54,color:#fff,font-size:13px
    classDef mcp      fill:#e07b00,stroke:#9a5700,color:#fff,font-size:13px
    classDef agent    fill:#1a6b8a,stroke:#0d3f52,color:#fff,font-size:13px
    classDef core     fill:#2d6a4f,stroke:#1b4332,color:#fff,font-size:13px
    classDef graph    fill:#1e3a5f,stroke:#0d1f3c,color:#fff,font-size:13px
    classDef validate fill:#4a6741,stroke:#2d4026,color:#fff,font-size:13px
    classDef ok       fill:#155724,stroke:#0a3015,color:#fff,font-size:13px
    classDef reject   fill:#721c24,stroke:#3d0a0e,color:#fff,font-size:13px

    NL["🌎 Free-form NL\n(generate_java_test_nlp)"]:::input
    SF["📄 Structured fields\n(generate_java_test)"]:::input
    TX["💬 Intent text\n(generate_java_test_from_intent)"]:::input

    MCP["🔌 FastMCP stdio Server\n7 tools · zero raw Cypher"]:::mcp

    A1["🤖 LLMIntentParser\nAgent 1 · gpt-4o-mini\nfield extraction"]:::agent
    INT["✅ GenerationIntent\nclass · package · module\nconfig · version"]:::core
    GDB["📊 Graph Catalog\nNeo4j 5.26 / JSON fixture\n8 symbols · 12 methods"]:::graph
    GEN["⚙️ Template Generator\ndeterministic render"]:::core
    VAL["🛡️ JavaValidator\nTree-sitter AST\ncontract · grounding\nsource-safety"]:::validate
    A2["🤖 ReviewAgent\nAgent 2 · gpt-4o-mini\n6-item checklist"]:::agent

    OK["✅ Accepted Java\nsource + citations\n+ review verdict"]:::ok
    REJ["❌ Typed Rejection\nerror code + message\nno source returned"]:::reject

    NL --> MCP
    SF --> MCP
    TX --> MCP
    MCP -->|"NLP path"| A1
    MCP -->|"direct path"| INT
    A1 -->|"extracted fields"| INT
    INT -->|"invalid"| REJ
    INT -->|"valid"| GDB
    GDB -->|"cited symbols"| GEN
    GEN --> VAL
    VAL -->|"any gate fails"| REJ
    VAL -->|"all gates pass"| A2
    A2 -->|"issues found"| REJ
    A2 -->|"approved"| OK

Мультиагентный конвейер

%%{init: {"theme": "base", "themeVariables": {"actorBkg": "#1e3a5f", "actorTextColor": "#ffffff", "actorBorderColor": "#4a9eca", "activationBkgColor": "#2d6a4f", "activationBorderColor": "#155724", "noteBkgColor": "#fff8e1", "noteTextColor": "#333", "signalColor": "#4a9eca", "signalTextColor": "#1e3a5f"}}}%%
sequenceDiagram
    autonumber
    actor User
    participant MCP as FastMCP Server
    participant A1  as LLMIntentParser<br/>(Agent 1)
    participant GDB as Graph Catalog<br/>(Neo4j / Fixture)
    participant GEN as Generator +<br/>JavaValidator
    participant A2  as ReviewAgent<br/>(Agent 2)

    User->>MCP: generate_java_test_nlp(free-form NL)
    MCP->>A1: extract intent fields
    Note over A1: gpt-4o-mini · temp=0<br/>strict JSON schema
    A1-->>MCP: {class, package, module, config, version}
    MCP->>GDB: get versioned symbols
    GDB-->>MCP: 7 cited GraphSymbol objects
    MCP->>GEN: render Java + validate
    Note over GEN: Tree-sitter AST<br/>contract · grounding · safety
    GEN-->>MCP: validated Java source
    MCP->>A2: review(source, class, package)
    Note over A2: gpt-4o-mini · temp=0<br/>6-item checklist
    A2-->>MCP: {approved, checklist, issues}
    MCP-->>User: {status, source, citations, review}

Панель доказательств

Все измерения используют независимо сгенерированные синтетические фикстуры под лицензией CC0. Результаты получены по принятой политике strict_graph_v2 на отложенном подтверждающем разбиении.

Поверхность

Результат

Артефакт

Масштаб бенчмарка

96 CC0-намерений — 32 dev / 32 val / 32 confirmation

task_evaluation.json

Успех подтверждающих задач

32 / 32 ограниченных задач

evaluation_trace.json

Валидация сгенерированного исходного кода

24 / 24 поддерживаемых намерений — синтаксис + контракт + обоснованность + безопасность

task_evaluation.json

Безопасное отклонение состязательных запросов

8 / 8 — ноль ложных принятий

task_evaluation.json

Точность цитирования

100% — импортируются только символы, указанные в графе

task_evaluation.json

Полнота обязательных символов

100% — каждый обязательный символ присутствует

task_evaluation.json

Живая интеграция с Neo4j

Neo4j 5.26.29 — материализовано 8 символов, 12 методов

neo4j_integration.json

Официальный бенчмарк MCP

120 / 120 ожидаемых результатов — ноль ошибок протокола

mcp_benchmark.json

Тёплая задержка MCP (p50 / p95 / p99)

29.13 / 48.61 / 54.23 мс при параллелизме 1

mcp_benchmark.json

Компиляция Java

8 / 8 файлов классов через Eclipse ECJ 3.21

java_compile.json

Внешние вызовы моделей (детерминированный путь)

0 вызовов · $0.00

mcp_benchmark.json

Показатели задержки — это локальные однопроцессные измерения на Windows, а не производственные SLO.


Выбор политики

Были оценены четыре политики генерации. Цель выбора была объявлена до открытия подтверждающего разбиения: максимизировать успех валидации задач среди кандидатов, прошедших все проверки безопасности. Подтверждение было открыто ровно один раз для выбранного кандидата.

%%{init: {"theme": "base", "themeVariables": {"quadrant1Fill": "#155724", "quadrant2Fill": "#856404", "quadrant3Fill": "#721c24", "quadrant4Fill": "#856404"}}}%%
xychart-beta
    title "Validation: task success vs safe-rejection recall (%)"
    x-axis ["no_graph_v0", "lenient_repair_v1", "strict_graph_v2 ✓", "wide_context_v3"]
    y-axis "Task success (%)" 0 --> 105
    bar  [21.9, 75.0, 100.0, 96.9]
    line [87.5,  0.0, 100.0, 87.5]

Кандидат

Успех задач

Ген. валид.

Безопасн. отклон.

Точн. цитир.

Решение

no_graph_v0

21.9%

0%

87.5%

0%

Отклонено — нет обоснованности

lenient_repair_v1

75.0%

100%

0%

100%

Отклонено — 8 ложных принятий

strict_graph_v2

100%

100%

100%

100%

Выбрано

wide_context_v3

96.9%

100%

87.5%

87.5%

Отклонено — нерелевантный контекст + 1 ложное принятие


Инструменты MCP

Инструмент

Тип

Поведение

get_fixture_metadata

Чтение

Возвращает идентичность фикстуры, происхождение, лицензию, бэкенд, количество символов

search_graph

Чтение

Параметризованный поиск по имени/методу; максимум 20 результатов

generate_java_test

Генерация

Типизированные поля → поиск по графу → Java → все проверочные ворота

generate_java_test_from_intent

Генерация

Ограниченная грамматика из 3 форм → та же строгая политика

validate_java_source

Проверка

Проверяет до 20 000 символов; никогда не записывает и не выполняет исходный код

generate_java_test_nlp

Мультиагентный

LLM-парсер намерений → генератор → LLM-рецензент; требует OPENAI_API_KEY

Адаптер Neo4j использует фиксированные параметризованные Cypher-запросы, отклоняет учётные данные в URI и отказывает при коллизиях идентичности фикстур.


Быстрый старт

python -m venv .venv
# Windows
.\.venv\Scripts\Activate.ps1
# Linux / macOS
source .venv/bin/activate

pip install -r requirements-dev.txt
pip install --no-deps -e .

# Run the offline smoke test (no database needed)
python scripts/container_smoke.py python -m graph_mcp.server

Конфигурация MCP-клиента (VS Code / Claude Desktop)

{
  "mcpServers": {
    "graph-java-gen": {
      "command": "/absolute/path/to/.venv/bin/python",
      "args": ["-m", "graph_mcp.server"],
      "cwd": "/absolute/path/to/repo"
    }
  }
}

Включение мультиагентного NLP-инструмента

# Add to your environment or .env file
OPENAI_API_KEY=sk-...
GRAPH_BACKEND=neo4j   # optional; defaults to local JSON fixture

Воспроизведение доказательств

# Build the CC0 benchmark fixture
python scripts/build_evaluation_fixture.py

# Run all four candidate policies and select strict_graph_v2
python scripts/evaluate_workflow.py

# Validate the claims ledger and evidence privacy rules
python scripts/validate_evidence.py

# Full test suite
pytest --cov=src --cov-report=term-missing --cov-fail-under=75

# Lint and security
ruff check src tests scripts
bandit -r src scripts -q -ll
pip-audit -r requirements.txt --progress-spinner off

Живой путь Neo4j

# Start a local Neo4j Community instance (Docker)
docker compose up -d neo4j
python scripts/wait_for_neo4j.py

# Seed the synthetic graph fixture and verify retrieval
python scripts/seed_graph.py
python scripts/verify_neo4j.py   # writes evidence/neo4j_integration.json

# Full MCP benchmark over stdio with live graph
python scripts/benchmark_mcp.py  # writes evidence/mcp_benchmark.json

Компиляция Java

# Requires JDK 21 on PATH
python scripts/compile_generated.py --require-compiler
# Writes evidence/java_compile.json

Дизайн безопасности

  • Никакого сырого Cypher на поверхности MCP — все графовые запросы параметризованы.

  • Строгие списки разрешённых полей — имена классов, имена пакетов, имена модулей, версии и пути конфигурации проверяются по скомпилированным регулярным выражениям перед любым поиском по графу.

  • Сканер безопасности исходного кода — сгенерированный Java отклоняется, если он ссылается на Runtime.getRuntime, ProcessBuilder, System.exit, java.io, java.nio.file или java.net.

  • Предотвращение обхода путей — абсолютные пути и сегменты .. отклоняются в полях путей конфигурации.

  • Принудительная обоснованность — каждый импорт в сгенерированном исходном коде должен соответствовать символу, полученному из графа для этой конкретной версии.

  • Повторная валидация вывода LLM — поля, извлечённые LLM-парсером намерений, проходят ту же проверку GenerationIntent.from_mapping(), что и прямые вызовы API.

  • Учётные данные Neo4j — загружаются только из переменных окружения; никогда не логируются и не возвращаются в артефактах доказательств.

  • XML-предварительная проверкаdefusedxml предотвращает атаки расширения сущностей при сканировании структуры проекта.

  • Контейнер — закреплённый образ Chainguard Linux, не-root UID/GID 65532; CI выполняет MCP-смоук-тест через stdio в контейнере.

Полную границу угроз см. в SECURITY.md.


Карта репозитория

src/graph_mcp/
  workflow.py            intent parsing · graph lookup · Java generation · validation
  graph_store.py         Neo4j catalog adapter (parameterised Cypher)
  llm_intent_parser.py   Agent 1 — LLM free-form NL → GenerationIntent
  review_agent.py        Agent 2 — LLM post-generation checklist reviewer
  server.py              FastMCP stdio server (7 tools)
  evaluation.py          candidate scoring and selection harness

fixtures/
  synthetic_graph.json   CC0 versioned framework symbol catalog (SHA-256 bound)
  evaluation_cases.json  96 CC0 natural-language intents (32/32/32 split)
  java_framework/        7 independently generated Java stub classes

evidence/
  claims.json            machine-readable claims ledger (14 public claims)
  evaluation_protocol.json  pre-declared selection rules and safety gates
  task_evaluation.json   per-candidate, per-split, per-case results
  evaluation_trace.json  confirmation case-level trace
  neo4j_integration.json live Neo4j integration result
  mcp_benchmark.json     MCP protocol benchmark (120 calls)
  java_compile.json      ECJ compilation result

scripts/
  build_evaluation_fixture.py   generate benchmark from seed
  evaluate_workflow.py          run and score all four candidates
  validate_evidence.py          verify claims ledger and privacy rules
  benchmark_mcp.py              official MCP stdio latency benchmark
  verify_neo4j.py               live graph integration check
  compile_generated.py          ECJ compile gate
  seed_graph.py                 materialise fixture into Neo4j

tests/
  test_generation_loop.py       generation + validation unit tests
  test_graph_store.py           Neo4j adapter unit tests
  test_mcp_protocol.py          official MCP protocol conformance
  test_evaluation.py            evaluation harness tests
  test_evidence.py              claims ledger integrity tests
  test_neo4j_live.py            opt-in live graph tests (NEO4J_* env required)

docs/
  ARCHITECTURE.md        component design and data flow
  POLICY_CARD.md         candidate selection details
  DATA_CARD.md           fixture provenance and license
  MCP_INTEGRATION.md     client configuration guide
  DEPLOYMENT.md          Docker and container notes

templates/               MCP prompt templates for VS Code Copilot
examples/                sample project preflight scanner

Границы

Следующее не заявляется этим репозиторием:

  • Качество разбора произвольных намерений, независимое от версии модели — LLM-конвейер опционален, и его результаты не фиксируются в замороженных артефактах оценки.

  • Совместимость с любым проприетарным или конфиденциальным Java-тестовым фреймворком.

  • Производственные SLO задержки — все измерения являются локальными однопроцессными последовательными бенчмарками.

  • Параллельная, распределённая или высокодоступная работа.

  • Автоматическое выполнение сгенерированного Java против оборудования или тестового инструмента.

  • Любая экономия производительности, затрат, выхода или времени тестирования — этот репозиторий содержит только доказательства генерации и валидации.

Полная машиночитаемая граница находится в evidence/claims.json.


Лицензия

Код репозитория: MIT. Графовая фикстура, кейсы намерений и Java-заглушки: CC0-1.0 (указано в метаданных фикстуры).

-
license - not tested
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 Connectors

  • Deterministic validation for AI-generated artifacts: JSON Schema, OpenAPI response, SQL syntax.

  • Proves AI-generated Python does what you asked: lint, types, security, sandbox run, exact fixes.

  • Browser-backed QA with evidence and fix-ready reports for coding agents.

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/rajendarmuddasani/GraphDB_GenAI_MCP_Test_Program_Development'

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