graph-mcp-java-gen
graph-mcp-java-gen
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 | |
Успех подтверждающих задач | 32 / 32 ограниченных задач | |
Валидация сгенерированного исходного кода | 24 / 24 поддерживаемых намерений — синтаксис + контракт + обоснованность + безопасность | |
Безопасное отклонение состязательных запросов | 8 / 8 — ноль ложных принятий | |
Точность цитирования | 100% — импортируются только символы, указанные в графе | |
Полнота обязательных символов | 100% — каждый обязательный символ присутствует | |
Живая интеграция с Neo4j | Neo4j 5.26.29 — материализовано 8 символов, 12 методов | |
Официальный бенчмарк MCP | 120 / 120 ожидаемых результатов — ноль ошибок протокола | |
Тёплая задержка MCP (p50 / p95 / p99) | 29.13 / 48.61 / 54.23 мс при параллелизме 1 | |
Компиляция Java | 8 / 8 файлов классов через Eclipse ECJ 3.21 | |
Внешние вызовы моделей (детерминированный путь) | 0 вызовов · $0.00 |
Показатели задержки — это локальные однопроцессные измерения на 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]Кандидат | Успех задач | Ген. валид. | Безопасн. отклон. | Точн. цитир. | Решение |
| 21.9% | 0% | 87.5% | 0% | Отклонено — нет обоснованности |
| 75.0% | 100% | 0% | 100% | Отклонено — 8 ложных принятий |
| 100% | 100% | 100% | 100% | Выбрано |
| 96.9% | 100% | 87.5% | 87.5% | Отклонено — нерелевантный контекст + 1 ложное принятие |
Инструменты MCP
Инструмент | Тип | Поведение |
| Чтение | Возвращает идентичность фикстуры, происхождение, лицензию, бэкенд, количество символов |
| Чтение | Параметризованный поиск по имени/методу; максимум 20 результатов |
| Генерация | Типизированные поля → поиск по графу → Java → все проверочные ворота |
| Генерация | Ограниченная грамматика из 3 форм → та же строгая политика |
| Проверка | Проверяет до 20 000 символов; никогда не записывает и не выполняет исходный код |
| Мультиагентный | LLM-парсер намерений → генератор → LLM-рецензент; требует |
Адаптер 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 (указано в метаданных фикстуры).
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 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.
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/rajendarmuddasani/GraphDB_GenAI_MCP_Test_Program_Development'
If you have feedback or need assistance with the MCP directory API, please join our Discord server