Welcome to AEEIP Assistant. Ask questions about automotive Ethernet, AUTOSAR, protocols, or your engineering knowledge base. RAG mode queries the KBS before answering.
🖥 AgenticAI Cluster
Distributed AI compute cluster — nodes, models, tasks, and real-time monitoring
-
Online Nodes
-
Avg CPU
-
Avg Memory
-
Active Agents
Cluster Nodes
Loading...
Available Models
Loading...
Recent Tasks
ID
Agent
Model
Status
Progress
Time
Loading...
Event Log
AEEIP — System Dashboard
Automotive Ethernet Engineering Intelligence Platform — Engineering Knowledge Operating System for ADAS HPC Automotive Ethernet
AEEIP is an engineering knowledge operating system comprising two cooperating subsystems:
A Docker-based backend knowledge service (Backend KBS)
A workspace-local engineering agent (AETA — Automotive Ethernet Engineering Agent)
Together they provide:
Knowledge graph management for automotive Ethernet standards and protocols
Domain ports isolate business logic from infrastructure adapters
Federated MCP
No direct service coupling — subsystems communicate only via MCP tools through VS Code Copilot
System Architecture (SAD)
Federated MCP architecture — subsystems communicate exclusively through MCP tool invocations via VS Code Copilot. No direct service-to-service coupling.
Architectural Style
Primary: Federated MCP Architecture
Each subsystem is an autonomous MCP server with its own persistence layer
Subsystems communicate exclusively through MCP tool invocations via a shared MCP client (VS Code Copilot)
Orchestration logic resides in Copilot Agent Skills that coordinate cross-subsystem workflows
No direct service-to-service coupling between Backend and AETA
Primary Design Rules:
Subsystems are independently deployable and testable
Governance is enforced at the Backend boundary regardless of caller identity
System Context
%%{init: {'flowchart': {'nodeSpacing': 42, 'rankSpacing': 52, 'curve': 'basis'}}}%%
flowchart LR
subgraph IDE["VS Code Copilot"]
direction TB
SKILLS["Copilot Agent Skills x4"]
MCPCFG["mcp.json config"]
end
subgraph BACKEND["Backend KBS :8000"]
direction TB
API["FastAPI MCP Server"]
subgraph STORES["Data and Infra Stores"]
direction LR
NEO[("Neo4j :7687")]
QDR[("Qdrant :6333")]
PG[("PostgreSQL :5432")]
MINIO[("MinIO :9000")]
OLLAMA["Ollama :11434"]
end
end
subgraph AETA["AETA Agent :8088"]
direction TB
AETASRV["MCP Server"]
SQLITE[("SQLite")]
end
SKILLS -->|"orchestrates"| MCPCFG
MCPCFG -->|"X-API-Key"| API
MCPCFG -->|"no auth"| AETASRV
API --> NEO & QDR & PG & MINIO & OLLAMA
AETASRV --> SQLITE
classDef control fill:#1f3a5f,stroke:#63b3ed,stroke-width:1.5px,color:#e2e8f0;
classDef service fill:#16324f,stroke:#4fa3e3,stroke-width:1.5px,color:#e2e8f0;
classDef store fill:#1a2a44,stroke:#7dd3fc,stroke-width:1.2px,color:#dbeafe;
class MCPCFG,SKILLS control;
class API,AETASRV,OLLAMA service;
class NEO,QDR,PG,MINIO,SQLITE store;
AETA is trusted local agent; external access control is Backend's responsibility
AD-SYS-008
Knowledge graph rules in YAML
Version-controlled, diffable, reviewable without code changes
AD-SYS-009
Docker Compose for Backend, bare Python for AETA
Backend needs stateful services; AETA needs only local filesystem
Deployment View
Service
Port
Required
Storage
Backend (FastAPI)
8000
Yes
—
PostgreSQL
5432
Yes
./data/postgres
Neo4j
7474/7687
Optional
./data/neo4j
Qdrant
6333/6334
Optional
./data/qdrant
MinIO
9000/9001
Optional
./data/minio
Ollama
11434
Optional
~/.ollama
AETA Agent
8088
Optional
Local SQLite
Architectural Constraints
No direct Neo4j access from AETA; all graph writes must go through Backend MCP tools
Copilot Skills cannot maintain state between invocations; each skill call is stateless
MCP protocol limits tool results to text payloads; binary data requires object storage references
AETA's SQLite symbol index is workspace-scoped; multiple workspaces require separate AETA instances
Backend's feature gates must be consistent with deployed infrastructure (e.g., FEATURE_KBS=true requires running Qdrant)
Quality Attributes
Attribute
Mechanism
Measure
Modifiability
Hexagonal architecture, port-based adapters
New adapter without changing use cases
Testability
DI container, domain isolation
Fake adapters in unit tests
Deployability
Docker Compose, feature gates
Single docker compose up for full stack
Availability
Optional adapter pattern
Backend starts even if Neo4j/Qdrant unavailable
Security
API key auth, role hierarchy, parameterized Cypher
No Cypher injection; privilege escalation blocked
Traceability
Audit log, review queue, tool annotations
Every graph mutation has provenance
Software Requirements Specification (SWS)
System-level software requirements per Automotive SPICE SWE.1 — covers cross-cutting requirements spanning both Backend KBS and AETA Agent subsystems.
§4.1 Knowledge Graph
ID
Requirement
Verification
SWS-SYS-001
The system shall maintain a property graph (Neo4j) storing nodes with labels, ext_id, title, category, description, and arbitrary additional properties.
Integration test: upsert → query
SWS-SYS-002
The system shall validate all node labels against a configured allowlist (currently 22 labels).
Unit test: reject unknown label
SWS-SYS-003
The system shall validate all relationship types against a configured allowlist (currently 24 types).
Unit test: reject unknown relation
SWS-SYS-004
The system shall enforce label-pair rules defining allowed (from_label, relation_type, to_label) combinations, configured in knowledge_graph_rules.yaml.
Unit test: reject invalid pair
SWS-SYS-005
The system shall support hierarchical node decomposition via contains relations (Feature→SubFeature→SubFeature).
Graph query: verify depth
SWS-SYS-006
The system shall automatically derive node category from ext_id prefix patterns when not explicitly provided.
Unit test: pattern→category
SWS-SYS-007
The system shall compute a brief field for every node: {category} / {label} / {title} — {first sentence of description}.
Response schema validation
§4.2 Document Categories
ID
Requirement
Verification
SWS-SYS-010
The system shall support the following document categories: RFC, IEEE, Classic_AUTOSAR, Adaptive_AUTOSAR, QNX, CyberSecurity, FUSA.
Config validation
SWS-SYS-011
Category derivation shall match ext_id using the first applicable regex in a priority-ordered pattern list.
Unit test: priority match
SWS-SYS-012
When no pattern matches, the system shall fall back to label-based category defaults (e.g., label RFC → category RFC).
Unit test: fallback path
§4.3 Governance and Access Control
ID
Requirement
Verification
SWS-SYS-020
The system shall enforce a 5-level role hierarchy: viewer(0) < engineer(1) < reviewer(2) < architect(3) < admin(4).
RBAC unit tests
SWS-SYS-021
Read-only tools shall require minimum role viewer.
Integration test
SWS-SYS-022
Proposal tools shall require minimum role reviewer.
Integration test: reject engineer
SWS-SYS-023
Approval and auto-approve behavior shall require minimum role architect.
Integration test
SWS-SYS-024
Direct CRUD operations shall require minimum role admin.
Integration test: reject architect
SWS-SYS-025
A master admin key (env ADMIN_MASTER_KEY) shall bypass database lookup and grant full admin privileges.
Startup test
SWS-SYS-026
When caller role ≥ architect, propose_relation shall auto-approve and write directly without review queue.
No pending record
SWS-SYS-027
When caller role = reviewer, propose_relation shall queue proposal with status pending.
Pending record exists
SWS-SYS-028
The system shall maintain an audit log recording governance actions (propose, approve, reject, direct write).
Audit query test
§4.4 MCP Integration
ID
Requirement
Verification
SWS-SYS-030
Both subsystems shall expose tools via MCP streamable HTTP transport.
Connection test
SWS-SYS-031
Backend MCP: http://localhost:8000/api/v1/mcp/ with X-API-Key header.
Curl test
SWS-SYS-032
AETA MCP: http://localhost:8088/mcp/ without authentication.
Curl test
SWS-SYS-033
All MCP tools shall declare ToolAnnotations(destructiveHint=False, idempotentHint=True).
Descriptor inspection
SWS-SYS-034
Backend shall expose only tools listed in MCP_EXPOSED_TOOLS env var.
Config review
§4.5 Semantic Retrieval
ID
Requirement
Verification
SWS-SYS-040
The system shall support semantic vector search across ingested documents using Qdrant.
Relevance test
SWS-SYS-041
The system shall support source-filtered search (RFC-only, IEEE-only, etc.).
Filter test
SWS-SYS-042
The system shall support adaptive retrieval combining: semantic search, source-filtered search, protocol search, graph traversal, and rule evaluation.
Orchestrator test
SWS-SYS-043
The system shall support N-hop graph traversal from a given node (trace_protocol).
Traversal test
§4.6 Backup and Recovery
ID
Requirement
Verification
SWS-SYS-050
The system shall support full backup (Neo4j + PostgreSQL + Qdrant metadata) as downloadable archive via MCP tool.
Backup file validation
SWS-SYS-051
The system shall support restore from a backup archive via MCP tool with idempotent behavior.
Restore + verify roundtrip
§5 AETA Agent Requirements
ID
Requirement
Verification
SWS-AETA-001
AETA shall scan source code and build a SQLite symbol index of functions, classes, structs, enums, macros, typedefs, namespaces.
Index build + query
SWS-AETA-002
AETA shall track #include dependencies between source files.
Include query test
SWS-AETA-003
AETA shall track function call references (caller → callee).
Call graph query
SWS-AETA-004
AETA shall provide full traceability: SVG levels → Req → Design → Code symbols.
Trace chain validation
SWS-AETA-005
AETA shall generate knowledge files in Markdown+YAML frontmatter format.
File format validation
SWS-AETA-006
AETA shall provide CLI: build-index, uc1, uc2, trace-full, export-traceability, knowledge.
CLI smoke test
SWS-AETA-007
AETA shall support adaptive RAG combining KBS semantic search, Polarion integration, and graph context.
RAG result validation
SWS-AETA-008
AETA shall export traceability reports in Excel format.
File format test
§6 Copilot Skill Requirements
ID
Requirement
Verification
SWS-SKILL-001
Skill agentic-ai-update-kbs shall orchestrate graph quality review by reading existing graph state and planning node/relation updates.
Manual invocation test
SWS-SKILL-002
Skill evidence-kbs-update shall convert source code and design into evidence, then invoke Backend MCP tools to update graph.
End-to-end trace
SWS-SKILL-003
Skill trace-to-knowledge shall execute full traceability (Req→Design→Code), generate knowledge, then ingest via MCP.
Trace + ingest verification
SWS-SKILL-004
Skill knowledge-ingest shall read Markdown files from docs/handsonknowledge/ and ingest into Backend KBS.
Ingest + graph verification
§7 Non-Functional Requirements
ID
Requirement
Category
SWS-SYS-NF-001
Feature gating for RAG, KBS, conversation, rate limiting, usage tracking, and agents via env vars.
Configurability
SWS-SYS-NF-002
Dependency injection isolating business logic from infrastructure adapters.
Maintainability
SWS-SYS-NF-003
Structured logs during startup, shutdown, retrieval, ingestion, and governance.
Observability
SWS-SYS-NF-004
Extension through additional hooks and tools without changing core API contracts.
Extensibility
SWS-SYS-NF-005
All Cypher queries use parameterized inputs (prevent injection).
Security
SWS-SYS-NF-006
PostgreSQL required; Neo4j/Qdrant/MinIO/Ollama optional based on feature gates.
Availability
SWS-SYS-NF-007
AETA operates locally without network (except optional Backend MCP).
Independence
SWS-SYS-NF-008
Concurrent MCP client sessions without session interference.
Concurrency
§10 Traceability to Subsystem SWS
System Requirement
Backend SWS Reference
AETA Reference
SWS-SYS-001..007 (Graph)
SWS-BE-022, graph_governance_tools
—
SWS-SYS-010..012 (Categories)
category derivation in neo4j_graph_adapter
—
SWS-SYS-020..028 (Governance)
SWS-BE-004, SWS-BE-005, SWS-BE-020, SWS-BE-021
—
SWS-SYS-030..034 (MCP)
SWS-BE-019
SWS-AETA-006
SWS-SYS-040..043 (Retrieval)
SWS-BE-012, SWS-BE-013, SWS-BE-017
SWS-AETA-007
SWS-SYS-050..051 (Backup)
SWS-BE-024
—
SWS-AETA-001..008
—
AETA subsystem
SWS-SKILL-001..004
MCP tool consumer
MCP tool consumer
Software Architecture Description (SAD)
Backend hexagonal architecture per Automotive SPICE SWE.2 — port-based adapter design with domain isolation
Dynamic View — System Startup
sequenceDiagram
participant DC as Docker Compose
participant PG as PostgreSQL
participant NEO as Neo4j
participant QDR as Qdrant
participant BE as Backend FastAPI
participant DEV as Developer
participant AETA as AETA Agent
DC->>PG: start (healthcheck: pg_isready)
DC->>NEO: start (healthcheck)
DC->>QDR: start (healthcheck)
DC->>BE: start (depends_on: healthy)
BE->>BE: load settings, validate features
BE->>PG: run Alembic migrations
BE->>BE: Container.initialize()
BE->>NEO: verify connection
BE->>QDR: verify connection
BE-->>DC: ready
DEV->>AETA: python -m mcp_servers.aeta.src.mcp_kbs_server --port 8088
AETA->>AETA: load symbol DB
AETA-->>DEV: MCP server ready
Dynamic View — Knowledge Evolution Flow
sequenceDiagram
participant DEV as Developer
participant COP as Copilot Skill
participant AETA as AETA MCP
participant BE as Backend MCP
participant NEO as Neo4j
DEV->>COP: invoke trace-to-knowledge
COP->>AETA: trace_full(workspace, source_dir)
AETA-->>COP: trace chains + coverage
COP->>AETA: search_code(symbol_name)
AETA-->>COP: symbol details + call graph
COP->>COP: generate knowledge evidence (MD)
COP->>BE: kbs_update(upsert_node, ...)
BE->>NEO: MERGE node
BE-->>COP: node created (brief)
COP->>BE: propose_relation(from, rel, to)
BE->>NEO: MERGE relation (auto-approve)
BE-->>COP: relation written
COP-->>DEV: knowledge graph updated ✓
Dynamic View — Governance (Reviewer Path)
sequenceDiagram
participant REV as Reviewer Agent
participant BE as Backend MCP
participant PG as PostgreSQL
participant ARCH as Architect Agent
participant NEO as Neo4j
participant AUDIT as Audit Log
REV->>BE: propose_relation(from, rel, to) [reviewer]
BE->>PG: INSERT review_queue (pending)
BE-->>REV: queued (proposal_id)
Note over PG: Awaits architect approval
ARCH->>BE: approve_relation(proposal_id) [architect]
BE->>PG: UPDATE status=approved
BE->>NEO: MERGE relation
BE->>AUDIT: log(approve, architect, id)
BE-->>ARCH: approved + written ✓
Port Interfaces
Port
Direction
Adapter
Technology
GraphPort
Driven
Neo4jGraphAdapter
neo4j-driver 5.x async
VectorPort
Driven
QdrantAdapter
qdrant-client
ReviewPort
Driven
PostgresReviewAdapter
asyncpg
LLMPort
Driven
OllamaAdapter
httpx → Ollama/OpenAI API
APIKeyRepoPort
Driven
PostgresAPIKeyRepo
asyncpg
ToolPort
Driven
12 Graph Governance Tools
MCP SDK 1.27
Skill Orchestration Layer
Skill
Backend Tools Used
AETA Tools Used
Workflow
agentic-ai-update-kbs
review_graph, kbs_update, trace_protocol
—
Read graph state → plan updates → execute
evidence-kbs-update
kbs_update, propose_relation
search_code
Code evidence → graph nodes + relations
trace-to-knowledge
kbs_update, propose_relation
trace_full, search_code
Req→Design→Code → knowledge → ingest
knowledge-ingest
kbs_update, propose_relation
knowledge_scan
MD files → create nodes → propose relations
Software Detailed Design (SDD)
Cross-subsystem interface contracts per Automotive SPICE SWE.3 — MCP transport, graph schema, role model, audit, tool contracts
# In ProposeRelationTool.execute():
caller_role_rank = ROLE_RANKS[current_api_key.role]
if caller_role_rank >= ROLE_RANKS["architect"]: # rank >= 3
# Direct write — no review queue
self._graph.upsert_relation(from_ext_id, rel_type, to_ext_id, properties)
return ToolResult(content=f"Auto-approved: {from_ext_id} —[{rel_type}]→ {to_ext_id}")
else:
# Queue for review
self._review.create_proposal(from_ext_id, rel_type, to_ext_id, properties, caller)
return ToolResult(content=f"Queued for architect approval: proposal #{id}")
§2.4 Audit and Review Queue (PostgreSQL)
CREATE TABLE review_queue (
id SERIAL PRIMARY KEY,
from_ext_id VARCHAR(256) NOT NULL,
relation_type VARCHAR(64) NOT NULL,
to_ext_id VARCHAR(256) NOT NULL,
properties JSONB,
proposer VARCHAR(256) NOT NULL,
status VARCHAR(16) NOT NULL DEFAULT 'pending',
reviewer VARCHAR(256),
review_reason TEXT,
created_at TIMESTAMP DEFAULT NOW(),
reviewed_at TIMESTAMP
);
CREATE TABLE audit_log (
id SERIAL PRIMARY KEY,
action VARCHAR(64) NOT NULL, -- propose|approve|reject|direct_write|delete
actor VARCHAR(256) NOT NULL,
target TEXT NOT NULL,
details JSONB,
created_at TIMESTAMP DEFAULT NOW()
);
Tool: trace_protocol — N-hop graph traversal
Input:
start_node: str (ext_id)
hops: int (1-5, default 2)
direction: "outgoing" | "incoming" | "both" (default "both")
Output:
List of nodes with brief, grouped by hop distance
Includes: ext_id, title, category, label, description, relations
Tool: kbs_search — Semantic vector retrieval
Input:
query: str
top_k: int (default 10)
source_filter: str (optional, e.g. "rfc", "ieee")
Output:
Ranked list of document chunks with score, source, and content