{"id":"sp1986sp-mcp-client-server-azure","name":"mcp-client-server-azure","homepage":null,"repo_url":"https://github.com/sp1986sp/mcp-client-server-azure","category":"ai-ml","subcategories":[],"tags":["ai-ml","spring-boot","spring-ai","azure-openai","mcp","rest","context-propagation","java"],"what_it_does":"A Maven multi-module Java (Spring Boot) demo showing an AI client-server architecture using Spring AI with Azure OpenAI. The client exposes a /chat REST endpoint and forwards prompts to the server while propagating headers/context. The server exposes tool endpoints (e.g., user management) and integrates Spring AI's MCP-style tool orchestration, with custom ThreadLocal-based context propagation for async/distributed tracing and request-scoped data.","use_cases":["Building an AI chat frontend that routes requests to an AI tools server","Demonstrating tool/function calling patterns with Azure OpenAI via Spring AI","Showcasing distributed tracing/context propagation across async boundaries in Java/Spring","Creating a template for REST-based AI tool endpoints (CRUD/search-style tools)"],"not_for":["Production deployments without additional security hardening (auth, input validation, threat modeling)","Environments requiring guaranteed, documented SLAs or mature operational guarantees","Use as a drop-in MCP server/client for arbitrary external MCP tooling (repo README describes MCP integration via Spring AI rather than a standalone MCP server endpoint contract)"],"best_when":"Used as a reference/demo/template to implement context propagation and tool orchestration between a chat client and an AI tool server backed by Azure OpenAI.","avoid_when":"Avoid using as-is for sensitive data workflows without adding authentication/authorization, robust validation, and verified operational controls.","alternatives":["Spring AI examples for Azure OpenAI tool/function calling","OpenAI/Azure SDK + your own function calling layer (or LangChain-style frameworks)","Standalone MCP servers from official/open-source MCP servers with well-documented tool contracts"],"af_score":33.0,"security_score":35.5,"reliability_score":20.0,"package_type":"mcp_server","discovery_source":["github"],"priority":"low","status":"evaluated","version_evaluated":null,"last_evaluated":"2026-04-04T20:01:23.499956+00:00","interface":{"has_rest_api":true,"has_graphql":false,"has_grpc":false,"has_mcp_server":false,"mcp_server_url":null,"has_sdk":false,"sdk_languages":[],"openapi_spec_url":null,"webhooks":false},"auth":{"methods":["Azure OpenAI API key via spring.ai.azure.openai.api-key (configuration secret)"],"oauth":false,"scopes":false,"notes":"The README does not describe authentication/authorization for the /chat or tool endpoints; it only mentions Azure OpenAI credentials for model access."},"pricing":{"model":"Azure OpenAI (deployment-name configured as gpt-4o","free_tier_exists":false,"free_tier_limits":null,"paid_tiers":[],"requires_credit_card":false,"estimated_workload_costs":null,"notes":"No pricing information for this demo; Azure OpenAI usage costs apply."},"requirements":{"requires_signup":false,"requires_credit_card":false,"domain_verification":false,"data_residency":[],"compliance":[],"min_contract":null},"agent_readiness":{"af_score":33.0,"security_score":35.5,"reliability_score":20.0,"mcp_server_quality":20.0,"documentation_accuracy":55.0,"error_message_quality":0.0,"error_message_notes":null,"auth_complexity":35.0,"rate_limit_clarity":0.0,"tls_enforcement":60.0,"auth_strength":20.0,"scope_granularity":0.0,"dependency_hygiene":50.0,"secret_handling":55.0,"security_notes":"Uses an Azure OpenAI API key via configuration (likely not hard-coded), which is a positive sign. However, the README does not describe authentication/authorization for the exposed REST endpoints (/chat and tool endpoints), does not mention input validation or rate limiting, and provides no evidence of structured error handling or secure logging practices for sensitive data.","uptime_documented":0.0,"version_stability":30.0,"breaking_changes_history":30.0,"error_recovery":20.0,"idempotency_support":"false","idempotency_notes":null,"pagination_style":"none","retry_guidance_documented":false,"known_agent_gotchas":["No documented contract for HTTP error bodies/status codes and no clear guidance on retry/backoff behavior","The demo emphasizes context propagation; tool implementations may rely on correct interceptor ordering and cleanup","Auth for server endpoints is not documented; agents should not assume protected endpoints or safe multi-tenant behavior"]}}