From dba6c453c47116635398453cf8a49f778a422fe6 Mon Sep 17 00:00:00 2001 From: Barry Walker Date: Tue, 13 Jan 2026 17:38:26 -0500 Subject: [PATCH] fix: use /api/status/ for ping instead of /api/ MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The /api/ endpoint returns HTML (Swagger UI), not JSON. Changed ping to use /api/status/ which returns JSON with version info. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- .../Client/PaperlessClientTests.cs | 11 ++------ PaperlessMCP.Tests/Tools/HealthToolsTests.cs | 28 +++---------------- PaperlessMCP/Client/PaperlessClient.cs | 12 ++++---- 3 files changed, 13 insertions(+), 38 deletions(-) diff --git a/PaperlessMCP.Tests/Client/PaperlessClientTests.cs b/PaperlessMCP.Tests/Client/PaperlessClientTests.cs index db668b0..6b82617 100644 --- a/PaperlessMCP.Tests/Client/PaperlessClientTests.cs +++ b/PaperlessMCP.Tests/Client/PaperlessClientTests.cs @@ -31,14 +31,7 @@ public class PaperlessClientTests : IDisposable public async Task PingAsync_WhenSuccessful_ReturnsSuccess() { // Arrange - _factory.MockHandler - .When(HttpMethod.Get, "https://paperless.example.com/api/") - .Respond(req => - { - var response = new HttpResponseMessage(HttpStatusCode.OK); - response.Headers.Add("X-Version", "2.0.0"); - return response; - }); + _factory.SetupGet("api/status/", """{"pngx_version": "2.0.0", "server_os": "Linux"}"""); // Act var (success, version, error) = await _factory.Client.PingAsync(); @@ -53,7 +46,7 @@ public class PaperlessClientTests : IDisposable public async Task PingAsync_WhenUnauthorized_ReturnsFailure() { // Arrange - _factory.SetupGetWithStatus("api/", HttpStatusCode.Unauthorized); + _factory.SetupGetWithStatus("api/status/", HttpStatusCode.Unauthorized); // Act var (success, version, error) = await _factory.Client.PingAsync(); diff --git a/PaperlessMCP.Tests/Tools/HealthToolsTests.cs b/PaperlessMCP.Tests/Tools/HealthToolsTests.cs index f750065..d31d4f3 100644 --- a/PaperlessMCP.Tests/Tools/HealthToolsTests.cs +++ b/PaperlessMCP.Tests/Tools/HealthToolsTests.cs @@ -26,14 +26,7 @@ public class HealthToolsTests : IDisposable public async Task Ping_WhenConnected_ReturnsSuccess() { // Arrange - _factory.MockHandler - .When(HttpMethod.Get, "https://paperless.example.com/api/") - .Respond(req => - { - var response = new HttpResponseMessage(HttpStatusCode.OK); - response.Headers.Add("X-Version", "2.5.0"); - return response; - }); + _factory.SetupGet("api/status/", """{"pngx_version": "2.5.0", "server_os": "Linux"}"""); // Act var result = await HealthTools.Ping(_factory.Client); @@ -48,7 +41,7 @@ public class HealthToolsTests : IDisposable public async Task Ping_WhenConnectionFails_ReturnsError() { // Arrange - _factory.SetupGetWithStatus("api/", HttpStatusCode.Unauthorized); + _factory.SetupGetWithStatus("api/status/", HttpStatusCode.Unauthorized); // Act var result = await HealthTools.Ping(_factory.Client); @@ -63,16 +56,7 @@ public class HealthToolsTests : IDisposable public async Task GetCapabilities_ReturnsCapabilitiesInfo() { // Arrange - _factory.MockHandler - .When(HttpMethod.Get, "https://paperless.example.com/api/") - .Respond(req => - { - var response = new HttpResponseMessage(HttpStatusCode.OK); - response.Headers.Add("X-Version", "2.5.0"); - return response; - }); - - _factory.SetupGet("api/status/", "{}"); + _factory.SetupGet("api/status/", """{"pngx_version": "2.5.0", "server_os": "Linux"}"""); // Act var result = await HealthTools.GetCapabilities(_factory.Client); @@ -91,11 +75,7 @@ public class HealthToolsTests : IDisposable public async Task GetCapabilities_IncludesAllEndpointCategories() { // Arrange - _factory.MockHandler - .When(HttpMethod.Get, "https://paperless.example.com/api/") - .Respond(HttpStatusCode.OK); - - _factory.SetupGet("api/status/", "{}"); + _factory.SetupGet("api/status/", """{"pngx_version": "2.5.0"}"""); // Act var result = await HealthTools.GetCapabilities(_factory.Client); diff --git a/PaperlessMCP/Client/PaperlessClient.cs b/PaperlessMCP/Client/PaperlessClient.cs index 4d9f93b..30522b4 100644 --- a/PaperlessMCP/Client/PaperlessClient.cs +++ b/PaperlessMCP/Client/PaperlessClient.cs @@ -42,19 +42,21 @@ public class PaperlessClient #region Health & Status /// - /// Checks connectivity and returns API root information. + /// Checks connectivity and returns API status information. /// public async Task<(bool Success, string? Version, string? Error)> PingAsync(CancellationToken cancellationToken = default) { try { - var response = await _httpClient.GetAsync("api/", cancellationToken); + var response = await _httpClient.GetAsync("api/status/", cancellationToken); if (response.IsSuccessStatusCode) { - // Try to extract version from response headers or body - var version = response.Headers.TryGetValues("X-Version", out var versions) - ? versions.FirstOrDefault() + // Extract version from the status response + var content = await response.Content.ReadAsStringAsync(cancellationToken); + var json = JsonSerializer.Deserialize(content); + var version = json.TryGetProperty("pngx_version", out var versionProp) + ? versionProp.GetString() : null; return (true, version, null);