Skip to main content
Glama
rajendarmuddasani

graph-mcp-java-gen

graph-mcp-java-gen

CI Python Evidence License MCP Neo4j

Servidor MCP basado en grafos que convierte solicitudes en lenguaje natural en métodos de prueba Java validados y compilables: sin imports alucinados, sin símbolos sin fundamento, sin fallos silenciosos.

Una solicitud en lenguaje natural o estructurada entra en un servidor oficial Model Context Protocol (MCP) stdio. Un catálogo de grafos versionado (Neo4j o fixture JSON) proporciona los únicos símbolos que el generador puede citar. Un validador multicapa comprueba sintaxis, contrato de framework, fundamentación y reglas de API prohibidas antes de devolver cualquier fuente. Dos agentes LLM opcionales (un normalizador de intenciones y un revisor posterior a la generación) amplían el pipeline para entradas de formato libre sin comprometer el envoltorio de seguridad determinista.


Arquitectura

%%{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

Pipeline Multiagente

%%{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}

Panel de Evidencia

Todas las mediciones utilizan fixtures sintéticos generados de forma independiente con licencia CC0. Los resultados provienen de la política aceptada strict_graph_v2 en la división de confirmación reservada.

Superficie

Resultado

Artefacto

Escala del benchmark

96 intenciones CC0 — 32 dev / 32 val / 32 confirmación

task_evaluation.json

Éxito de tareas de confirmación

32 / 32 tareas acotadas

evaluation_trace.json

Validación de fuente generada

24 / 24 intenciones soportadas — sintaxis + contrato + fundamentación + seguridad

task_evaluation.json

Rechazo adversarial seguro

8 / 8 — cero falsos aceptados

task_evaluation.json

Precisión de citas

100% — solo se importan símbolos citados del grafo

task_evaluation.json

Recuperación de símbolos requeridos

100% — todos los símbolos requeridos presentes

task_evaluation.json

Integración Neo4j en vivo

Neo4j 5.26.29 — 8 símbolos, 12 métodos materializados

neo4j_integration.json

Benchmark oficial MCP

120 / 120 resultados esperados — cero errores de protocolo

mcp_benchmark.json

Latencia MCP en caliente (p50 / p95 / p99)

29.13 / 48.61 / 54.23 ms con concurrencia 1

mcp_benchmark.json

Compilación Java

8 / 8 archivos de clase vía Eclipse ECJ 3.21

java_compile.json

Llamadas a modelos externos (ruta determinista)

0 llamadas · $0.00

mcp_benchmark.json

Las cifras de latencia son mediciones locales de Windows de un solo proceso, no SLO de producción.


Selección de Política

Se evaluaron cuatro políticas de generación. El objetivo de selección se declaró antes de abrir la división de confirmación: maximizar el éxito de las tareas de validación entre los candidatos que pasan todas las puertas de seguridad. La confirmación se abrió exactamente una vez para el candidato seleccionado.

%%{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]

Candidato

Éxito de tarea

Gen válido

Rechazo seguro

Precisión de citas

Decisión

no_graph_v0

21.9%

0%

87.5%

0%

Rechazado — sin fundamentación

lenient_repair_v1

75.0%

100%

0%

100%

Rechazado — 8 falsos aceptados

strict_graph_v2

100%

100%

100%

100%

Seleccionado

wide_context_v3

96.9%

100%

87.5%

87.5%

Rechazado — contexto irrelevante + 1 falso aceptado


Herramientas MCP

Herramienta

Tipo

Comportamiento

get_fixture_metadata

Lectura

Devuelve identidad del fixture, procedencia, licencia, backend, número de símbolos

search_graph

Lectura

Búsqueda parametrizada de nombres/métodos; máximo 20 resultados

generate_java_test

Generación

Campos tipados → búsqueda en grafo → Java → todas las puertas de validación

generate_java_test_from_intent

Generación

Gramática acotada de 3 formas → misma política estricta

validate_java_source

Validación

Comprueba hasta 20 000 caracteres; nunca escribe ni ejecuta fuente

generate_java_test_nlp

Multiagente

Parser de intención LLM → generador → revisor LLM; requiere OPENAI_API_KEY

El adaptador Neo4j usa Cypher parametrizado fijo, rechaza credenciales en URIs y rechaza colisiones de identidad de fixtures.


Inicio Rápido

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

Configuración del cliente 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"
    }
  }
}

Habilitar la herramienta NLP multiagente

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

Reproducir Evidencia

# 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

Ruta Neo4j en vivo

# 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

Compilación Java

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

Diseño de Seguridad

  • Sin Cypher crudo en la superficie MCP — todas las consultas de grafo están parametrizadas.

  • Listas de permitidos estrictas para campos — nombres de clase, nombres de paquete, nombres de módulo, versiones y rutas de configuración se verifican contra patrones regex compilados antes de cualquier búsqueda en el grafo.

  • Escáner de seguridad de fuente — el Java generado se rechaza si referencia Runtime.getRuntime, ProcessBuilder, System.exit, java.io, java.nio.file o java.net.

  • Prevención de traversal de rutas — las rutas absolutas y los segmentos .. se rechazan en los campos de ruta de configuración.

  • Aplicación de fundamentación — cada import en la fuente generada debe corresponder a un símbolo recuperado del grafo para esa versión exacta.

  • Salida LLM revalidada — los campos extraídos por el parser de intención LLM pasan por la misma validación GenerationIntent.from_mapping() que las llamadas directas a la API.

  • Credenciales Neo4j — se cargan solo desde variables de entorno; nunca se registran ni se devuelven en artefactos de evidencia.

  • Preflight XMLdefusedxml previene ataques de expansión de entidades en el escaneo de estructura de proyectos.

  • Contenedor — imagen Linux Chainguard fijada, UID/GID no root 65532; CI realiza una prueba de humo MCP-over-container stdio.

Consulte SECURITY.md para conocer el límite completo de amenazas.


Mapa del Repositorio

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

Límites

Lo siguiente no es reclamado por este repositorio:

  • Calidad de parseo de intenciones de formato libre independiente de la versión del modelo — el pipeline LLM es opcional y sus resultados no se capturan en los artefactos de evaluación congelados.

  • Compatibilidad con cualquier framework de pruebas Java propietario o confidencial.

  • SLO de latencia de producción — todas las mediciones son benchmarks secuenciales locales de un solo proceso.

  • Operación concurrente, distribuida o de alta disponibilidad.

  • Ejecución automática de Java generado contra hardware o un instrumento de prueba.

  • Cualquier ahorro de productividad, costo, rendimiento o tiempo de prueba — este repositorio contiene solo evidencia de generación y validación.

El límite completo legible por máquina está en evidence/claims.json.


Licencia

Código del repositorio: MIT. Fixture de grafo, casos de intención y stubs Java: CC0-1.0 (etiquetados en los metadatos del fixture).

-
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