diff --git a/Server.Tests/SdkAntiPatternValidatorTests.cs b/Server.Tests/SdkAntiPatternValidatorTests.cs
new file mode 100644
index 0000000..89c26de
--- /dev/null
+++ b/Server.Tests/SdkAntiPatternValidatorTests.cs
@@ -0,0 +1,884 @@
+//------------------------------------------------------------
+// Copyright (c) Microsoft Corporation. All rights reserved.
+//------------------------------------------------------------
+
+using System.Collections.Immutable;
+
+using OmniSharp.Extensions.LanguageServer.Protocol;
+using OmniSharp.Extensions.LanguageServer.Protocol.Models;
+
+using SdkLspServer.Diagnostics;
+using SdkLspServer.Diagnostics.Validators;
+using SdkLspServer.Services;
+
+namespace SdkLspServer.Tests;
+
+[TestClass]
+public sealed class SdkAntiPatternValidatorTests
+{
+ ///
+ /// Preamble that defines fake SDK types in the Azure.Connectors.Sdk namespace
+ /// so that the semantic model resolves connector client methods during analysis.
+ ///
+ private const string SdkPreamble = """
+ using System;
+ using System.Threading;
+ using System.Threading.Tasks;
+ namespace Azure.Connectors.Sdk
+ {
+ [AttributeUsage(AttributeTargets.Method)]
+ public sealed class ConnectorOperationAttribute : Attribute
+ {
+ public string ConnectorName { get; set; } = "";
+ public string OperationName { get; set; } = "";
+ }
+ public class ConnectorException : Exception
+ {
+ public int StatusCode { get; set; }
+ }
+ }
+ namespace Azure.Connectors.Sdk.Office365
+ {
+ public class Office365Client
+ {
+ public virtual Task