spring-ai-playground

title: AI Stack description: Six dashboards that split agent tool execution, RAG, and safety by integration kind - Tool Studio · MCP Servers · MCP Inspector · Vector Database · Agentic Chat · Safety.

AI Stack

The AI Stack group surfaces what the agent actually integrated with on each turn - split by integration kind so that “did my sandbox tool work?” and “is my MCP server alive?” never share the same view. Six dashboards.

flowchart LR
    Span["spring.ai.tool<br/>span"]
    Filt["McpToolObservation<br/>Filter"]
    Span --> Filt
    Filt -->|in-process| TS["Tool Studio"]
    Filt -->|stdio · http · sse| MS["MCP Servers"]
    VSpan["db.vector.client<br/>.operation"] --> VD["Vector Database"]
    Prim["MCP primitive<br/>observations"] --> MI["MCP Inspector"]
    Risk["saip.risk.signal +<br/>sandbox / HITL guards"] --> SF["Safety"]
    Trace["TraceRecord stream"] --> Agg["Conversation<br/>Aggregator"]
    Agg --> AC["Agentic Chat"]
    AC -. row click .-> CTD["Conversation<br/>Thread"]

The discriminator that powers the Tool Studio / MCP Servers split is McpToolObservationFilter, an ObservationFilter this project registers. It injects network.transport, saip.mcp.server, and mcp.method.name attributes onto every spring.ai.tool span by looking up the tool’s name in McpClientService. See Observability Architecture → Tool and MCP observability for the design rationale.

Pages in this group

- :material-tools:{ .lg .middle } **[Tool Studio](/spring-ai-playground/docs/features/observability/ai-stack/tool-studio.html)** --- `spring.ai.tool` spans without `mcp.method.name` (in-process) + `sandbox.guard.blocked` counter. In-process tool latency, error rate, sandbox prevention count. - :material-server:{ .lg .middle } **[MCP Servers](/spring-ai-playground/docs/features/observability/ai-stack/mcp-servers.html)** --- `spring.ai.tool` spans with `mcp.method.name` (external) + OAuth + lifecycle. External MCP latency, transport health, OAuth state. - :material-magnify:{ .lg .middle } **[MCP Inspector](/spring-ai-playground/docs/features/observability/ai-stack/mcp-inspector.html)** --- MCP primitive observations - Tools list, Resources read, Prompts get, Sampling, Elicitation, Roots. MCP server introspection traffic and server-initiated handlers. - :material-database-search:{ .lg .middle } **[Vector Database](/spring-ai-playground/docs/features/observability/ai-stack/vector-database.html)** --- `db.vector.client.operation` spans. RAG query rate, top_k distribution, similarity thresholds, multi-DB mix. - :material-chat-processing:{ .lg .middle } **[Agentic Chat](/spring-ai-playground/docs/features/observability/ai-stack/agentic-chat.html)** --- `TraceRecord` grouped by `conversationId` via `ConversationAggregator`. Per-conversation summaries - message count, cost, multi-turn rate, loop depth. - :material-shield-check:{ .lg .middle } **[Safety](/spring-ai-playground/docs/features/observability/ai-stack/safety.html)** --- `saip.risk.signal` / `saip.tool.risk` counters + sandbox, HITL, and tamper signals. MCP risk model (L0–L5) distribution, poisoning hits, integrity tamper rejects, human-approval rate.

Cross-references