Skip to main content
Glama

DotNet MCP Server Demo

by kasirajan22
McpController.cs4.16 kB
using MCPDemo.Models; using MCPDemo.Services; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; namespace MCPDemo.Controllers { /// <summary> /// MCP (Model Context Protocol) Server API endpoints /// </summary> [ApiController] [Route("api/[controller]")] [Authorize] public class McpController : ControllerBase { private readonly IMcpServer _mcpServer; private readonly ILogger<McpController> _logger; public McpController(IMcpServer mcpServer, ILogger<McpController> logger) { _mcpServer = mcpServer; _logger = logger; } /// <summary> /// Handle MCP protocol messages /// </summary> /// <param name="message">The MCP message to process</param> /// <returns>MCP response message</returns> /// <response code="200">Returns the MCP response</response> /// <response code="401">Unauthorized - Invalid credentials</response> /// <response code="500">Internal server error</response> [HttpPost("message")] [ProducesResponseType(typeof(McpMessage), 200)] [ProducesResponseType(401)] [ProducesResponseType(typeof(McpMessage), 500)] public async Task<IActionResult> HandleMessage([FromBody] McpMessage message) { try { _logger.LogInformation($"Received MCP message: {message.Method} from user: {User.Identity?.Name}"); var response = await _mcpServer.HandleMessageAsync(message); return Ok(response); } catch (Exception ex) { _logger.LogError(ex, "Error handling MCP message"); return StatusCode(500, new McpMessage { Id = message.Id, Error = new McpError { Code = -32603, Message = "Internal server error" } }); } } /// <summary> /// Get all available MCP tools /// </summary> /// <returns>List of available tools</returns> /// <response code="200">Returns the list of available tools</response> /// <response code="401">Unauthorized - Invalid credentials</response> [HttpGet("tools")] [ProducesResponseType(200)] [ProducesResponseType(401)] public async Task<IActionResult> GetTools() { try { var tools = await _mcpServer.GetToolsAsync(); return Ok(new { tools }); } catch (Exception ex) { _logger.LogError(ex, "Error getting tools"); return StatusCode(500, "Internal server error"); } } /// <summary> /// Get all available MCP resources /// </summary> /// <returns>List of available resources</returns> /// <response code="200">Returns the list of available resources</response> /// <response code="401">Unauthorized - Invalid credentials</response> [HttpGet("resources")] [ProducesResponseType(200)] [ProducesResponseType(401)] public async Task<IActionResult> GetResources() { try { var resources = await _mcpServer.GetResourcesAsync(); return Ok(new { resources }); } catch (Exception ex) { _logger.LogError(ex, "Error getting resources"); return StatusCode(500, "Internal server error"); } } /// <summary> /// Health check endpoint - publicly accessible /// </summary> /// <returns>Health status</returns> /// <response code="200">Service is healthy</response> [HttpGet("health")] [AllowAnonymous] [ProducesResponseType(200)] public IActionResult Health() { return Ok(new { status = "healthy", timestamp = DateTime.UtcNow }); } } }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/kasirajan22/DotnetMCPServer'

If you have feedback or need assistance with the MCP directory API, please join our Discord server