Skip to content

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. Five 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"]
    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 mcp.transport, mcp.server, and mcp.kind 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

  • Tool Studio


    spring.ai.tool spans without mcp.transport (in-process) + sandbox.guard.blocked counter. In-process tool latency, error rate, sandbox prevention count.

  • MCP Servers


    spring.ai.tool spans with mcp.transport (external) + OAuth + lifecycle. External MCP latency, transport health, OAuth state.

  • MCP Inspector


    MCP primitive observations — Tools list, Resources read, Prompts get, Sampling, Elicitation, Roots. MCP server introspection traffic and server-initiated handlers.

  • Vector Database


    db.vector.client.operation spans. RAG query rate, top_k distribution, similarity thresholds, multi-DB mix.

  • Agentic Chat


    TraceRecord grouped by conversationId via ConversationAggregator. Per-conversation summaries — message count, cost, multi-turn rate, loop depth.

Cross-references