| MCP |
Server: Streamable HTTP endpoint POST /mcp (mcpserver profile, Spring AI MCP server) |
implemented |
core/app-config/src/main/resources/application-mcpserver.yml
core/mcpserver/src/main/java/com/agenticai/core/mcpserver/McpServerToolConfig.java
core/security/src/main/java/com/agenticai/core/security/SecurityConfig.java
core/mcpserver/pom.xml |
| MCP |
Server: curated tools list_my_agents, call_agent, list_my_workflows, call_workflow, search_knowledge |
implemented |
core/mcpserver/src/main/java/com/agenticai/core/mcpserver/tools/McpListAgentsToolCallback.java
core/mcpserver/src/main/java/com/agenticai/core/mcpserver/tools/McpCallAgentToolCallback.java
core/mcpserver/src/main/java/com/agenticai/core/mcpserver/tools/McpListMyWorkflowsToolCallback.java
core/mcpserver/src/main/java/com/agenticai/core/mcpserver/tools/McpCallWorkflowToolCallback.java
core/mcpserver/src/main/java/com/agenticai/core/mcpserver/tools/McpSearchKnowledgeToolCallback.java |
| MCP |
Server: async task tools start_agent_task/get_task/cancel_task (off by default: app.mcpserver.async-tasks.enabled) |
implemented |
core/mcpserver/src/main/java/com/agenticai/core/mcpserver/tools/McpAgentTaskToolCallbacks.java
core/app-config/src/main/resources/application-mcpserver.yml |
| MCP |
Server: per-grant dynamic tools agent_*/workflow_*/get_run via tools/list+tools/call hook (off by default: app.mcp-server.expose-agents.enabled) |
implemented |
core/mcpserver/src/main/java/com/agenticai/core/mcpserver/expose/McpExposureRpcHandler.java
core/mcpserver/src/main/java/com/agenticai/core/mcpserver/expose/McpExposedToolCatalog.java
core/app-config/src/main/resources/application-mcpserver.yml |
| MCP |
Server: API-key auth + per-key rate limiting (vmcp_ bearer keys, per-tenant grants) |
implemented |
core/mcpserver/src/main/java/com/agenticai/core/mcpserver/McpApiKeyAuthFilter.java
core/mcpserver/src/main/java/com/agenticai/core/mcpserver/McpServerRateLimiter.java
core/mcpserver/src/main/java/com/agenticai/core/mcpserver/McpServerAccessGrantService.java |
| MCP |
Client: stdio transport (incl. env-isolated spawn and mcp-stdio-runner sidecar routing) |
implemented |
core/agents-tools/src/main/java/com/agenticai/core/agents/tools/McpTransportFactory.java
core/mcp/src/main/java/com/agenticai/core/mcp/McpServerType.java |
| MCP |
Client: SSE transport |
implemented |
core/agents-tools/src/main/java/com/agenticai/core/agents/tools/McpTransportFactory.java
core/mcp/src/main/java/com/agenticai/core/mcp/McpServerType.java |
| MCP |
Client: Streamable HTTP transport |
implemented |
core/agents-tools/src/main/java/com/agenticai/core/agents/tools/McpTransportFactory.java
core/mcp/src/main/java/com/agenticai/core/mcp/McpServerType.java |
| MCP |
Client: OAuth 2.0 for remote servers (RFC 9728/8414 discovery, PKCE, dynamic registration, refresh; off by default: app.mcp.oauth.enabled) |
implemented |
core/mcp/src/main/java/com/agenticai/core/mcp/oauth/McpOAuthService.java
core/mcp/src/main/java/com/agenticai/core/mcp/oauth/McpOAuthPkce.java
core/mcp/src/main/java/com/agenticai/core/mcp/oauth/McpOAuthDiscovery.java
core/mcp/src/main/java/com/agenticai/core/mcp/oauth/McpOAuthController.java |
| MCP |
Client: resources/read for MCP Apps ui:// resources (off by default: app.mcp.apps.enabled) |
implemented |
core/agents-tools/src/main/java/com/agenticai/core/agents/tools/mcpapps/McpAppsService.java
core/agents-tools/src/main/java/com/agenticai/core/agents/tools/DynamicMcpConnectionManager.java |
| MCP |
Registry: per-tenant server registration + official MCP registry catalog search |
implemented |
core/mcp/src/main/java/com/agenticai/core/mcp/McpRegistryController.java
core/mcp/src/main/java/com/agenticai/core/mcp/registry/OfficialMcpRegistryClient.java |
| A2A |
Platform Agent Card at /.well-known/agent-card.json (+ legacy /.well-known/agent.json) |
implemented |
core/agents-interop/src/main/java/com/agenticai/core/agents/a2a/A2aAgentCardController.java
core/agents-interop/src/main/java/com/agenticai/core/agents/a2a/A2aAgentCardService.java |
| A2A |
Per-agent card GET /api/agents/{agentId}/a2a/agent-card.json (RUNNER-gated) |
implemented |
core/agents-interop/src/main/java/com/agenticai/core/agents/a2a/A2aAgentCardController.java
core/agents-interop/src/main/java/com/agenticai/core/agents/a2a/A2aAgentCardService.java |
| A2A |
Signed Agent Cards (detached JWS / Ed25519 signatures, public key at /.well-known/jwks.json) |
implemented |
core/agents/src/main/java/com/agenticai/core/agents/a2a/A2aCardSigningService.java
core/agents-interop/src/main/java/com/agenticai/core/agents/a2a/A2aAgentCardService.java
core/agents-interop/src/main/java/com/agenticai/core/agents/a2a/A2aAgentCardController.java |
| A2A |
JSON-RPC message/send (0.3) / SendMessage (1.0) at POST /api/a2a and POST /api/agents/{agentId}/a2a |
implemented |
core/agents-interop/src/main/java/com/agenticai/core/agents/a2a/A2aJsonRpcController.java |
| A2A |
JSON-RPC message/stream / SendStreamingMessage (SSE task + status/artifact frames) |
implemented |
core/agents-interop/src/main/java/com/agenticai/core/agents/a2a/A2aJsonRpcController.java |
| A2A |
JSON-RPC tasks/get / GetTask |
implemented |
core/agents-interop/src/main/java/com/agenticai/core/agents/a2a/A2aJsonRpcController.java |
| A2A |
JSON-RPC tasks/cancel / CancelTask |
implemented |
core/agents-interop/src/main/java/com/agenticai/core/agents/a2a/A2aJsonRpcController.java |
| A2A |
Dual wire dialects 0.3 and 1.0 selected by the A2A-Version header |
implemented |
core/agents-interop/src/main/java/com/agenticai/core/agents/a2a/A2aVersion.java
core/agents-interop/src/main/java/com/agenticai/core/agents/a2a/A2aWire.java |
| A2A |
HTTP+JSON/REST binding (spec section 11): POST /message:send, POST /message:stream (SSE), GET /tasks/{id}, POST /tasks/{id}:cancel under /api/a2a/rest and /api/agents/{agentId}/a2a/rest |
implemented |
core/agents-interop/src/main/java/com/agenticai/core/agents/a2a/A2aRestController.java
core/agents-interop/src/main/java/com/agenticai/core/agents/a2a/A2aAgentCardService.java
core/agents-interop/src/test/java/com/agenticai/core/agents/a2a/A2aRestControllerTest.java |
| A2A |
REST errors as google.rpc.Status with an ErrorInfo detail (domain a2a-protocol.org) and the section 5.4 HTTP statuses |
implemented |
core/agents-interop/src/main/java/com/agenticai/core/agents/a2a/A2aRestController.java |
| A2A |
Agent Card declares both bindings in supportedInterfaces (JSONRPC first, then HTTP+JSON), each with protocolVersion |
implemented |
core/agents-interop/src/main/java/com/agenticai/core/agents/a2a/A2aAgentCardService.java |
| A2A |
ListTasks (JSON-RPC and REST GET /tasks) returns tasks instead of an unsupported error |
missing |
core/agents-interop/src/main/java/com/agenticai/core/agents/a2a/A2aJsonRpcController.java
core/agents-interop/src/main/java/com/agenticai/core/agents/a2a/A2aRestController.java
core/agents-interop/src/main/java/com/agenticai/core/agents/a2a/A2aTaskStore.java |
| A2A |
SubscribeToTask (re-attach to a running task's stream) |
missing |
core/agents-interop/src/main/java/com/agenticai/core/agents/a2a/A2aJsonRpcController.java
core/agents-interop/src/main/java/com/agenticai/core/agents/a2a/A2aRestController.java |
| A2A |
gRPC binding (spec section 10) |
missing |
core/agents-interop/src/main/java/com/agenticai/core/agents/a2a/A2aGrpcService.java |
| A2A |
Agent Card caching headers (Cache-Control; ETag is a spec SHOULD) |
partial |
core/agents-interop/src/main/java/com/agenticai/core/agents/a2a/A2aAgentCardController.java |
| A2A |
Outbound client: a2a_call_agent tool with signed-card verification and an egress allow-list (off by default: app.a2a.client.enabled) |
implemented |
core/agents-interop/src/main/java/com/agenticai/core/agents/a2a/A2aClientService.java
core/agents/src/main/java/com/agenticai/core/agents/a2a/A2aRemoteAgentToolSource.java
core/agents-interop/src/main/java/com/agenticai/core/agents/a2a/A2aRemoteAgentToolCallback.java
core/agents-interop/src/main/java/com/agenticai/core/agents/a2a/A2aEgressGuard.java
core/agents-interop/src/main/java/com/agenticai/core/agents/a2a/A2aCardVerifier.java
core/agents-tools/src/main/java/com/agenticai/core/agents/tools/AgentIntegrationToolResolver.java |
| A2A |
Push notifications (tasks/pushNotificationConfig/*), tasks/resubscribe, extended agent card |
missing |
core/agents-interop/src/main/java/com/agenticai/core/agents/a2a/A2aJsonRpcController.java
core/agents-interop/src/main/java/com/agenticai/core/agents/a2a/A2aAgentCardService.java |
| AG-UI |
SSE run endpoint POST /api/agents/{agentId}/agui/run (RunAgentInput in, data:-framed event JSON out) |
implemented |
core/agents-interop/src/main/java/com/agenticai/core/agents/agui/AgUiRunController.java
core/agents-interop/src/main/java/com/agenticai/core/agents/agui/RunAgentInput.java |
| AG-UI |
Lifecycle events RUN_STARTED / RUN_FINISHED / RUN_ERROR |
implemented |
core/agents-interop/src/main/java/com/agenticai/core/agents/agui/AgUiEvent.java |
| AG-UI |
Text message events TEXT_MESSAGE_START / CONTENT / END |
implemented |
core/agents-interop/src/main/java/com/agenticai/core/agents/agui/AgUiEvent.java |
| AG-UI |
Tool call events TOOL_CALL_START / ARGS / END / RESULT |
implemented |
core/agents-interop/src/main/java/com/agenticai/core/agents/agui/AgUiEvent.java |
| AG-UI |
STATE_SNAPSHOT and CUSTOM events (plan, guardrail, handoff) |
implemented |
core/agents-interop/src/main/java/com/agenticai/core/agents/agui/AgUiEvent.java
core/agents-interop/src/main/java/com/agenticai/core/agents/agui/AgUiEventMapper.java |
| AG-UI |
Run event replay/resume GET .../agui/runs/{runId}/events (Last-Event-ID / ?after=, durable buffer) |
implemented |
core/agents-interop/src/main/java/com/agenticai/core/agents/agui/AgUiRunController.java
core/agents-interop/src/main/java/com/agenticai/core/agents/agui/AgUiRunEventBuffer.java |
| AG-UI |
Agent tool discovery GET .../agui/tools (protocol Tool shape) |
implemented |
core/agents-interop/src/main/java/com/agenticai/core/agents/agui/AgUiRunController.java |
| AG-UI |
Binary/protobuf transport |
missing |
core/agents-interop/src/main/java/com/agenticai/core/agents/agui/AgUiRunController.java |
| AG-UI |
Optional event types STEP_*, STATE_DELTA, MESSAGES_SNAPSHOT, RAW |
missing |
core/agents-interop/src/main/java/com/agenticai/core/agents/agui/AgUiEvent.java |
| OpenTelemetry |
OTLP/HTTP trace export (Micrometer Observation -> OTel bridge -> management.otlp.tracing.endpoint, Langfuse or any collector) |
implemented |
core/app-config/src/main/resources/application.yml
core/app/pom.xml |
| OpenTelemetry |
gen_ai.* attributes on LLM-call spans (operation.name=chat, request.model, usage.input/output_tokens, usage.reasoning.output_tokens, agent.id, agent.version, conversation.id, error.type) |
implemented |
core/chat/src/main/java/com/agenticai/core/chat/GenAiSpanRecorder.java |
| OpenTelemetry |
Renamed-attribute migration gen_ai.system -> gen_ai.provider.name (app.observability.genai-attrs: legacy/new/both, semconv v1.37.0) |
implemented |
core/chat/src/main/java/com/agenticai/core/chat/GenAiAttributeNames.java
core/app-config/src/main/resources/application.yml |
| OpenTelemetry |
invoke_agent span around agent-attributed calls (chat/execute_tool nest under it) |
implemented |
core/chat/src/main/java/com/agenticai/core/chat/AgentInvocationObservation.java
core/chat/src/main/java/com/agenticai/core/chat/LlmMetricsAdvisor.java
core/chat/src/main/java/com/agenticai/core/chat/LlmModelSupport.java |
| OpenTelemetry |
execute_tool span (gen_ai.operation.name=execute_tool, gen_ai.tool.name, gen_ai.tool.type) |
implemented |
core/chat/src/main/java/com/agenticai/core/chat/GenAiToolObservationConvention.java
core/chat/src/main/java/com/agenticai/core/chat/ResilientToolCallingManagerFactory.java |
| OpenTelemetry |
Tail sampling keeps errors + slow invoke_agent runs (off by default: app.observability.tail-sampling.enabled) |
implemented |
core/app/src/main/java/com/agenticai/core/common/tracing/TailSamplingSpanProcessor.java
core/app-config/src/main/resources/application.yml |
| OpenTelemetry |
Micrometer meters per LLM call (llm.calls, llm.call.errors, llm.latency, llm.cost.usd, cache-token counters) |
implemented |
core/chat/src/main/java/com/agenticai/core/chat/LlmMetricsAdvisor.java |