fix: improve URI template matching to properly escape special characters (#599)

- Enhanced DefaultMcpUriTemplateManager to use Pattern.quote() for escaping special regex characters like '?'
- Replaced simple string replacement regex generation with robust pattern building
- Added test case to verify URI matching with query parameters (e.g., "file://name/search?={search}")
- Fixed typo: renamed DeafaultMcpUriTemplateManagerFactory to DefaultMcpUriTemplateManagerFactory
- Updated all references across server classes and tests

Signed-off-by: Christian Tzolov <christian.tzolov@broadcom.com>
This commit is contained in:
Sheegan Sri G M 2025-10-04 09:42:58 +05:30 • committed by Christian Tzolov
commit 19a8c00a47

View file

@ -12,7 +12,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
import java.util.List;
import java.util.Map;
import io.modelcontextprotocol.util.DeafaultMcpUriTemplateManagerFactory;
import io.modelcontextprotocol.util.DefaultMcpUriTemplateManagerFactory;
import io.modelcontextprotocol.util.McpUriTemplateManager;
import io.modelcontextprotocol.util.McpUriTemplateManagerFactory;
import org.junit.jupiter.api.BeforeEach;
@ -29,7 +29,7 @@ public class McpUriTemplateManagerTests {
@BeforeEach
void setUp() {
this.uriTemplateFactory = new DeafaultMcpUriTemplateManagerFactory();
this.uriTemplateFactory = new DefaultMcpUriTemplateManagerFactory();
}
@Test
@ -94,4 +94,13 @@ public class McpUriTemplateManagerTests {
assertFalse(uriTemplateManager.matches("/api/users/123/comments/456"));
}
@Test
void shouldMatchUriWithQueryParameters() {
String templateWithQuery = "file://name/search?={search}";
var uriTemplateManager = this.uriTemplateFactory.create(templateWithQuery);
assertTrue(uriTemplateManager.matches("file://name/search?=abcd"),
"Should correctly match a URI containing query parameters.");
}
}