From db08853c6b80f7311438ae06cca9780d9c523b5d Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Thu, 29 Jan 2026 14:05:14 +0000
Subject: [PATCH 1/4] Initial plan
From edddd27e32127e7d9abe3b59d8e346b203c332a0 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Thu, 29 Jan 2026 14:13:16 +0000
Subject: [PATCH 2/4] Add MCP server project with core functionality
Co-authored-by: Lakritzator <708125+Lakritzator@users.noreply.github.com>
---
.../ConfluenceSettings.cs | 32 ++
.../Dapplo.Confluence.McpServer.csproj | 31 ++
.../McpServerHandler.cs | 114 +++++
.../Models/McpRequest.cs | 21 +
.../Models/McpResponse.cs | 36 ++
src/Dapplo.Confluence.McpServer/Program.cs | 128 ++++++
src/Dapplo.Confluence.McpServer/README.md | 411 +++++++++++++++++
.../Tools/ToolDefinition.cs | 18 +
.../Tools/ToolRegistry.cs | 427 ++++++++++++++++++
.../appsettings.json | 7 +
src/Dapplo.Confluence.sln | 50 +-
11 files changed, 1271 insertions(+), 4 deletions(-)
create mode 100644 src/Dapplo.Confluence.McpServer/ConfluenceSettings.cs
create mode 100644 src/Dapplo.Confluence.McpServer/Dapplo.Confluence.McpServer.csproj
create mode 100644 src/Dapplo.Confluence.McpServer/McpServerHandler.cs
create mode 100644 src/Dapplo.Confluence.McpServer/Models/McpRequest.cs
create mode 100644 src/Dapplo.Confluence.McpServer/Models/McpResponse.cs
create mode 100644 src/Dapplo.Confluence.McpServer/Program.cs
create mode 100644 src/Dapplo.Confluence.McpServer/README.md
create mode 100644 src/Dapplo.Confluence.McpServer/Tools/ToolDefinition.cs
create mode 100644 src/Dapplo.Confluence.McpServer/Tools/ToolRegistry.cs
create mode 100644 src/Dapplo.Confluence.McpServer/appsettings.json
diff --git a/src/Dapplo.Confluence.McpServer/ConfluenceSettings.cs b/src/Dapplo.Confluence.McpServer/ConfluenceSettings.cs
new file mode 100644
index 0000000..f829532
--- /dev/null
+++ b/src/Dapplo.Confluence.McpServer/ConfluenceSettings.cs
@@ -0,0 +1,32 @@
+namespace Dapplo.Confluence.McpServer;
+
+///
+/// Configuration settings for the Confluence MCP server
+///
+public class ConfluenceSettings
+{
+ ///
+ /// The Confluence server URL (e.g., https://yourcompany.atlassian.net)
+ ///
+ public string ConfluenceUrl { get; set; } = string.Empty;
+
+ ///
+ /// Authentication method: "basic" or "bearer"
+ ///
+ public string AuthType { get; set; } = "bearer";
+
+ ///
+ /// Username for basic authentication
+ ///
+ public string? Username { get; set; }
+
+ ///
+ /// Password or API token for basic authentication
+ ///
+ public string? Password { get; set; }
+
+ ///
+ /// Bearer token for token-based authentication
+ ///
+ public string? BearerToken { get; set; }
+}
diff --git a/src/Dapplo.Confluence.McpServer/Dapplo.Confluence.McpServer.csproj b/src/Dapplo.Confluence.McpServer/Dapplo.Confluence.McpServer.csproj
new file mode 100644
index 0000000..997ce6a
--- /dev/null
+++ b/src/Dapplo.Confluence.McpServer/Dapplo.Confluence.McpServer.csproj
@@ -0,0 +1,31 @@
+
+
+
+ Exe
+ net10.0
+ enable
+ enable
+ MCP (Model Context Protocol) server for Confluence API integration
+ mcp;confluence;atlassian;dapplo;copilot
+ false
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PreserveNewest
+
+
+
+
diff --git a/src/Dapplo.Confluence.McpServer/McpServerHandler.cs b/src/Dapplo.Confluence.McpServer/McpServerHandler.cs
new file mode 100644
index 0000000..ae4a546
--- /dev/null
+++ b/src/Dapplo.Confluence.McpServer/McpServerHandler.cs
@@ -0,0 +1,114 @@
+using Dapplo.Confluence.McpServer.Models;
+using Dapplo.Confluence.McpServer.Tools;
+using System.Text.Json;
+using System.Text.Json.Nodes;
+
+namespace Dapplo.Confluence.McpServer;
+
+///
+/// MCP server handler that processes JSON-RPC requests
+///
+public class McpServerHandler
+{
+ private readonly ToolRegistry _toolRegistry;
+ private const string McpVersion = "2024-11-05";
+
+ public McpServerHandler(IConfluenceClient confluenceClient)
+ {
+ _toolRegistry = new ToolRegistry(confluenceClient);
+ }
+
+ ///
+ /// Process an MCP request and return a response
+ ///
+ public async Task ProcessRequestAsync(McpRequest request)
+ {
+ try
+ {
+ var result = request.Method switch
+ {
+ "initialize" => HandleInitialize(request.Params),
+ "tools/list" => HandleToolsList(),
+ "tools/call" => await HandleToolsCallAsync(request.Params),
+ "ping" => new { },
+ _ => throw new InvalidOperationException($"Unknown method: {request.Method}")
+ };
+
+ return new McpResponse
+ {
+ Id = request.Id,
+ Result = result
+ };
+ }
+ catch (Exception ex)
+ {
+ return new McpResponse
+ {
+ Id = request.Id,
+ Error = new McpError
+ {
+ Code = -32603,
+ Message = ex.Message,
+ Data = new { exception = ex.GetType().Name }
+ }
+ };
+ }
+ }
+
+ private object HandleInitialize(object? parameters)
+ {
+ return new
+ {
+ protocolVersion = McpVersion,
+ capabilities = new
+ {
+ tools = new { }
+ },
+ serverInfo = new
+ {
+ name = "confluence-mcp-server",
+ version = "1.0.0"
+ }
+ };
+ }
+
+ private object HandleToolsList()
+ {
+ var tools = _toolRegistry.GetToolDefinitions();
+ return new { tools };
+ }
+
+ private async Task