From 42859cd6d40f939419e6698e6e87c45497ac4ad7 Mon Sep 17 00:00:00 2001 From: Christopher Hertel Date: Tue, 1 Sep 2026 21:44:05 +0200 Subject: [PATCH] Prepare package slicing by strict namespace refactoring into Client, Schema, and Server --- CHANGELOG.md | 20 ++ README.md | 8 +- composer.json | 2 +- docs/advanced/events.md | 6 +- docs/advanced/extensions.md | 6 +- docs/client/connecting.md | 2 +- docs/client/errors.md | 8 +- docs/client/index.md | 2 +- docs/client/server-requests.md | 11 +- docs/get-started/first-server.md | 6 +- docs/handlers/client-communication.md | 2 +- docs/handlers/index.md | 2 +- docs/handlers/logging.md | 2 +- docs/index.md | 6 +- docs/run/authorization.md | 2 +- docs/run/framework-integration.md | 24 +- docs/run/http.md | 2 +- docs/run/protocol-eras.md | 2 +- docs/run/server-builder.md | 14 +- docs/run/stdio.md | 2 +- docs/servers/completions.md | 4 +- docs/servers/prompts.md | 4 +- docs/servers/registration.md | 4 +- docs/servers/resource-templates.md | 2 +- docs/servers/resources.md | 6 +- docs/servers/schemas.md | 2 +- docs/servers/tools.md | 4 +- examples/client/http_client_communication.php | 2 +- examples/client/http_discovery_calculator.php | 2 +- .../client/stateless_lifecycle_client.php | 2 +- .../client/stdio_client_communication.php | 2 +- .../client/stdio_discovery_calculator.php | 2 +- examples/client/stdio_elicitation.php | 2 +- examples/client/stdio_roots.php | 2 +- examples/server/bootstrap.php | 2 +- .../CachedCalculatorElements.php | 4 +- examples/server/cached-discovery/server.php | 2 +- .../ClientAwareService.php | 2 +- .../server/client-communication/server.php | 2 +- .../LoggingShowcaseHandlers.php | 3 +- examples/server/client-logging/server.php | 2 +- .../DiscoveredElements.php | 4 +- .../server/combined-registration/server.php | 2 +- .../complex-tool-schema/McpEventScheduler.php | 2 +- .../server/complex-tool-schema/server.php | 2 +- .../custom-dependencies/McpTaskHandlers.php | 4 +- .../server/custom-dependencies/server.php | 2 +- .../server/custom-method-handlers/server.php | 2 +- .../discovery-calculator/McpElements.php | 6 +- .../server/discovery-calculator/server.php | 2 +- .../discovery-userprofile/McpElements.php | 14 +- .../UserIdCompletionProvider.php | 2 +- .../server/discovery-userprofile/server.php | 2 +- .../elicitation/ElicitationHandlers.php | 2 +- examples/server/elicitation/server.php | 2 +- .../server/env-variables/EnvToolHandler.php | 2 +- examples/server/env-variables/server.php | 2 +- .../server/explicit-registration/server.php | 2 +- examples/server/mcp-apps/server.php | 2 +- .../server/oauth-keycloak/McpElements.php | 6 +- examples/server/oauth-keycloak/server.php | 2 +- .../server/oauth-microsoft/McpElements.php | 6 +- examples/server/oauth-microsoft/server.php | 2 +- .../SchemaShowcaseElements.php | 4 +- examples/server/schema-showcase/server.php | 2 +- .../server/stateless-lifecycle/server.php | 2 +- phpstan.dist.neon | 6 +- src/Client/Builder.php | 5 +- src/{ => Client}/Client.php | 11 +- src/Client/Configuration.php | 2 +- .../Exception/ConnectionException.php | 2 +- .../Exception/ElicitationException.php | 4 +- src/{ => Client}/Exception/Exception.php | 2 +- src/Client/Exception/ExceptionInterface.php | 21 ++ .../Exception/InvalidArgumentException.php | 2 +- src/{ => Client}/Exception/LogicException.php | 2 +- .../Exception/RequestException.php | 2 +- src/{ => Client}/Exception/RootsException.php | 4 +- src/Client/Exception/RuntimeException.php | 19 ++ .../Exception/SamplingException.php | 4 +- .../Request/ElicitationRequestHandler.php | 2 +- .../Request/ListRootsRequestHandler.php | 2 +- .../Request/SamplingRequestHandler.php | 4 +- src/Client/Protocol.php | 6 +- src/Client/Stateless/HeaderFactory.php | 2 +- src/Client/Stateless/InputRequestResolver.php | 2 +- src/Client/Stateless/RequestEnvelope.php | 2 +- src/Client/Transport/BaseTransport.php | 2 +- src/Client/Transport/HttpTransport.php | 4 +- src/Client/Transport/StdioTransport.php | 4 +- src/Client/Transport/TransportInterface.php | 3 +- src/Exception/TimeoutException.php | 21 -- src/Schema/Annotations.php | 2 +- src/Schema/Content/AudioContent.php | 4 +- src/Schema/Content/BlobResourceContents.php | 2 +- src/Schema/Content/EmbeddedResource.php | 4 +- src/Schema/Content/ImageContent.php | 2 +- src/Schema/Content/PromptMessage.php | 2 +- src/Schema/Content/ResourceLink.php | 2 +- src/Schema/Content/SamplingMessage.php | 2 +- src/Schema/Content/TextContent.php | 2 +- src/Schema/Content/TextResourceContents.php | 2 +- src/Schema/Content/ToolResultContent.php | 2 +- src/Schema/Content/ToolUseContent.php | 2 +- .../Elicitation/AbstractSchemaDefinition.php | 2 +- src/Schema/Elicitation/ElicitationSchema.php | 2 +- .../Elicitation/EnumSchemaDefinition.php | 2 +- .../MultiSelectEnumSchemaDefinition.php | 2 +- .../Elicitation/NumberSchemaDefinition.php | 2 +- .../Elicitation/StringSchemaDefinition.php | 2 +- .../TitledEnumSchemaDefinition.php | 2 +- .../TitledMultiSelectEnumSchemaDefinition.php | 2 +- src/Schema/Enum/ProtocolVersion.php | 2 +- .../Exception/ExceptionInterface.php | 2 +- .../Exception/InvalidArgumentException.php | 19 ++ .../InvalidInputMessageException.php | 4 +- src/Schema/Exception/LogicException.php | 19 ++ .../Exception/MissingRequestMetaException.php | 2 +- .../Exception/RuntimeException.php | 2 +- .../Extension/Apps/UiResourceContentMeta.php | 2 +- src/Schema/Extension/Apps/UiResourceCsp.php | 2 +- src/Schema/Extension/Apps/UiToolMeta.php | 2 +- src/Schema/Extension/ExtensionIdentifier.php | 2 +- src/Schema/Extension/ExtensionInterface.php | 2 +- src/Schema/Icon.php | 2 +- src/Schema/Implementation.php | 2 +- src/Schema/JsonRpc/Error.php | 2 +- src/Schema/JsonRpc/Notification.php | 2 +- src/Schema/JsonRpc/Request.php | 2 +- src/Schema/JsonRpc/Response.php | 2 +- src/{JsonRpc => Schema}/MessageFactory.php | 6 +- src/Schema/ModelPreferences.php | 2 +- .../Notification/CancelledNotification.php | 2 +- .../LoggingMessageNotification.php | 2 +- .../Notification/ProgressNotification.php | 2 +- .../ResourceUpdatedNotification.php | 2 +- src/Schema/Prompt.php | 2 +- src/Schema/PromptArgument.php | 2 +- src/Schema/Request/CallToolRequest.php | 2 +- .../Request/CompletionCompleteRequest.php | 2 +- .../Request/CreateSamplingMessageRequest.php | 2 +- src/Schema/Request/ElicitRequest.php | 2 +- src/Schema/Request/GetPromptRequest.php | 2 +- src/Schema/Request/InitializeRequest.php | 2 +- src/Schema/Request/ListPromptsRequest.php | 2 +- .../Request/ListResourceTemplatesRequest.php | 2 +- src/Schema/Request/ListResourcesRequest.php | 2 +- src/Schema/Request/ListToolsRequest.php | 2 +- src/Schema/Request/ReadResourceRequest.php | 2 +- .../Request/ResourceSubscribeRequest.php | 2 +- .../Request/ResourceUnsubscribeRequest.php | 2 +- src/Schema/Request/SetLogLevelRequest.php | 2 +- .../Stateless => Schema}/RequestMeta.php | 10 +- src/Schema/ResourceDefinition.php | 2 +- src/Schema/ResourceTemplate.php | 2 +- src/Schema/Result/CallToolResult.php | 2 +- .../Result/CompletionCompleteResult.php | 2 +- .../Result/CreateSamplingMessageResult.php | 2 +- src/Schema/Result/DiscoverResult.php | 3 +- src/Schema/Result/ElicitResult.php | 2 +- src/Schema/Result/GetPromptResult.php | 2 +- src/Schema/Result/InitializeResult.php | 3 +- src/Schema/Result/InputRequiredResult.php | 2 +- src/Schema/Result/ListPromptsResult.php | 3 +- .../Result/ListResourceTemplatesResult.php | 3 +- src/Schema/Result/ListResourcesResult.php | 3 +- src/Schema/Result/ListRootsResult.php | 2 +- src/Schema/Result/ListToolsResult.php | 3 +- src/Schema/Result/ReadResourceResult.php | 2 +- src/Schema/Root.php | 2 +- src/Schema/Tool.php | 2 +- src/Schema/ToolAnnotations.php | 2 +- src/Schema/ToolChoice.php | 2 +- src/Schema/Wire/McpHeader.php | 16 + src/Server/Builder.php | 41 ++- .../Attribute/CompletionProvider.php | 6 +- .../Capability/Attribute/McpPrompt.php | 2 +- .../Capability/Attribute/McpResource.php | 2 +- .../Attribute/McpResourceTemplate.php | 2 +- .../Capability/Attribute/McpTool.php | 2 +- .../Capability/Attribute/Schema.php | 2 +- .../Completion/EnumCompletionProvider.php | 4 +- .../Completion/ListCompletionProvider.php | 2 +- .../Completion/ProviderInterface.php | 2 +- .../Capability/Discovery/CachedDiscoverer.php | 2 +- .../Capability/Discovery/Discoverer.php | 34 ++- .../Discovery/DiscovererInterface.php | 2 +- .../Capability/Discovery/DiscoveryState.php | 10 +- .../Capability/Discovery/DocBlockParser.php | 2 +- .../Discovery/ElementMetadataResolver.php | 2 +- .../Capability/Discovery/HandlerResolver.php | 6 +- .../Capability/Discovery/SchemaGenerator.php | 12 +- .../Discovery/SchemaGeneratorInterface.php | 2 +- .../Capability/Discovery/SchemaValidator.php | 4 +- .../Formatter/PromptResultFormatter.php | 12 +- .../Formatter/ResourceResultFormatter.php | 4 +- .../Formatter/ToolResultFormatter.php | 2 +- .../Capability/Logger/ClientLogger.php | 2 +- src/{ => Server}/Capability/Registry.php | 32 +- .../Capability/Registry/Container.php | 6 +- .../Capability/Registry/ElementReference.php | 2 +- .../Registry/InjectableParameters.php | 2 +- .../Registry/Loader/ChainLoader.php | 4 +- .../Registry/Loader/DiscoveryLoader.php | 8 +- .../Registry/Loader/ExplicitElementLoader.php | 8 +- .../Registry/Loader/LoaderInterface.php | 4 +- .../Loader/ReflectedElementLoader.php | 28 +- .../Capability/Registry/PromptReference.php | 4 +- .../Capability/Registry/ReferenceHandler.php | 6 +- .../Registry/ReferenceHandlerInterface.php | 6 +- .../Capability/Registry/ResourceReference.php | 4 +- .../Registry/ResourceTemplateReference.php | 4 +- .../Capability/Registry/ToolReference.php | 4 +- .../Capability/RegistryInterface.php | 20 +- .../Capability/Tool/NameValidator.php | 2 +- src/Server/ClientGateway.php | 6 +- src/{ => Server}/Event/ErrorEvent.php | 2 +- src/{ => Server}/Event/NotificationEvent.php | 2 +- .../Event/PromptListChangedEvent.php | 2 +- src/{ => Server}/Event/RequestEvent.php | 2 +- .../Event/ResourceListChangedEvent.php | 2 +- .../ResourceTemplateListChangedEvent.php | 2 +- src/{ => Server}/Event/ResponseEvent.php | 2 +- .../Event/ToolListChangedEvent.php | 2 +- .../Exception/BadMethodCallException.php | 2 +- .../Exception/ClientException.php | 2 +- .../Exception/ClientRegistrationException.php | 4 +- .../Exception/ConfigurationException.php | 2 +- .../Exception/ContainerException.php | 2 +- src/Server/Exception/Exception.php | 19 ++ .../Exception/ExceptionInterface.php} | 6 +- .../Exception/InvalidArgumentException.php | 19 ++ .../Exception/InvalidCursorException.php | 4 +- src/Server/Exception/LogicException.php | 19 ++ ...ssingRequiredClientCapabilityException.php | 4 +- .../Exception/NotFoundExceptionInterface.php | 2 +- .../Exception/PromptGetException.php | 4 +- .../Exception/PromptNotFoundException.php | 4 +- .../Exception/RegistryException.php | 4 +- .../Exception/RequestStateException.php | 2 +- .../Exception/ResourceNotFoundException.php | 4 +- .../Exception/ResourceReadException.php | 4 +- src/Server/Exception/RuntimeException.php | 19 ++ .../Exception/ServiceNotFoundException.php | 2 +- .../Exception/ToolCallException.php | 4 +- .../Exception/ToolNotFoundException.php | 4 +- .../Handler/Request/CallToolHandler.php | 12 +- .../Request/CompletionCompleteHandler.php | 10 +- .../Handler/Request/GetPromptHandler.php | 10 +- .../Handler/Request/ListPromptsHandler.php | 4 +- .../Request/ListResourceTemplatesHandler.php | 4 +- .../Handler/Request/ListResourcesHandler.php | 4 +- .../Handler/Request/ListToolsHandler.php | 4 +- .../Handler/Request/ReadResourceHandler.php | 12 +- .../Request/ResourceSubscribeHandler.php | 4 +- .../Request/ResourceUnsubscribeHandler.php | 4 +- src/Server/InputRequiredShim.php | 2 +- src/Server/Protocol.php | 12 +- src/Server/RequestContext.php | 6 +- src/{ => Server}/Server.php | 4 +- src/Server/Session/FileSessionStore.php | 2 +- src/Server/Session/SessionManager.php | 2 +- src/Server/Stateless/ElicitationReplay.php | 2 +- src/Server/Stateless/RequestStateCodec.php | 4 +- .../Stateless/StandardHeaderValidator.php | 4 +- src/Server/Stateless/StatelessProtocol.php | 24 +- .../Subscription/InMemoryNotificationBus.php | 2 +- .../Subscription/Psr16NotificationBus.php | 4 +- .../Subscription/RegistryChangePublisher.php | 8 +- src/Server/Transport/CallbackStream.php | 2 +- .../Middleware/AuthorizationMiddleware.php | 2 +- .../ClientRegistrationMiddleware.php | 4 +- .../Http/Middleware/CorsMiddleware.php | 2 +- .../Http/Middleware/OAuthProxyMiddleware.php | 2 +- .../Http/OAuth/ClientRegistrarInterface.php | 2 +- .../Transport/Http/OAuth/JwksProvider.php | 2 +- .../Http/OAuth/JwtTokenValidator.php | 2 +- .../Transport/Http/OAuth/OidcDiscovery.php | 2 +- .../Http/OAuth/ProtectedResourceMetadata.php | 2 +- .../StatelessAwareTransportInterface.php | 2 +- src/Server/Transport/StdioTransport.php | 2 +- .../Transport/StreamableHttpTransport.php | 2 +- src/Server/Wire/CachePolicy.php | 2 +- src/Server/Wire/InboundClassifier.php | 21 +- src/Server/Wire/Rev2026Codec.php | 2 +- tests/Conformance/client.php | 2 +- tests/Conformance/server.php | 6 +- ...caseTest-tools_call-aggregate_samples.json | 18 ++ ...st-tools_call-aggregate_samples_empty.json | 15 + tests/Integration/DualEraExampleTestCase.php | 2 +- tests/Integration/Fixture/elicitation.php | 4 +- tests/Integration/Fixture/handshake.php | 2 +- tests/Integration/Fixture/notification.php | 2 +- tests/Integration/Fixture/request_timeout.php | 2 +- tests/Integration/Fixture/retry.php | 2 +- tests/Integration/Fixture/roots.php | 2 +- tests/Integration/Fixture/sampling.php | 4 +- tests/Integration/Fixture/sampling_tools.php | 2 +- tests/Integration/IntegrationTestCase.php | 4 +- tests/Integration/RequestTimeoutTest.php | 2 +- tests/Integration/RetryTest.php | 2 +- tests/Integration/StatelessClientTest.php | 2 +- tests/Unit/Client/BuilderTest.php | 4 +- tests/Unit/Client/ClientTest.php | 269 ++++++++++++++++- tests/Unit/Client/ConfigurationTest.php | 4 +- .../Request/ElicitationRequestHandlerTest.php | 2 +- .../Request/ListRootsRequestHandlerTest.php | 2 +- tests/Unit/Client/ProtocolTest.php | 6 +- .../Stateless/InputRequestResolverTest.php | 2 +- .../Client/Transport/HttpTransportTest.php | 4 +- .../Client/Transport/StdioTransportTest.php | 2 +- tests/Unit/ClientTest.php | 283 ------------------ .../Unit/Schema/Content/PromptMessageTest.php | 2 +- .../Unit/Schema/Content/ResourceLinkTest.php | 2 +- .../Schema/Content/SamplingMessageTest.php | 2 +- .../Schema/Content/ToolResultContentTest.php | 2 +- .../Schema/Content/ToolUseContentTest.php | 2 +- .../BooleanSchemaDefinitionTest.php | 2 +- .../Elicitation/ElicitationSchemaTest.php | 2 +- .../Elicitation/EnumSchemaDefinitionTest.php | 2 +- .../MultiSelectEnumSchemaDefinitionTest.php | 2 +- .../NumberSchemaDefinitionTest.php | 2 +- .../StringSchemaDefinitionTest.php | 2 +- .../TitledEnumSchemaDefinitionTest.php | 2 +- ...ledMultiSelectEnumSchemaDefinitionTest.php | 2 +- tests/Unit/Schema/ElicitationModeTest.php | 2 +- .../Extension/ExtensionIdentifierTest.php | 2 +- tests/Unit/Schema/IconTest.php | 2 +- tests/Unit/Schema/ImplementationTest.php | 2 +- .../MalformedInputTest.php | 6 +- .../MessageFactoryTest.php | 8 +- .../Unit/Schema/NonObjectOutputSchemaTest.php | 2 +- .../CreateSamplingMessageRequestTest.php | 2 +- tests/Unit/Schema/ResourceDefinitionTest.php | 2 +- tests/Unit/Schema/ResourceTemplateTest.php | 2 +- .../Unit/Schema/Result/CallToolResultTest.php | 2 +- .../CreateSamplingMessageResultTest.php | 2 +- tests/Unit/Schema/Result/ElicitResultTest.php | 2 +- .../Schema/Result/ListRootsResultTest.php | 2 +- tests/Unit/Schema/ToolChoiceTest.php | 2 +- .../Unit/Schema/ToolHeaderAnnotationTest.php | 2 +- tests/Unit/Server/BuilderTest.php | 21 +- .../Attribute/CompletionProviderFixture.php | 4 +- .../Attribute/CompletionProviderTest.php | 4 +- .../Capability/Attribute/McpPromptTest.php | 4 +- .../Attribute/McpResourceTemplateTest.php | 4 +- .../Capability/Attribute/McpResourceTest.php | 4 +- .../Capability/Attribute/McpToolTest.php | 4 +- .../Discovery/CachedDiscovererTest.php | 8 +- .../Discovery/DiscovererToolTitleTest.php | 6 +- .../Discovery/DiscoveryStateTest.php | 12 +- .../Capability/Discovery/DiscoveryTest.php | 24 +- .../Discovery/DocBlockParserTest.php | 4 +- .../Discovery/DocBlockTestFixture.php | 2 +- .../AlternativeFileNameToolHandler.class.inc | 4 +- .../Fixtures/DiscoverablePromptHandler.php | 8 +- .../Fixtures/DiscoverableResourceHandler.php | 4 +- .../Fixtures/DiscoverableTemplateHandler.php | 8 +- .../Fixtures/DiscoverableToolHandler.php | 4 +- .../Fixtures/DiscoverableUiHandler.php | 6 +- .../Fixtures/EnhancedCompletionHandler.php | 8 +- .../Fixtures/InvocablePromptFixture.php | 4 +- .../Fixtures/InvocableResourceFixture.php | 4 +- .../InvocableResourceTemplateFixture.php | 4 +- .../Fixtures/InvocableToolFixture.php | 4 +- .../Fixtures/NonDiscoverableClass.php | 2 +- .../Discovery/Fixtures/SubDir/HiddenTool.php | 4 +- .../Discovery/HandlerResolverTest.php | 10 +- .../Discovery/SchemaGeneratorFixture.php | 6 +- .../Discovery/SchemaGeneratorTest.php | 8 +- .../Discovery/SchemaGeneratorUnionTest.php | 8 +- .../Discovery/SchemaValidatorTest.php | 6 +- .../Capability/Discovery/UnionFixture.php | 2 +- .../Formatter/PromptResultFormatterTest.php | 6 +- .../Formatter/ResourceResultFormatterTest.php | 4 +- .../Formatter/ToolResultFormatterTest.php | 4 +- .../Capability/Logger/ClientLoggerTest.php | 4 +- .../Registry/Loader/ChainLoaderTest.php | 10 +- .../Registry/Loader/DiscoveryLoaderTest.php | 30 +- .../Loader/ExplicitElementLoaderTest.php | 33 +- ...eflectedElementLoaderResourceTitleTest.php | 6 +- .../ReflectedElementLoaderToolTitleTest.php | 6 +- .../Loader/Stub/MutableDiscoverer.php | 6 +- .../Registry/Loader/Stub/RecordingLoader.php | 6 +- .../Registry/Loader/Stub/ToolWriterLoader.php | 6 +- .../Registry/ReferenceHandlerTest.php | 10 +- .../{ => Server}/Capability/RegistryTest.php | 28 +- .../Capability/Tool/NameValidatorTest.php | 4 +- tests/Unit/Server/ClientGatewayTest.php | 4 +- .../Handler/Request/CallToolHandlerTest.php | 10 +- .../Request/CompletionCompleteHandlerTest.php | 10 +- .../Handler/Request/GetPromptHandlerTest.php | 10 +- .../Request/ListPromptsHandlerTest.php | 4 +- .../ListResourceTemplatesHandlerTest.php | 4 +- .../Request/ListResourcesHandlerTest.php | 4 +- .../Handler/Request/ListToolsHandlerTest.php | 4 +- .../Request/ReadResourceHandlerTest.php | 10 +- .../Request/ResourceSubscribeHandlerTest.php | 6 +- .../Handler/Request/ResourceSubscribeTest.php | 8 +- .../ResourceUnsubscribeHandlerTest.php | 6 +- .../Request/ResourceUnsubscribeTest.php | 8 +- tests/Unit/Server/ProtocolTest.php | 10 +- tests/Unit/{ => Server}/ServerTest.php | 4 +- .../Server/Session/FileSessionStoreTest.php | 4 +- .../Server/Session/SessionManagerTest.php | 2 +- .../Stateless/ElicitationReplayTest.php | 2 +- .../Stateless/RequestStateCodecTest.php | 4 +- .../Stateless/StandardHeaderValidatorTest.php | 4 +- .../Stateless/StatelessProtocolTest.php | 6 +- .../Subscription/NotificationBusTest.php | 4 +- .../Server/Transport/DualEraRoutingTest.php | 4 +- .../AuthorizationMiddlewareTest.php | 2 +- .../ClientRegistrationMiddlewareTest.php | 4 +- .../Http/Middleware/CorsMiddlewareTest.php | 2 +- ...rotectedResourceMetadataMiddlewareTest.php | 2 +- .../Transport/Http/OAuth/JwksProviderTest.php | 2 +- .../Http/OAuth/JwtTokenValidatorTest.php | 2 +- .../Http/OAuth/OidcDiscoveryTest.php | 2 +- .../OAuth/ProtectedResourceMetadataTest.php | 2 +- .../Transport/StatelessHttpTransportTest.php | 4 +- .../Server/Transport/StdioTransportTest.php | 2 +- .../Transport/StreamableHttpTransportTest.php | 2 +- tests/Unit/Server/Wire/CachePolicyTest.php | 2 +- .../Server/Wire/InboundClassifierTest.php | 2 +- 424 files changed, 1351 insertions(+), 1200 deletions(-) rename src/{ => Client}/Client.php (98%) rename src/{ => Client}/Exception/ConnectionException.php (92%) rename src/{ => Client}/Exception/ElicitationException.php (81%) rename src/{ => Client}/Exception/Exception.php (92%) create mode 100644 src/Client/Exception/ExceptionInterface.php rename src/{ => Client}/Exception/InvalidArgumentException.php (92%) rename src/{ => Client}/Exception/LogicException.php (92%) rename src/{ => Client}/Exception/RequestException.php (96%) rename src/{ => Client}/Exception/RootsException.php (82%) create mode 100644 src/Client/Exception/RuntimeException.php rename src/{ => Client}/Exception/SamplingException.php (82%) delete mode 100644 src/Exception/TimeoutException.php rename src/{ => Schema}/Exception/ExceptionInterface.php (92%) create mode 100644 src/Schema/Exception/InvalidArgumentException.php rename src/{ => Schema}/Exception/InvalidInputMessageException.php (83%) create mode 100644 src/Schema/Exception/LogicException.php rename src/{ => Schema}/Exception/MissingRequestMetaException.php (94%) rename src/{ => Schema}/Exception/RuntimeException.php (92%) rename src/{JsonRpc => Schema}/MessageFactory.php (98%) rename src/{Server/Stateless => Schema}/RequestMeta.php (94%) rename src/{ => Server}/Capability/Attribute/CompletionProvider.php (88%) rename src/{ => Server}/Capability/Attribute/McpPrompt.php (96%) rename src/{ => Server}/Capability/Attribute/McpResource.php (97%) rename src/{ => Server}/Capability/Attribute/McpResourceTemplate.php (97%) rename src/{ => Server}/Capability/Attribute/McpTool.php (97%) rename src/{ => Server}/Capability/Attribute/Schema.php (99%) rename src/{ => Server}/Capability/Completion/EnumCompletionProvider.php (92%) rename src/{ => Server}/Capability/Completion/ListCompletionProvider.php (94%) rename src/{ => Server}/Capability/Completion/ProviderInterface.php (93%) rename src/{ => Server}/Capability/Discovery/CachedDiscoverer.php (98%) rename src/{ => Server}/Capability/Discovery/Discoverer.php (95%) rename src/{ => Server}/Capability/Discovery/DiscovererInterface.php (96%) rename src/{ => Server}/Capability/Discovery/DiscoveryState.php (92%) rename src/{ => Server}/Capability/Discovery/DocBlockParser.php (98%) rename src/{ => Server}/Capability/Discovery/ElementMetadataResolver.php (96%) rename src/{ => Server}/Capability/Discovery/HandlerResolver.php (96%) rename src/{ => Server}/Capability/Discovery/SchemaGenerator.php (99%) rename src/{ => Server}/Capability/Discovery/SchemaGeneratorInterface.php (95%) rename src/{ => Server}/Capability/Discovery/SchemaValidator.php (99%) rename src/{ => Server}/Capability/Formatter/PromptResultFormatter.php (96%) rename src/{ => Server}/Capability/Formatter/ResourceResultFormatter.php (98%) rename src/{ => Server}/Capability/Formatter/ToolResultFormatter.php (98%) rename src/{ => Server}/Capability/Logger/ClientLogger.php (98%) rename src/{ => Server}/Capability/Registry.php (94%) rename src/{ => Server}/Capability/Registry/Container.php (98%) rename src/{ => Server}/Capability/Registry/ElementReference.php (93%) rename src/{ => Server}/Capability/Registry/InjectableParameters.php (97%) rename src/{ => Server}/Capability/Registry/Loader/ChainLoader.php (90%) rename src/{ => Server}/Capability/Registry/Loader/DiscoveryLoader.php (96%) rename src/{ => Server}/Capability/Registry/Loader/ExplicitElementLoader.php (95%) rename src/{ => Server}/Capability/Registry/Loader/LoaderInterface.php (81%) rename src/{ => Server}/Capability/Registry/Loader/ReflectedElementLoader.php (94%) rename src/{ => Server}/Capability/Registry/PromptReference.php (93%) rename src/{ => Server}/Capability/Registry/ReferenceHandler.php (98%) rename src/{ => Server}/Capability/Registry/ReferenceHandlerInterface.php (87%) rename src/{ => Server}/Capability/Registry/ResourceReference.php (95%) rename src/{ => Server}/Capability/Registry/ResourceTemplateReference.php (97%) rename src/{ => Server}/Capability/Registry/ToolReference.php (98%) rename src/{ => Server}/Capability/RegistryInterface.php (91%) rename src/{ => Server}/Capability/Tool/NameValidator.php (91%) rename src/{ => Server}/Event/ErrorEvent.php (97%) rename src/{ => Server}/Event/NotificationEvent.php (97%) rename src/{ => Server}/Event/PromptListChangedEvent.php (92%) rename src/{ => Server}/Event/RequestEvent.php (97%) rename src/{ => Server}/Event/ResourceListChangedEvent.php (92%) rename src/{ => Server}/Event/ResourceTemplateListChangedEvent.php (93%) rename src/{ => Server}/Event/ResponseEvent.php (98%) rename src/{ => Server}/Event/ToolListChangedEvent.php (92%) rename src/{ => Server}/Exception/BadMethodCallException.php (92%) rename src/{ => Server}/Exception/ClientException.php (95%) rename src/{ => Server}/Exception/ClientRegistrationException.php (80%) rename src/{ => Server}/Exception/ConfigurationException.php (92%) rename src/{ => Server}/Exception/ContainerException.php (92%) create mode 100644 src/Server/Exception/Exception.php rename src/{Exception/HandlerNotFoundException.php => Server/Exception/ExceptionInterface.php} (65%) create mode 100644 src/Server/Exception/InvalidArgumentException.php rename src/{ => Server}/Exception/InvalidCursorException.php (80%) create mode 100644 src/Server/Exception/LogicException.php rename src/{ => Server}/Exception/MissingRequiredClientCapabilityException.php (87%) rename src/{ => Server}/Exception/NotFoundExceptionInterface.php (92%) rename src/{ => Server}/Exception/PromptGetException.php (74%) rename src/{ => Server}/Exception/PromptNotFoundException.php (78%) rename src/{ => Server}/Exception/RegistryException.php (89%) rename src/{ => Server}/Exception/RequestStateException.php (94%) rename src/{ => Server}/Exception/ResourceNotFoundException.php (78%) rename src/{ => Server}/Exception/ResourceReadException.php (73%) create mode 100644 src/Server/Exception/RuntimeException.php rename src/{ => Server}/Exception/ServiceNotFoundException.php (92%) rename src/{ => Server}/Exception/ToolCallException.php (74%) rename src/{ => Server}/Exception/ToolNotFoundException.php (78%) rename src/{ => Server}/Server.php (96%) create mode 100644 tests/Inspector/Http/snapshots/HttpSchemaShowcaseTest-tools_call-aggregate_samples.json create mode 100644 tests/Inspector/Http/snapshots/HttpSchemaShowcaseTest-tools_call-aggregate_samples_empty.json delete mode 100644 tests/Unit/ClientTest.php rename tests/Unit/{JsonRpc => Schema}/MalformedInputTest.php (97%) rename tests/Unit/{JsonRpc => Schema}/MessageFactoryTest.php (99%) rename tests/Unit/{ => Server}/Capability/Attribute/CompletionProviderFixture.php (86%) rename tests/Unit/{ => Server}/Capability/Attribute/CompletionProviderTest.php (96%) rename tests/Unit/{ => Server}/Capability/Attribute/McpPromptTest.php (93%) rename tests/Unit/{ => Server}/Capability/Attribute/McpResourceTemplateTest.php (95%) rename tests/Unit/{ => Server}/Capability/Attribute/McpResourceTest.php (95%) rename tests/Unit/{ => Server}/Capability/Attribute/McpToolTest.php (96%) rename tests/Unit/{ => Server}/Capability/Discovery/CachedDiscovererTest.php (92%) rename tests/Unit/{ => Server}/Capability/Discovery/DiscovererToolTitleTest.php (84%) rename tests/Unit/{ => Server}/Capability/Discovery/DiscoveryStateTest.php (94%) rename tests/Unit/{ => Server}/Capability/Discovery/DiscoveryTest.php (91%) rename tests/Unit/{ => Server}/Capability/Discovery/DocBlockParserTest.php (98%) rename tests/Unit/{ => Server}/Capability/Discovery/DocBlockTestFixture.php (97%) rename tests/Unit/{ => Server}/Capability/Discovery/Fixtures/AlternativeFileNameToolHandler.class.inc (78%) rename tests/Unit/{ => Server}/Capability/Discovery/Fixtures/DiscoverablePromptHandler.php (83%) rename tests/Unit/{ => Server}/Capability/Discovery/Fixtures/DiscoverableResourceHandler.php (90%) rename tests/Unit/{ => Server}/Capability/Discovery/Fixtures/DiscoverableTemplateHandler.php (84%) rename tests/Unit/{ => Server}/Capability/Discovery/Fixtures/DiscoverableToolHandler.php (94%) rename tests/Unit/{ => Server}/Capability/Discovery/Fixtures/DiscoverableUiHandler.php (90%) rename tests/Unit/{ => Server}/Capability/Discovery/Fixtures/EnhancedCompletionHandler.php (87%) rename tests/Unit/{ => Server}/Capability/Discovery/Fixtures/InvocablePromptFixture.php (82%) rename tests/Unit/{ => Server}/Capability/Discovery/Fixtures/InvocableResourceFixture.php (81%) rename tests/Unit/{ => Server}/Capability/Discovery/Fixtures/InvocableResourceTemplateFixture.php (81%) rename tests/Unit/{ => Server}/Capability/Discovery/Fixtures/InvocableToolFixture.php (82%) rename tests/Unit/{ => Server}/Capability/Discovery/Fixtures/NonDiscoverableClass.php (89%) rename tests/Unit/{ => Server}/Capability/Discovery/Fixtures/SubDir/HiddenTool.php (76%) rename tests/Unit/{ => Server}/Capability/Discovery/HandlerResolverTest.php (95%) rename tests/Unit/{ => Server}/Capability/Discovery/SchemaGeneratorFixture.php (99%) rename tests/Unit/{ => Server}/Capability/Discovery/SchemaGeneratorTest.php (99%) rename tests/Unit/{ => Server}/Capability/Discovery/SchemaGeneratorUnionTest.php (96%) rename tests/Unit/{ => Server}/Capability/Discovery/SchemaValidatorTest.php (99%) rename tests/Unit/{ => Server}/Capability/Discovery/UnionFixture.php (94%) rename tests/Unit/{ => Server}/Capability/Formatter/PromptResultFormatterTest.php (98%) rename tests/Unit/{ => Server}/Capability/Formatter/ResourceResultFormatterTest.php (91%) rename tests/Unit/{ => Server}/Capability/Formatter/ToolResultFormatterTest.php (94%) rename tests/Unit/{ => Server}/Capability/Logger/ClientLoggerTest.php (96%) rename tests/Unit/{ => Server}/Capability/Registry/Loader/ChainLoaderTest.php (83%) rename tests/Unit/{ => Server}/Capability/Registry/Loader/DiscoveryLoaderTest.php (93%) rename tests/Unit/{ => Server}/Capability/Registry/Loader/ExplicitElementLoaderTest.php (91%) rename tests/Unit/{ => Server}/Capability/Registry/Loader/ReflectedElementLoaderResourceTitleTest.php (92%) rename tests/Unit/{ => Server}/Capability/Registry/Loader/ReflectedElementLoaderToolTitleTest.php (88%) rename tests/Unit/{ => Server}/Capability/Registry/Loader/Stub/MutableDiscoverer.php (77%) rename tests/Unit/{ => Server}/Capability/Registry/Loader/Stub/RecordingLoader.php (77%) rename tests/Unit/{ => Server}/Capability/Registry/Loader/Stub/ToolWriterLoader.php (83%) rename tests/Unit/{ => Server}/Capability/Registry/ReferenceHandlerTest.php (97%) rename tests/Unit/{ => Server}/Capability/RegistryTest.php (98%) rename tests/Unit/{ => Server}/Capability/Tool/NameValidatorTest.php (93%) rename tests/Unit/{ => Server}/ServerTest.php (98%) diff --git a/CHANGELOG.md b/CHANGELOG.md index f085872a..4fa31a47 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,26 @@ All notable changes to `mcp/sdk` will be documented in this file. +0.9.0 +----- + +* [BC Break] Split the root namespace into `Mcp\Schema`, `Mcp\Client` and `Mcp\Server` to prepare package slicing. `Mcp\Schema` depends on nothing, `Mcp\Client` and `Mcp\Server` depend on `Mcp\Schema` only — enforced by Deptrac (`make deptrac`). + * `Mcp\Server` => `Mcp\Server\Server` + * `Mcp\Client` => `Mcp\Client\Client` + * `Mcp\Capability\*` => `Mcp\Server\Capability\*` (`Attribute`, `Completion`, `Discovery`, `Formatter`, `Logger`, `Registry`, `Tool`, plus `Registry` and `RegistryInterface`) + * `Mcp\Event\*` => `Mcp\Server\Event\*` + * `Mcp\JsonRpc\MessageFactory` => `Mcp\Schema\MessageFactory` + * `Mcp\Server\Stateless\RequestMeta` => `Mcp\Schema\RequestMeta` +* [BC Break] Distribute `Mcp\Exception\*` across the three namespaces. + * `Mcp\Exception\{ExceptionInterface,InvalidArgumentException,LogicException,RuntimeException}` => the same names under `Mcp\Schema\Exception\`, `Mcp\Client\Exception\` and `Mcp\Server\Exception\` — pick the one matching the package you catch around + * `Mcp\Exception\Exception` => `Mcp\Client\Exception\Exception` and `Mcp\Server\Exception\Exception` + * `Mcp\Exception\{InvalidInputMessageException,MissingRequestMetaException}` => `Mcp\Schema\Exception\*` + * `Mcp\Exception\{ConnectionException,ElicitationException,RequestException,RootsException,SamplingException}` => `Mcp\Client\Exception\*` + * `Mcp\Exception\{BadMethodCallException,ClientException,ClientRegistrationException,ConfigurationException,ContainerException,InvalidCursorException,MissingRequiredClientCapabilityException,NotFoundExceptionInterface,PromptGetException,PromptNotFoundException,RegistryException,RequestStateException,ResourceNotFoundException,ResourceReadException,ServiceNotFoundException,ToolCallException,ToolNotFoundException}` => `Mcp\Server\Exception\*` + * `Mcp\Exception\TimeoutException` and `Mcp\Exception\HandlerNotFoundException` are removed; both were unused. + * `Mcp\Server\Exception\ExceptionInterface` and `Mcp\Client\Exception\ExceptionInterface` extend `Mcp\Schema\Exception\ExceptionInterface`, so catching the latter still catches any SDK exception. + * The named exceptions now extend their package's `RuntimeException`/`InvalidArgumentException` instead of the global ones, so `catch (Mcp\Server\Exception\RuntimeException)` reaches `ToolCallException`, `PromptGetException` and friends. + 0.8.0 ----- diff --git a/README.md b/README.md index 04965f85..dcfccc47 100644 --- a/README.md +++ b/README.md @@ -36,9 +36,9 @@ composer require mcp/sdk A server is a plain PHP class plus three lines of wiring: ```php -use Mcp\Capability\Attribute\McpResource; -use Mcp\Capability\Attribute\McpTool; -use Mcp\Server; +use Mcp\Server\Capability\Attribute\McpResource; +use Mcp\Server\Capability\Attribute\McpTool; +use Mcp\Server\Server; use Mcp\Server\Transport\StdioTransport; class Calculator @@ -72,7 +72,7 @@ The walkthrough in [First server](docs/get-started/first-server.md) explains eac ## Build a client ```php -use Mcp\Client; +use Mcp\Client\Client; use Mcp\Client\Transport\StdioTransport; $client = Client::builder() diff --git a/composer.json b/composer.json index 5c572b02..c7bd13af 100644 --- a/composer.json +++ b/composer.json @@ -84,7 +84,7 @@ "Mcp\\Tests\\": "tests/" }, "classmap": [ - "tests/Unit/Capability/Discovery/Fixtures/AlternativeFileNameToolHandler.class.inc" + "tests/Unit/Server/Capability/Discovery/Fixtures/AlternativeFileNameToolHandler.class.inc" ] }, "config": { diff --git a/docs/advanced/events.md b/docs/advanced/events.md index 590ad6ea..2bfc40d1 100644 --- a/docs/advanced/events.md +++ b/docs/advanced/events.md @@ -7,8 +7,8 @@ The MCP SDK provides a PSR-14 compatible event system that allows you to hook in Configure an event dispatcher when building your server: ```php -use Mcp\Event\RequestEvent; -use Mcp\Server; +use Mcp\Server\Event\RequestEvent; +use Mcp\Server\Server; use Symfony\Component\EventDispatcher\EventDispatcher; $dispatcher = new EventDispatcher(); @@ -86,7 +86,7 @@ These events are dispatched when the lists of available capabilities change: These events carry no data and are used to notify clients that they should refresh their capability lists. ```php -use Mcp\Event\ToolListChangedEvent; +use Mcp\Server\Event\ToolListChangedEvent; $dispatcher->addListener(ToolListChangedEvent::class, function (ToolListChangedEvent $event) { $logger->info('Tool list has changed, clients should refresh'); diff --git a/docs/advanced/extensions.md b/docs/advanced/extensions.md index 041f9862..e19acec0 100644 --- a/docs/advanced/extensions.md +++ b/docs/advanced/extensions.md @@ -7,7 +7,7 @@ the SDK places the advertisement correctly for whichever era the client speaks: ```php use Mcp\Schema\Extension\Apps\McpApps; -use Mcp\Server; +use Mcp\Server\Server; $server = Server::builder() ->setServerInfo('My Server', '1.0.0') @@ -112,11 +112,11 @@ descriptor marker: `McpApps::resourceMarker()` is a method call and cannot appea in an attribute, so spell it as `new \stdClass()` there. ```php -use Mcp\Capability\Attribute\McpResource; -use Mcp\Capability\Attribute\McpTool; use Mcp\Schema\Extension\Apps\McpApps; use Mcp\Schema\Extension\Apps\ToolVisibility; use Mcp\Schema\Extension\Apps\UiToolMeta; +use Mcp\Server\Capability\Attribute\McpResource; +use Mcp\Server\Capability\Attribute\McpTool; final class WeatherApp { diff --git a/docs/client/connecting.md b/docs/client/connecting.md index b060916c..f16737fd 100644 --- a/docs/client/connecting.md +++ b/docs/client/connecting.md @@ -13,7 +13,7 @@ The `Client\Builder` provides fluent configuration of client instances. ### Basic Configuration ```php -use Mcp\Client; +use Mcp\Client\Client; $client = Client::builder() ->setClientInfo('My Application', '1.0.0', 'Description of my client') diff --git a/docs/client/errors.md b/docs/client/errors.md index 94e27f99..7bf70705 100644 --- a/docs/client/errors.md +++ b/docs/client/errors.md @@ -7,7 +7,7 @@ The client throws exceptions for various error conditions: Thrown when connection or initialization fails: ```php -use Mcp\Exception\ConnectionException; +use Mcp\Client\Exception\ConnectionException; try { $client->connect($transport); @@ -21,7 +21,7 @@ try { Thrown when a request returns an error response: ```php -use Mcp\Exception\RequestException; +use Mcp\Client\Exception\RequestException; try { $result = $client->callTool('unknown_tool', []); @@ -38,12 +38,12 @@ Here's a comprehensive example demonstrating client usage: ```php-file createServerRequestFromGlobals(); @@ -57,13 +57,13 @@ Then create a controller that uses Symfony's PSR-7 bridge: ```php // In a Symfony controller +use Mcp\Server\Server; +use Mcp\Server\Transport\StreamableHttpTransport; +use Symfony\Bridge\PsrHttpMessage\Factory\HttpFoundationFactory; +use Symfony\Bridge\PsrHttpMessage\Factory\PsrHttpFactory; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; -use Symfony\Bridge\PsrHttpMessage\Factory\PsrHttpFactory; -use Symfony\Bridge\PsrHttpMessage\Factory\HttpFoundationFactory; -use Mcp\Server; -use Mcp\Server\Transport\StreamableHttpTransport; class McpController { @@ -99,10 +99,10 @@ Then create a controller that type-hints `ServerRequestInterface`: ```php // In a Laravel controller -use Psr\Http\Message\ServerRequestInterface; -use Psr\Http\Message\ResponseInterface; -use Mcp\Server; +use Mcp\Server\Server; use Mcp\Server\Transport\StreamableHttpTransport; +use Psr\Http\Message\ResponseInterface; +use Psr\Http\Message\ServerRequestInterface; class McpController { @@ -128,9 +128,9 @@ Slim Framework works natively with PSR-7. Create a route handler using Slim's built-in factories and container: ```php -use Slim\Factory\AppFactory; -use Mcp\Server; +use Mcp\Server\Server; use Mcp\Server\Transport\StreamableHttpTransport; +use Slim\Factory\AppFactory; $app = AppFactory::create(); diff --git a/docs/run/http.md b/docs/run/http.md index a57a8dbe..81862b30 100644 --- a/docs/run/http.md +++ b/docs/run/http.md @@ -184,7 +184,7 @@ exhaust memory. A value below `1` throws `InvalidArgumentException`. A JSON-RPC batch (top-level array) is capped at 100 messages. Oversized batches are rejected before any message is constructed, so a single small request cannot amplify into arbitrarily many operations. The cap -lives on `Mcp\JsonRpc\MessageFactory` and is not currently configurable through the builder — a server built +lives on `Mcp\Schema\MessageFactory` and is not currently configurable through the builder — a server built with `Server::builder()` always uses the default of 100. Single-message vs batch is determined from the decoded JSON type — a JSON object is a single message, a JSON array diff --git a/docs/run/protocol-eras.md b/docs/run/protocol-eras.md index 9c6cb28f..f68833ed 100644 --- a/docs/run/protocol-eras.md +++ b/docs/run/protocol-eras.md @@ -5,7 +5,7 @@ which of them answers. There is nothing to configure: ```php -use Mcp\Server; +use Mcp\Server\Server; use Mcp\Server\Transport\StreamableHttpTransport; $server = Server::builder() diff --git a/docs/run/server-builder.md b/docs/run/server-builder.md index 52d27e7c..ea325e61 100644 --- a/docs/run/server-builder.md +++ b/docs/run/server-builder.md @@ -11,7 +11,7 @@ There are two ways to obtain a server builder instance: ### Method 1: Static Builder Method (Recommended) ```php -use Mcp\Server; +use Mcp\Server\Server; $server = Server::builder() ->setServerInfo('My MCP Server', '1.0.0') @@ -41,7 +41,7 @@ Set the server's identity with name, version, and optional description: ```php use Mcp\Schema\Icon; -use Mcp\Server; +use Mcp\Server\Server; $server = Server::builder() ->setServerInfo( @@ -204,7 +204,7 @@ The container is used to resolve handlers and their dependencies when handlers i The SDK includes a basic container with simple auto-wiring capabilities. ```php -use Mcp\Capability\Registry\Container; +use Mcp\Server\Capability\Registry\Container; // Use the default basic container $container = new Container(); @@ -254,13 +254,13 @@ $server = Server::builder() Here's a comprehensive example showing all major configuration options: ```php -use Mcp\Server; +use Mcp\Server\Capability\Registry\Container; +use Mcp\Server\Server; use Mcp\Server\Session\FileSessionStore; -use Mcp\Capability\Registry\Container; +use Monolog\Handler\StreamHandler; +use Monolog\Logger; use Symfony\Component\Cache\Adapter\FilesystemAdapter; use Symfony\Component\Cache\Psr16Cache; -use Monolog\Logger; -use Monolog\Handler\StreamHandler; // Setup dependencies $logger = new Logger('mcp-server'); diff --git a/docs/run/stdio.md b/docs/run/stdio.md index 2f6ccca7..115c1a35 100644 --- a/docs/run/stdio.md +++ b/docs/run/stdio.md @@ -32,7 +32,7 @@ declare(strict_types=1); require_once __DIR__ . '/vendor/autoload.php'; -use Mcp\Server; +use Mcp\Server\Server; use Mcp\Server\Transport\StdioTransport; $server = Server::builder() diff --git a/docs/servers/completions.md b/docs/servers/completions.md index c4226205..d5c22337 100644 --- a/docs/servers/completions.md +++ b/docs/servers/completions.md @@ -9,7 +9,7 @@ Completion providers help MCP clients offer auto-completion suggestions for Reso Provide a static list of possible values: ```php -use Mcp\Capability\Attribute\CompletionProvider; +use Mcp\Server\Capability\Attribute\CompletionProvider; #[McpPrompt] public function generateContent( @@ -63,7 +63,7 @@ public function getTask( For dynamic completion logic: ```php -use Mcp\Capability\Completion\ProviderInterface; +use Mcp\Server\Capability\Completion\ProviderInterface; class UserIdCompletionProvider implements ProviderInterface { diff --git a/docs/servers/prompts.md b/docs/servers/prompts.md index 33da3c7c..d5be75f4 100644 --- a/docs/servers/prompts.md +++ b/docs/servers/prompts.md @@ -3,7 +3,7 @@ Prompts generate templates for AI interactions. ```php -use Mcp\Capability\Attribute\McpPrompt; +use Mcp\Server\Capability\Attribute\McpPrompt; class PromptGenerator { @@ -104,7 +104,7 @@ Prompt handlers can throw any exception, but the type determines how it's handle - **Any other exception**: Converted to JSON-RPC error response, but with a generic error message ```php -use Mcp\Exception\PromptGetException; +use Mcp\Server\Exception\PromptGetException; #[McpPrompt] public function generatePrompt(string $topic, string $style): array diff --git a/docs/servers/registration.md b/docs/servers/registration.md index e2dc563c..30ec97e6 100644 --- a/docs/servers/registration.md +++ b/docs/servers/registration.md @@ -190,9 +190,9 @@ template variables. ```php use Mcp\Schema\Tool; -use Mcp\Server; use Mcp\Server\ClientGateway; use Mcp\Server\Handler\ToolHandlerInterface; +use Mcp\Server\Server; final class WeatherHandler implements ToolHandlerInterface { @@ -220,7 +220,7 @@ $server = Server::builder() ``` `Builder::add()` validates the pairing at registration time. Pairing a `Tool` definition with, for example, a -`PromptHandlerInterface` raises `Mcp\Exception\InvalidArgumentException`. The schema value objects validate some of +`PromptHandlerInterface` raises `Mcp\Server\Exception\InvalidArgumentException`. The schema value objects validate some of their own input as well — `Tool` requires an object-typed input schema, `ResourceDefinition` and `ResourceTemplate` check the name pattern and URI — but an invalid tool or prompt *name* is not rejected, it is only logged as a warning when the element is registered. diff --git a/docs/servers/resource-templates.md b/docs/servers/resource-templates.md index 2cff71e4..aed2110c 100644 --- a/docs/servers/resource-templates.md +++ b/docs/servers/resource-templates.md @@ -9,7 +9,7 @@ is supported — `{var}`, one path segment each. Operators such as `{+var}`, `{# cannot contain `/`. ```php -use Mcp\Capability\Attribute\McpResourceTemplate; +use Mcp\Server\Capability\Attribute\McpResourceTemplate; class UserProvider { diff --git a/docs/servers/resources.md b/docs/servers/resources.md index 10736c48..1d7dbe0f 100644 --- a/docs/servers/resources.md +++ b/docs/servers/resources.md @@ -3,7 +3,7 @@ Resources provide access to static data that clients can read. ```php -use Mcp\Capability\Attribute\McpResource; +use Mcp\Server\Capability\Attribute\McpResource; class ConfigProvider { @@ -128,8 +128,8 @@ Resource handlers can throw any exception, but the type determines how it's hand - **Any other exception**: Converted to JSON-RPC error response, but with a generic error message ```php -use Mcp\Capability\Attribute\McpResourceTemplate; -use Mcp\Exception\ResourceReadException; +use Mcp\Server\Capability\Attribute\McpResourceTemplate; +use Mcp\Server\Exception\ResourceReadException; // A URI with variables is a resource *template*; `#[McpResource]` registers a // fixed URI and would never receive `$path`. Note a variable matches a single diff --git a/docs/servers/schemas.md b/docs/servers/schemas.md index d6d11d7f..de46c847 100644 --- a/docs/servers/schemas.md +++ b/docs/servers/schemas.md @@ -32,7 +32,7 @@ public function processUser( Add validation rules to specific parameters: ```php -use Mcp\Capability\Attribute\Schema; +use Mcp\Server\Capability\Attribute\Schema; #[McpTool] public function validateUser( diff --git a/docs/servers/tools.md b/docs/servers/tools.md index a919b401..122ec4af 100644 --- a/docs/servers/tools.md +++ b/docs/servers/tools.md @@ -3,7 +3,7 @@ Tools are callable functions that perform actions and return results. ```php -use Mcp\Capability\Attribute\McpTool; +use Mcp\Server\Capability\Attribute\McpTool; class Calculator { @@ -210,7 +210,7 @@ Tool handlers can throw any exception, but the type determines how it's handled: - **Any other exception**: Converted to JSON-RPC error response, but with a generic error message ```php -use Mcp\Exception\ToolCallException; +use Mcp\Server\Exception\ToolCallException; #[McpTool] public function divideNumbers(float $a, float $b): float diff --git a/examples/client/http_client_communication.php b/examples/client/http_client_communication.php index 4b6e1661..141b201f 100644 --- a/examples/client/http_client_communication.php +++ b/examples/client/http_client_communication.php @@ -31,7 +31,7 @@ require_once __DIR__.'/../../vendor/autoload.php'; -use Mcp\Client; +use Mcp\Client\Client; use Mcp\Client\Handler\Notification\LoggingNotificationHandler; use Mcp\Client\Handler\Request\SamplingCallbackInterface; use Mcp\Client\Handler\Request\SamplingRequestHandler; diff --git a/examples/client/http_discovery_calculator.php b/examples/client/http_discovery_calculator.php index 06de8797..0e39c153 100644 --- a/examples/client/http_discovery_calculator.php +++ b/examples/client/http_discovery_calculator.php @@ -23,7 +23,7 @@ require_once __DIR__.'/../../vendor/autoload.php'; -use Mcp\Client; +use Mcp\Client\Client; use Mcp\Client\Transport\HttpTransport; $endpoint = 'http://localhost:8000'; diff --git a/examples/client/stateless_lifecycle_client.php b/examples/client/stateless_lifecycle_client.php index 917028e5..9d8b427f 100644 --- a/examples/client/stateless_lifecycle_client.php +++ b/examples/client/stateless_lifecycle_client.php @@ -34,7 +34,7 @@ require_once __DIR__.'/../../vendor/autoload.php'; -use Mcp\Client; +use Mcp\Client\Client; use Mcp\Client\Handler\Request\RequestHandlerInterface; use Mcp\Client\Transport\HttpTransport; use Mcp\Schema\ClientCapabilities; diff --git a/examples/client/stdio_client_communication.php b/examples/client/stdio_client_communication.php index 28e41b6d..faf22155 100644 --- a/examples/client/stdio_client_communication.php +++ b/examples/client/stdio_client_communication.php @@ -22,7 +22,7 @@ require_once __DIR__.'/../../vendor/autoload.php'; -use Mcp\Client; +use Mcp\Client\Client; use Mcp\Client\Handler\Notification\LoggingNotificationHandler; use Mcp\Client\Handler\Request\SamplingCallbackInterface; use Mcp\Client\Handler\Request\SamplingRequestHandler; diff --git a/examples/client/stdio_discovery_calculator.php b/examples/client/stdio_discovery_calculator.php index 60719735..07a04d53 100644 --- a/examples/client/stdio_discovery_calculator.php +++ b/examples/client/stdio_discovery_calculator.php @@ -20,7 +20,7 @@ require_once __DIR__.'/../../vendor/autoload.php'; -use Mcp\Client; +use Mcp\Client\Client; use Mcp\Client\Transport\StdioTransport; use Mcp\Schema\Content\TextContent; use Mcp\Schema\Content\TextResourceContents; diff --git a/examples/client/stdio_elicitation.php b/examples/client/stdio_elicitation.php index 0780a8ec..fe31c85f 100644 --- a/examples/client/stdio_elicitation.php +++ b/examples/client/stdio_elicitation.php @@ -23,7 +23,7 @@ require_once __DIR__.'/../../vendor/autoload.php'; -use Mcp\Client; +use Mcp\Client\Client; use Mcp\Client\Handler\Request\ElicitationCallbackInterface; use Mcp\Client\Handler\Request\ElicitationRequestHandler; use Mcp\Client\Transport\StdioTransport; diff --git a/examples/client/stdio_roots.php b/examples/client/stdio_roots.php index b10e7431..b85ee637 100644 --- a/examples/client/stdio_roots.php +++ b/examples/client/stdio_roots.php @@ -25,7 +25,7 @@ require_once __DIR__.'/../../vendor/autoload.php'; -use Mcp\Client; +use Mcp\Client\Client; use Mcp\Client\Handler\Request\ListRootsRequestHandler; use Mcp\Client\Handler\Request\RootsCallbackInterface; use Mcp\Client\Transport\StdioTransport; diff --git a/examples/server/bootstrap.php b/examples/server/bootstrap.php index 99fcfdaf..9a18b1c4 100644 --- a/examples/server/bootstrap.php +++ b/examples/server/bootstrap.php @@ -11,7 +11,7 @@ use Http\Discovery\Psr17Factory; use Laminas\HttpHandlerRunner\Emitter\SapiEmitter; -use Mcp\Capability\Registry\Container; +use Mcp\Server\Capability\Registry\Container; use Mcp\Server\Transport\StdioTransport; use Mcp\Server\Transport\StreamableHttpTransport; use Mcp\Server\Transport\TransportInterface; diff --git a/examples/server/cached-discovery/CachedCalculatorElements.php b/examples/server/cached-discovery/CachedCalculatorElements.php index 07e97520..0c7976d3 100644 --- a/examples/server/cached-discovery/CachedCalculatorElements.php +++ b/examples/server/cached-discovery/CachedCalculatorElements.php @@ -11,8 +11,8 @@ namespace Mcp\Example\Server\CachedDiscovery; -use Mcp\Capability\Attribute\McpTool; -use Mcp\Exception\ToolCallException; +use Mcp\Server\Capability\Attribute\McpTool; +use Mcp\Server\Exception\ToolCallException; /** * Example MCP elements for demonstrating cached discovery. diff --git a/examples/server/cached-discovery/server.php b/examples/server/cached-discovery/server.php index 27e147be..b3b10ae0 100644 --- a/examples/server/cached-discovery/server.php +++ b/examples/server/cached-discovery/server.php @@ -13,7 +13,7 @@ require_once dirname(__DIR__).'/bootstrap.php'; chdir(__DIR__); -use Mcp\Server; +use Mcp\Server\Server; use Mcp\Server\Session\FileSessionStore; use Symfony\Component\Cache\Adapter\PhpFilesAdapter; use Symfony\Component\Cache\Psr16Cache; diff --git a/examples/server/client-communication/ClientAwareService.php b/examples/server/client-communication/ClientAwareService.php index 01cfc07d..06e7d6ec 100644 --- a/examples/server/client-communication/ClientAwareService.php +++ b/examples/server/client-communication/ClientAwareService.php @@ -11,7 +11,6 @@ namespace Mcp\Example\Server\ClientCommunication; -use Mcp\Capability\Attribute\McpTool; use Mcp\Schema\Content\SamplingMessage; use Mcp\Schema\Content\TextContent; use Mcp\Schema\Enum\LoggingLevel; @@ -19,6 +18,7 @@ use Mcp\Schema\Request\CreateSamplingMessageRequest; use Mcp\Schema\Request\ListRootsRequest; use Mcp\Schema\Result\InputRequiredResult; +use Mcp\Server\Capability\Attribute\McpTool; use Mcp\Server\RequestContext; use Psr\Log\LoggerInterface; diff --git a/examples/server/client-communication/server.php b/examples/server/client-communication/server.php index 16b4bd56..2167db4a 100644 --- a/examples/server/client-communication/server.php +++ b/examples/server/client-communication/server.php @@ -14,8 +14,8 @@ use Mcp\Schema\Enum\LoggingLevel; use Mcp\Schema\ServerCapabilities; -use Mcp\Server; use Mcp\Server\RequestContext; +use Mcp\Server\Server; use Mcp\Server\Session\FileSessionStore; $server = Server::builder() diff --git a/examples/server/client-logging/LoggingShowcaseHandlers.php b/examples/server/client-logging/LoggingShowcaseHandlers.php index 422efaf1..132b6972 100644 --- a/examples/server/client-logging/LoggingShowcaseHandlers.php +++ b/examples/server/client-logging/LoggingShowcaseHandlers.php @@ -11,8 +11,7 @@ namespace Mcp\Example\Server\ClientLogging; -use Mcp\Capability\Attribute\McpTool; -use Mcp\Capability\Logger\ClientLogger; +use Mcp\Server\Capability\Attribute\McpTool; use Mcp\Server\RequestContext; /** diff --git a/examples/server/client-logging/server.php b/examples/server/client-logging/server.php index 3ca523f2..1d884b37 100644 --- a/examples/server/client-logging/server.php +++ b/examples/server/client-logging/server.php @@ -13,7 +13,7 @@ require_once dirname(__DIR__).'/bootstrap.php'; chdir(__DIR__); -use Mcp\Server; +use Mcp\Server\Server; $server = Server::builder() ->setServerInfo('Client Logging', '1.0.0', 'Demonstration of MCP logging in capability handlers.') diff --git a/examples/server/combined-registration/DiscoveredElements.php b/examples/server/combined-registration/DiscoveredElements.php index c2f93ac3..6727544d 100644 --- a/examples/server/combined-registration/DiscoveredElements.php +++ b/examples/server/combined-registration/DiscoveredElements.php @@ -11,8 +11,8 @@ namespace Mcp\Example\Server\CombinedRegistration; -use Mcp\Capability\Attribute\McpResource; -use Mcp\Capability\Attribute\McpTool; +use Mcp\Server\Capability\Attribute\McpResource; +use Mcp\Server\Capability\Attribute\McpTool; final class DiscoveredElements { diff --git a/examples/server/combined-registration/server.php b/examples/server/combined-registration/server.php index 475ed419..a9239cd6 100644 --- a/examples/server/combined-registration/server.php +++ b/examples/server/combined-registration/server.php @@ -15,7 +15,7 @@ use Mcp\Example\Server\CombinedRegistration\ManualHandlers; use Mcp\Example\Server\CombinedRegistration\PreconfiguredGreeter; -use Mcp\Server; +use Mcp\Server\Server; use Mcp\Server\Session\FileSessionStore; // Built here so its constructor dependencies (a scalar the container cannot diff --git a/examples/server/complex-tool-schema/McpEventScheduler.php b/examples/server/complex-tool-schema/McpEventScheduler.php index 366c687e..22c4c061 100644 --- a/examples/server/complex-tool-schema/McpEventScheduler.php +++ b/examples/server/complex-tool-schema/McpEventScheduler.php @@ -11,9 +11,9 @@ namespace Mcp\Example\Server\ComplexToolSchema; -use Mcp\Capability\Attribute\McpTool; use Mcp\Example\Server\ComplexToolSchema\Model\EventPriority; use Mcp\Example\Server\ComplexToolSchema\Model\EventType; +use Mcp\Server\Capability\Attribute\McpTool; use Psr\Log\LoggerInterface; final class McpEventScheduler diff --git a/examples/server/complex-tool-schema/server.php b/examples/server/complex-tool-schema/server.php index 92f80b61..46093450 100644 --- a/examples/server/complex-tool-schema/server.php +++ b/examples/server/complex-tool-schema/server.php @@ -13,7 +13,7 @@ require_once dirname(__DIR__).'/bootstrap.php'; chdir(__DIR__); -use Mcp\Server; +use Mcp\Server\Server; use Mcp\Server\Session\FileSessionStore; $server = Server::builder() diff --git a/examples/server/custom-dependencies/McpTaskHandlers.php b/examples/server/custom-dependencies/McpTaskHandlers.php index affa2a7b..9af12a20 100644 --- a/examples/server/custom-dependencies/McpTaskHandlers.php +++ b/examples/server/custom-dependencies/McpTaskHandlers.php @@ -11,10 +11,10 @@ namespace Mcp\Example\Server\CustomDependencies; -use Mcp\Capability\Attribute\McpResource; -use Mcp\Capability\Attribute\McpTool; use Mcp\Example\Server\CustomDependencies\Service\StatsServiceInterface; use Mcp\Example\Server\CustomDependencies\Service\TaskRepositoryInterface; +use Mcp\Server\Capability\Attribute\McpResource; +use Mcp\Server\Capability\Attribute\McpTool; use Psr\Log\LoggerInterface; /** diff --git a/examples/server/custom-dependencies/server.php b/examples/server/custom-dependencies/server.php index 835a84b7..05982cc5 100644 --- a/examples/server/custom-dependencies/server.php +++ b/examples/server/custom-dependencies/server.php @@ -17,7 +17,7 @@ use Mcp\Example\Server\CustomDependencies\Service\StatsServiceInterface; use Mcp\Example\Server\CustomDependencies\Service\SystemStatsService; use Mcp\Example\Server\CustomDependencies\Service\TaskRepositoryInterface; -use Mcp\Server; +use Mcp\Server\Server; use Mcp\Server\Session\FileSessionStore; logger()->info('Starting MCP Custom Dependencies Server...'); diff --git a/examples/server/custom-method-handlers/server.php b/examples/server/custom-method-handlers/server.php index 461d9d96..7c832748 100644 --- a/examples/server/custom-method-handlers/server.php +++ b/examples/server/custom-method-handlers/server.php @@ -17,7 +17,7 @@ use Mcp\Example\Server\CustomMethodHandlers\ListToolsRequestHandler; use Mcp\Schema\ServerCapabilities; use Mcp\Schema\Tool; -use Mcp\Server; +use Mcp\Server\Server; use Mcp\Server\Session\FileSessionStore; logger()->info('Starting MCP Custom Method Handlers Server...'); diff --git a/examples/server/discovery-calculator/McpElements.php b/examples/server/discovery-calculator/McpElements.php index cabd3101..686fdeb3 100644 --- a/examples/server/discovery-calculator/McpElements.php +++ b/examples/server/discovery-calculator/McpElements.php @@ -11,10 +11,10 @@ namespace Mcp\Example\Server\DiscoveryCalculator; -use Mcp\Capability\Attribute\McpResource; -use Mcp\Capability\Attribute\McpTool; -use Mcp\Exception\ToolCallException; use Mcp\Schema\Icon; +use Mcp\Server\Capability\Attribute\McpResource; +use Mcp\Server\Capability\Attribute\McpTool; +use Mcp\Server\Exception\ToolCallException; use Psr\Log\LoggerInterface; use Psr\Log\NullLogger; diff --git a/examples/server/discovery-calculator/server.php b/examples/server/discovery-calculator/server.php index c6d75e4d..81aec9c8 100644 --- a/examples/server/discovery-calculator/server.php +++ b/examples/server/discovery-calculator/server.php @@ -13,7 +13,7 @@ require_once dirname(__DIR__).'/bootstrap.php'; chdir(__DIR__); -use Mcp\Server; +use Mcp\Server\Server; use Mcp\Server\Session\FileSessionStore; logger()->info('Starting MCP Calculator Server...'); diff --git a/examples/server/discovery-userprofile/McpElements.php b/examples/server/discovery-userprofile/McpElements.php index c8532544..46cf87d4 100644 --- a/examples/server/discovery-userprofile/McpElements.php +++ b/examples/server/discovery-userprofile/McpElements.php @@ -11,16 +11,16 @@ namespace Mcp\Example\Server\DiscoveryUserProfile; -use Mcp\Capability\Attribute\CompletionProvider; -use Mcp\Capability\Attribute\McpPrompt; -use Mcp\Capability\Attribute\McpResource; -use Mcp\Capability\Attribute\McpResourceTemplate; -use Mcp\Capability\Attribute\McpTool; -use Mcp\Exception\PromptGetException; -use Mcp\Exception\ResourceReadException; use Mcp\Schema\Content\Content; use Mcp\Schema\Content\ResourceLink; use Mcp\Schema\Content\TextContent; +use Mcp\Server\Capability\Attribute\CompletionProvider; +use Mcp\Server\Capability\Attribute\McpPrompt; +use Mcp\Server\Capability\Attribute\McpResource; +use Mcp\Server\Capability\Attribute\McpResourceTemplate; +use Mcp\Server\Capability\Attribute\McpTool; +use Mcp\Server\Exception\PromptGetException; +use Mcp\Server\Exception\ResourceReadException; use Psr\Log\LoggerInterface; /** diff --git a/examples/server/discovery-userprofile/UserIdCompletionProvider.php b/examples/server/discovery-userprofile/UserIdCompletionProvider.php index bee4ffa6..7d99f758 100644 --- a/examples/server/discovery-userprofile/UserIdCompletionProvider.php +++ b/examples/server/discovery-userprofile/UserIdCompletionProvider.php @@ -11,7 +11,7 @@ namespace Mcp\Example\Server\DiscoveryUserProfile; -use Mcp\Capability\Completion\ProviderInterface; +use Mcp\Server\Capability\Completion\ProviderInterface; final class UserIdCompletionProvider implements ProviderInterface { diff --git a/examples/server/discovery-userprofile/server.php b/examples/server/discovery-userprofile/server.php index 25448188..96c6b574 100644 --- a/examples/server/discovery-userprofile/server.php +++ b/examples/server/discovery-userprofile/server.php @@ -13,7 +13,7 @@ require_once dirname(__DIR__).'/bootstrap.php'; chdir(__DIR__); -use Mcp\Server; +use Mcp\Server\Server; use Mcp\Server\Session\FileSessionStore; $server = Server::builder() diff --git a/examples/server/elicitation/ElicitationHandlers.php b/examples/server/elicitation/ElicitationHandlers.php index 9ae87f95..2686a6c1 100644 --- a/examples/server/elicitation/ElicitationHandlers.php +++ b/examples/server/elicitation/ElicitationHandlers.php @@ -11,13 +11,13 @@ namespace Mcp\Example\Server\Elicitation; -use Mcp\Capability\Attribute\McpTool; use Mcp\Schema\Elicitation\BooleanSchemaDefinition; use Mcp\Schema\Elicitation\ElicitationSchema; use Mcp\Schema\Elicitation\EnumSchemaDefinition; use Mcp\Schema\Elicitation\NumberSchemaDefinition; use Mcp\Schema\Elicitation\StringSchemaDefinition; use Mcp\Schema\Result\ElicitResult; +use Mcp\Server\Capability\Attribute\McpTool; use Mcp\Server\RequestContext; use Psr\Log\LoggerInterface; diff --git a/examples/server/elicitation/server.php b/examples/server/elicitation/server.php index 28a9b917..9ef968ee 100644 --- a/examples/server/elicitation/server.php +++ b/examples/server/elicitation/server.php @@ -21,7 +21,7 @@ chdir(__DIR__); use Mcp\Schema\ServerCapabilities; -use Mcp\Server; +use Mcp\Server\Server; use Mcp\Server\Session\FileSessionStore; $server = Server::builder() diff --git a/examples/server/env-variables/EnvToolHandler.php b/examples/server/env-variables/EnvToolHandler.php index 0520a715..c93539d5 100644 --- a/examples/server/env-variables/EnvToolHandler.php +++ b/examples/server/env-variables/EnvToolHandler.php @@ -11,7 +11,7 @@ namespace Mcp\Example\Server\EnvVariables; -use Mcp\Capability\Attribute\McpTool; +use Mcp\Server\Capability\Attribute\McpTool; final class EnvToolHandler { diff --git a/examples/server/env-variables/server.php b/examples/server/env-variables/server.php index 48c43825..6562a906 100644 --- a/examples/server/env-variables/server.php +++ b/examples/server/env-variables/server.php @@ -13,7 +13,7 @@ require_once dirname(__DIR__).'/bootstrap.php'; chdir(__DIR__); -use Mcp\Server; +use Mcp\Server\Server; /* |-------------------------------------------------------------------------- diff --git a/examples/server/explicit-registration/server.php b/examples/server/explicit-registration/server.php index 977ee439..617f3f39 100644 --- a/examples/server/explicit-registration/server.php +++ b/examples/server/explicit-registration/server.php @@ -15,7 +15,7 @@ use Mcp\Example\Server\ExplicitRegistration\SimpleHandlers; use Mcp\Schema\ServerCapabilities; -use Mcp\Server; +use Mcp\Server\Server; logger()->info('Starting MCP Manual Registration Server...'); diff --git a/examples/server/mcp-apps/server.php b/examples/server/mcp-apps/server.php index d61c15a0..8e18d00c 100644 --- a/examples/server/mcp-apps/server.php +++ b/examples/server/mcp-apps/server.php @@ -17,7 +17,7 @@ use Mcp\Schema\Extension\Apps\McpApps; use Mcp\Schema\Extension\Apps\ToolVisibility; use Mcp\Schema\Extension\Apps\UiToolMeta; -use Mcp\Server; +use Mcp\Server\Server; use Mcp\Server\Session\FileSessionStore; logger()->info('Starting MCP Apps Example Server...'); diff --git a/examples/server/oauth-keycloak/McpElements.php b/examples/server/oauth-keycloak/McpElements.php index b7234c7f..1ec6e34c 100644 --- a/examples/server/oauth-keycloak/McpElements.php +++ b/examples/server/oauth-keycloak/McpElements.php @@ -11,9 +11,9 @@ namespace Mcp\Example\Server\OAuthKeycloak; -use Mcp\Capability\Attribute\McpPrompt; -use Mcp\Capability\Attribute\McpResource; -use Mcp\Capability\Attribute\McpTool; +use Mcp\Server\Capability\Attribute\McpPrompt; +use Mcp\Server\Capability\Attribute\McpResource; +use Mcp\Server\Capability\Attribute\McpTool; use Mcp\Server\RequestContext; /** diff --git a/examples/server/oauth-keycloak/server.php b/examples/server/oauth-keycloak/server.php index fdaae7a0..ae98c859 100644 --- a/examples/server/oauth-keycloak/server.php +++ b/examples/server/oauth-keycloak/server.php @@ -13,7 +13,7 @@ use Http\Discovery\Psr17Factory; use Laminas\HttpHandlerRunner\Emitter\SapiEmitter; -use Mcp\Server; +use Mcp\Server\Server; use Mcp\Server\Session\FileSessionStore; use Mcp\Server\Transport\Http\Middleware\AuthorizationMiddleware; use Mcp\Server\Transport\Http\Middleware\OAuthRequestMetaMiddleware; diff --git a/examples/server/oauth-microsoft/McpElements.php b/examples/server/oauth-microsoft/McpElements.php index 48208f22..a30dc8dd 100644 --- a/examples/server/oauth-microsoft/McpElements.php +++ b/examples/server/oauth-microsoft/McpElements.php @@ -11,9 +11,9 @@ namespace Mcp\Example\Server\OAuthMicrosoft; -use Mcp\Capability\Attribute\McpPrompt; -use Mcp\Capability\Attribute\McpResource; -use Mcp\Capability\Attribute\McpTool; +use Mcp\Server\Capability\Attribute\McpPrompt; +use Mcp\Server\Capability\Attribute\McpResource; +use Mcp\Server\Capability\Attribute\McpTool; use Mcp\Server\RequestContext; /** diff --git a/examples/server/oauth-microsoft/server.php b/examples/server/oauth-microsoft/server.php index c4fae598..91bedc94 100644 --- a/examples/server/oauth-microsoft/server.php +++ b/examples/server/oauth-microsoft/server.php @@ -14,7 +14,7 @@ use Http\Discovery\Psr17Factory; use Laminas\HttpHandlerRunner\Emitter\SapiEmitter; use Mcp\Example\Server\OAuthMicrosoft\MicrosoftJwtTokenValidator; -use Mcp\Server; +use Mcp\Server\Server; use Mcp\Server\Session\FileSessionStore; use Mcp\Server\Transport\Http\Middleware\AuthorizationMiddleware; use Mcp\Server\Transport\Http\Middleware\OAuthProxyMiddleware; diff --git a/examples/server/schema-showcase/SchemaShowcaseElements.php b/examples/server/schema-showcase/SchemaShowcaseElements.php index 294d9680..d2acb91d 100644 --- a/examples/server/schema-showcase/SchemaShowcaseElements.php +++ b/examples/server/schema-showcase/SchemaShowcaseElements.php @@ -11,8 +11,8 @@ namespace Mcp\Example\Server\SchemaShowcase; -use Mcp\Capability\Attribute\McpTool; -use Mcp\Capability\Attribute\Schema; +use Mcp\Server\Capability\Attribute\McpTool; +use Mcp\Server\Capability\Attribute\Schema; use Psr\Log\LoggerInterface; final class SchemaShowcaseElements diff --git a/examples/server/schema-showcase/server.php b/examples/server/schema-showcase/server.php index 86c2bf77..7dbbc336 100644 --- a/examples/server/schema-showcase/server.php +++ b/examples/server/schema-showcase/server.php @@ -14,7 +14,7 @@ chdir(__DIR__); use Mcp\Schema\Icon; -use Mcp\Server; +use Mcp\Server\Server; use Mcp\Server\Session\FileSessionStore; $server = Server::builder() diff --git a/examples/server/stateless-lifecycle/server.php b/examples/server/stateless-lifecycle/server.php index e08a8709..8500a395 100644 --- a/examples/server/stateless-lifecycle/server.php +++ b/examples/server/stateless-lifecycle/server.php @@ -21,8 +21,8 @@ use Mcp\Schema\Result\CallToolResult; use Mcp\Schema\Result\InputRequiredResult; use Mcp\Schema\ServerCapabilities; -use Mcp\Server; use Mcp\Server\RequestContext; +use Mcp\Server\Server; use Mcp\Server\Session\FileSessionStore; use Mcp\Server\Subscription\InMemoryNotificationBus; use Mcp\Server\Wire\CachePolicy; diff --git a/phpstan.dist.neon b/phpstan.dist.neon index 259c4686..dfb6814b 100644 --- a/phpstan.dist.neon +++ b/phpstan.dist.neon @@ -9,8 +9,8 @@ parameters: - tests/ excludePaths: - examples/cli/vendor/* (?) - - tests/Unit/Capability/Discovery/Fixtures/ - - tests/Unit/Capability/Discovery/SchemaGeneratorFixture.php + - tests/Unit/Server/Capability/Discovery/Fixtures/ + - tests/Unit/Server/Capability/Discovery/SchemaGeneratorFixture.php treatPhpDocTypesAsCertain: false ignoreErrors: - @@ -20,5 +20,5 @@ parameters: # These errors should actually be fixed, but are ignored for now - identifier: missingType.iterableValue - path: src/Capability/Discovery/SchemaGenerator.php + path: src/Server/Capability/Discovery/SchemaGenerator.php count: 12 diff --git a/src/Client/Builder.php b/src/Client/Builder.php index 098b6e6a..1939442b 100644 --- a/src/Client/Builder.php +++ b/src/Client/Builder.php @@ -11,11 +11,10 @@ namespace Mcp\Client; -use Mcp\Client; +use Mcp\Client\Exception\InvalidArgumentException; +use Mcp\Client\Exception\LogicException; use Mcp\Client\Handler\Notification\NotificationHandlerInterface; use Mcp\Client\Handler\Request\RequestHandlerInterface; -use Mcp\Exception\InvalidArgumentException; -use Mcp\Exception\LogicException; use Mcp\Schema\ClientCapabilities; use Mcp\Schema\Enum\ProtocolVersion; use Mcp\Schema\Extension\ExtensionInterface; diff --git a/src/Client.php b/src/Client/Client.php similarity index 98% rename from src/Client.php rename to src/Client/Client.php index 532f60a2..bd5b0e18 100644 --- a/src/Client.php +++ b/src/Client/Client.php @@ -9,15 +9,12 @@ * file that was distributed with this source code. */ -namespace Mcp; +namespace Mcp\Client; -use Mcp\Client\Builder; -use Mcp\Client\Configuration; -use Mcp\Client\Protocol; +use Mcp\Client\Exception\ConnectionException; +use Mcp\Client\Exception\RequestException; +use Mcp\Client\Exception\RuntimeException; use Mcp\Client\Transport\TransportInterface; -use Mcp\Exception\ConnectionException; -use Mcp\Exception\RequestException; -use Mcp\Exception\RuntimeException; use Mcp\Schema\Enum\LoggingLevel; use Mcp\Schema\Enum\ProtocolVersion; use Mcp\Schema\Implementation; diff --git a/src/Client/Configuration.php b/src/Client/Configuration.php index f0ed6f73..4125972d 100644 --- a/src/Client/Configuration.php +++ b/src/Client/Configuration.php @@ -11,7 +11,7 @@ namespace Mcp\Client; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Client\Exception\InvalidArgumentException; use Mcp\Schema\ClientCapabilities; use Mcp\Schema\Enum\ProtocolVersion; use Mcp\Schema\Implementation; diff --git a/src/Exception/ConnectionException.php b/src/Client/Exception/ConnectionException.php similarity index 92% rename from src/Exception/ConnectionException.php rename to src/Client/Exception/ConnectionException.php index 4e4527f5..dec5f9db 100644 --- a/src/Exception/ConnectionException.php +++ b/src/Client/Exception/ConnectionException.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace Mcp\Exception; +namespace Mcp\Client\Exception; /** * Exception for connection failures. diff --git a/src/Exception/ElicitationException.php b/src/Client/Exception/ElicitationException.php similarity index 81% rename from src/Exception/ElicitationException.php rename to src/Client/Exception/ElicitationException.php index 0ef784e1..e72f2768 100644 --- a/src/Exception/ElicitationException.php +++ b/src/Client/Exception/ElicitationException.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace Mcp\Exception; +namespace Mcp\Client\Exception; /** * Exception thrown when an elicitation request fails. @@ -19,6 +19,6 @@ * * @author Johannes Wachter */ -final class ElicitationException extends \RuntimeException implements ExceptionInterface +final class ElicitationException extends RuntimeException { } diff --git a/src/Exception/Exception.php b/src/Client/Exception/Exception.php similarity index 92% rename from src/Exception/Exception.php rename to src/Client/Exception/Exception.php index 12ff5f01..40223069 100644 --- a/src/Exception/Exception.php +++ b/src/Client/Exception/Exception.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace Mcp\Exception; +namespace Mcp\Client\Exception; /** * @author Christopher Hertel diff --git a/src/Client/Exception/ExceptionInterface.php b/src/Client/Exception/ExceptionInterface.php new file mode 100644 index 00000000..a98583fa --- /dev/null +++ b/src/Client/Exception/ExceptionInterface.php @@ -0,0 +1,21 @@ + + */ +interface ExceptionInterface extends SchemaExceptionInterface +{ +} diff --git a/src/Exception/InvalidArgumentException.php b/src/Client/Exception/InvalidArgumentException.php similarity index 92% rename from src/Exception/InvalidArgumentException.php rename to src/Client/Exception/InvalidArgumentException.php index 8c85a7c4..91af3673 100644 --- a/src/Exception/InvalidArgumentException.php +++ b/src/Client/Exception/InvalidArgumentException.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace Mcp\Exception; +namespace Mcp\Client\Exception; /** * @author Christopher Hertel diff --git a/src/Exception/LogicException.php b/src/Client/Exception/LogicException.php similarity index 92% rename from src/Exception/LogicException.php rename to src/Client/Exception/LogicException.php index 2ebe44c9..e3e2aa1a 100644 --- a/src/Exception/LogicException.php +++ b/src/Client/Exception/LogicException.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace Mcp\Exception; +namespace Mcp\Client\Exception; /** * @author Christopher Hertel diff --git a/src/Exception/RequestException.php b/src/Client/Exception/RequestException.php similarity index 96% rename from src/Exception/RequestException.php rename to src/Client/Exception/RequestException.php index 44b8a91f..3f9024ff 100644 --- a/src/Exception/RequestException.php +++ b/src/Client/Exception/RequestException.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace Mcp\Exception; +namespace Mcp\Client\Exception; use Mcp\Schema\JsonRpc\Error; diff --git a/src/Exception/RootsException.php b/src/Client/Exception/RootsException.php similarity index 82% rename from src/Exception/RootsException.php rename to src/Client/Exception/RootsException.php index 8d12cb06..dac1205f 100644 --- a/src/Exception/RootsException.php +++ b/src/Client/Exception/RootsException.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace Mcp\Exception; +namespace Mcp\Client\Exception; /** * Exception thrown when listing roots fails. @@ -19,6 +19,6 @@ * * @author Johannes Wachter */ -final class RootsException extends \RuntimeException implements ExceptionInterface +final class RootsException extends RuntimeException { } diff --git a/src/Client/Exception/RuntimeException.php b/src/Client/Exception/RuntimeException.php new file mode 100644 index 00000000..34fb6315 --- /dev/null +++ b/src/Client/Exception/RuntimeException.php @@ -0,0 +1,19 @@ + + */ +class RuntimeException extends \RuntimeException implements ExceptionInterface +{ +} diff --git a/src/Exception/SamplingException.php b/src/Client/Exception/SamplingException.php similarity index 82% rename from src/Exception/SamplingException.php rename to src/Client/Exception/SamplingException.php index 17abcebc..5b5d7709 100644 --- a/src/Exception/SamplingException.php +++ b/src/Client/Exception/SamplingException.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace Mcp\Exception; +namespace Mcp\Client\Exception; /** * Exception thrown when a sampling request fails. @@ -19,6 +19,6 @@ * * @author Kyrian Obikwelu */ -final class SamplingException extends \RuntimeException implements ExceptionInterface +final class SamplingException extends RuntimeException { } diff --git a/src/Client/Handler/Request/ElicitationRequestHandler.php b/src/Client/Handler/Request/ElicitationRequestHandler.php index 2fac5338..4936b0a5 100644 --- a/src/Client/Handler/Request/ElicitationRequestHandler.php +++ b/src/Client/Handler/Request/ElicitationRequestHandler.php @@ -11,7 +11,7 @@ namespace Mcp\Client\Handler\Request; -use Mcp\Exception\ElicitationException; +use Mcp\Client\Exception\ElicitationException; use Mcp\Schema\JsonRpc\Error; use Mcp\Schema\JsonRpc\Request; use Mcp\Schema\JsonRpc\Response; diff --git a/src/Client/Handler/Request/ListRootsRequestHandler.php b/src/Client/Handler/Request/ListRootsRequestHandler.php index 50806c19..addf075a 100644 --- a/src/Client/Handler/Request/ListRootsRequestHandler.php +++ b/src/Client/Handler/Request/ListRootsRequestHandler.php @@ -11,7 +11,7 @@ namespace Mcp\Client\Handler\Request; -use Mcp\Exception\RootsException; +use Mcp\Client\Exception\RootsException; use Mcp\Schema\JsonRpc\Error; use Mcp\Schema\JsonRpc\Request; use Mcp\Schema\JsonRpc\Response; diff --git a/src/Client/Handler/Request/SamplingRequestHandler.php b/src/Client/Handler/Request/SamplingRequestHandler.php index 3a7f862e..e078b3e7 100644 --- a/src/Client/Handler/Request/SamplingRequestHandler.php +++ b/src/Client/Handler/Request/SamplingRequestHandler.php @@ -11,8 +11,8 @@ namespace Mcp\Client\Handler\Request; -use Mcp\Exception\InvalidArgumentException; -use Mcp\Exception\SamplingException; +use Mcp\Client\Exception\SamplingException; +use Mcp\Schema\Exception\InvalidArgumentException; use Mcp\Schema\JsonRpc\Error; use Mcp\Schema\JsonRpc\Request; use Mcp\Schema\JsonRpc\Response; diff --git a/src/Client/Protocol.php b/src/Client/Protocol.php index 281aedc8..f54c7407 100644 --- a/src/Client/Protocol.php +++ b/src/Client/Protocol.php @@ -11,6 +11,7 @@ namespace Mcp\Client; +use Mcp\Client\Exception\ConnectionException; use Mcp\Client\Handler\Notification\NotificationHandlerInterface; use Mcp\Client\Handler\Notification\ProgressNotificationHandler; use Mcp\Client\Handler\Request\RequestHandlerInterface; @@ -22,19 +23,18 @@ use Mcp\Client\Stateless\ToolCatalog; use Mcp\Client\Transport\HeaderAwareTransportInterface; use Mcp\Client\Transport\TransportInterface; -use Mcp\Exception\ConnectionException; -use Mcp\JsonRpc\MessageFactory; use Mcp\Schema\Enum\ProtocolVersion; use Mcp\Schema\Implementation; use Mcp\Schema\JsonRpc\Error; use Mcp\Schema\JsonRpc\Notification; use Mcp\Schema\JsonRpc\Request; use Mcp\Schema\JsonRpc\Response; +use Mcp\Schema\MessageFactory; use Mcp\Schema\Notification\InitializedNotification; use Mcp\Schema\Request\DiscoverRequest; use Mcp\Schema\Request\InitializeRequest; +use Mcp\Schema\RequestMeta; use Mcp\Schema\Result\InitializeResult; -use Mcp\Server\Stateless\RequestMeta; use Psr\Log\LoggerInterface; use Psr\Log\NullLogger; diff --git a/src/Client/Stateless/HeaderFactory.php b/src/Client/Stateless/HeaderFactory.php index 428e1c70..b341feaa 100644 --- a/src/Client/Stateless/HeaderFactory.php +++ b/src/Client/Stateless/HeaderFactory.php @@ -12,8 +12,8 @@ namespace Mcp\Client\Stateless; use Mcp\Schema\Enum\ProtocolVersion; +use Mcp\Schema\RequestMeta; use Mcp\Schema\Wire\McpHeader; -use Mcp\Server\Stateless\RequestMeta; /** * The HTTP headers a modern-era client puts on every POST (SEP-2243, SEP-2575). diff --git a/src/Client/Stateless/InputRequestResolver.php b/src/Client/Stateless/InputRequestResolver.php index a592542d..d8e547be 100644 --- a/src/Client/Stateless/InputRequestResolver.php +++ b/src/Client/Stateless/InputRequestResolver.php @@ -11,8 +11,8 @@ namespace Mcp\Client\Stateless; +use Mcp\Client\Exception\RuntimeException; use Mcp\Client\Handler\Request\RequestHandlerInterface; -use Mcp\Exception\RuntimeException; use Mcp\Schema\JsonRpc\Error; use Mcp\Schema\JsonRpc\Request; use Mcp\Schema\JsonRpc\Response; diff --git a/src/Client/Stateless/RequestEnvelope.php b/src/Client/Stateless/RequestEnvelope.php index fcc1cac4..ed61f2b4 100644 --- a/src/Client/Stateless/RequestEnvelope.php +++ b/src/Client/Stateless/RequestEnvelope.php @@ -14,7 +14,7 @@ use Mcp\Schema\ClientCapabilities; use Mcp\Schema\Enum\ProtocolVersion; use Mcp\Schema\Implementation; -use Mcp\Server\Stateless\RequestMeta; +use Mcp\Schema\RequestMeta; /** * Stamps the per-request `_meta` that replaces the `initialize` handshake diff --git a/src/Client/Transport/BaseTransport.php b/src/Client/Transport/BaseTransport.php index a1fc1936..2a13e753 100644 --- a/src/Client/Transport/BaseTransport.php +++ b/src/Client/Transport/BaseTransport.php @@ -11,8 +11,8 @@ namespace Mcp\Client\Transport; +use Mcp\Client\Exception\RuntimeException; use Mcp\Client\State\ClientStateInterface; -use Mcp\Exception\RuntimeException; use Psr\Log\LoggerInterface; use Psr\Log\NullLogger; diff --git a/src/Client/Transport/HttpTransport.php b/src/Client/Transport/HttpTransport.php index b5499e85..4d45baf3 100644 --- a/src/Client/Transport/HttpTransport.php +++ b/src/Client/Transport/HttpTransport.php @@ -13,8 +13,8 @@ use Http\Discovery\Psr17FactoryDiscovery; use Http\Discovery\Psr18ClientDiscovery; -use Mcp\Exception\ConnectionException; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Client\Exception\ConnectionException; +use Mcp\Client\Exception\InvalidArgumentException; use Mcp\Schema\JsonRpc\Error; use Mcp\Schema\JsonRpc\Response; use Psr\Http\Client\ClientInterface; diff --git a/src/Client/Transport/StdioTransport.php b/src/Client/Transport/StdioTransport.php index f1029619..1a5e0894 100644 --- a/src/Client/Transport/StdioTransport.php +++ b/src/Client/Transport/StdioTransport.php @@ -11,8 +11,8 @@ namespace Mcp\Client\Transport; -use Mcp\Exception\ConnectionException; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Client\Exception\ConnectionException; +use Mcp\Client\Exception\InvalidArgumentException; use Mcp\Schema\JsonRpc\Error; use Mcp\Schema\JsonRpc\Response; use Psr\Log\LoggerInterface; diff --git a/src/Client/Transport/TransportInterface.php b/src/Client/Transport/TransportInterface.php index 4860128e..fedc1d99 100644 --- a/src/Client/Transport/TransportInterface.php +++ b/src/Client/Transport/TransportInterface.php @@ -11,6 +11,7 @@ namespace Mcp\Client\Transport; +use Mcp\Client\Exception\ConnectionException; use Mcp\Client\State\ClientStateInterface; use Mcp\Schema\JsonRpc\Error; use Mcp\Schema\JsonRpc\Response; @@ -37,7 +38,7 @@ interface TransportInterface * - Initialization completes successfully * - Connection fails (throws ConnectionException) * - * @throws \Mcp\Exception\ConnectionException + * @throws ConnectionException */ public function connect(): void; diff --git a/src/Exception/TimeoutException.php b/src/Exception/TimeoutException.php deleted file mode 100644 index 8fa5c74a..00000000 --- a/src/Exception/TimeoutException.php +++ /dev/null @@ -1,21 +0,0 @@ - - */ -class TimeoutException extends Exception -{ -} diff --git a/src/Schema/Annotations.php b/src/Schema/Annotations.php index ec64e7ab..b7dcbffc 100644 --- a/src/Schema/Annotations.php +++ b/src/Schema/Annotations.php @@ -11,8 +11,8 @@ namespace Mcp\Schema; -use Mcp\Exception\InvalidArgumentException; use Mcp\Schema\Enum\Role; +use Mcp\Schema\Exception\InvalidArgumentException; /** * Optional annotations for the client. The client can use annotations diff --git a/src/Schema/Content/AudioContent.php b/src/Schema/Content/AudioContent.php index cf7418c5..36354f3e 100644 --- a/src/Schema/Content/AudioContent.php +++ b/src/Schema/Content/AudioContent.php @@ -11,9 +11,9 @@ namespace Mcp\Schema\Content; -use Mcp\Exception\InvalidArgumentException; -use Mcp\Exception\RuntimeException; use Mcp\Schema\Annotations; +use Mcp\Schema\Exception\InvalidArgumentException; +use Mcp\Schema\Exception\RuntimeException; /** * Represents audio content in MCP. diff --git a/src/Schema/Content/BlobResourceContents.php b/src/Schema/Content/BlobResourceContents.php index ee126fbc..e64af462 100644 --- a/src/Schema/Content/BlobResourceContents.php +++ b/src/Schema/Content/BlobResourceContents.php @@ -11,7 +11,7 @@ namespace Mcp\Schema\Content; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Schema\Exception\InvalidArgumentException; /** * Represents blob resource contents in MCP. diff --git a/src/Schema/Content/EmbeddedResource.php b/src/Schema/Content/EmbeddedResource.php index 76c4d679..de58cb11 100644 --- a/src/Schema/Content/EmbeddedResource.php +++ b/src/Schema/Content/EmbeddedResource.php @@ -11,9 +11,9 @@ namespace Mcp\Schema\Content; -use Mcp\Exception\InvalidArgumentException; -use Mcp\Exception\RuntimeException; use Mcp\Schema\Annotations; +use Mcp\Schema\Exception\InvalidArgumentException; +use Mcp\Schema\Exception\RuntimeException; /** * Represents embedded resource content within a message. diff --git a/src/Schema/Content/ImageContent.php b/src/Schema/Content/ImageContent.php index 9e2cbffd..45d87f5c 100644 --- a/src/Schema/Content/ImageContent.php +++ b/src/Schema/Content/ImageContent.php @@ -11,8 +11,8 @@ namespace Mcp\Schema\Content; -use Mcp\Exception\InvalidArgumentException; use Mcp\Schema\Annotations; +use Mcp\Schema\Exception\InvalidArgumentException; /** * @phpstan-import-type AnnotationsData from Annotations diff --git a/src/Schema/Content/PromptMessage.php b/src/Schema/Content/PromptMessage.php index d47f5ec9..22f56fd3 100644 --- a/src/Schema/Content/PromptMessage.php +++ b/src/Schema/Content/PromptMessage.php @@ -11,8 +11,8 @@ namespace Mcp\Schema\Content; -use Mcp\Exception\InvalidArgumentException; use Mcp\Schema\Enum\Role; +use Mcp\Schema\Exception\InvalidArgumentException; /** * Describes a message returned as part of a prompt. diff --git a/src/Schema/Content/ResourceLink.php b/src/Schema/Content/ResourceLink.php index 946c9b82..9a41463c 100644 --- a/src/Schema/Content/ResourceLink.php +++ b/src/Schema/Content/ResourceLink.php @@ -11,8 +11,8 @@ namespace Mcp\Schema\Content; -use Mcp\Exception\InvalidArgumentException; use Mcp\Schema\Annotations; +use Mcp\Schema\Exception\InvalidArgumentException; use Mcp\Schema\Icon; /** diff --git a/src/Schema/Content/SamplingMessage.php b/src/Schema/Content/SamplingMessage.php index 17343d06..8b9f46f5 100644 --- a/src/Schema/Content/SamplingMessage.php +++ b/src/Schema/Content/SamplingMessage.php @@ -11,8 +11,8 @@ namespace Mcp\Schema\Content; -use Mcp\Exception\InvalidArgumentException; use Mcp\Schema\Enum\Role; +use Mcp\Schema\Exception\InvalidArgumentException; /** * Describes a message issued to or received from an LLM API during sampling. diff --git a/src/Schema/Content/TextContent.php b/src/Schema/Content/TextContent.php index b743af57..b5583b32 100644 --- a/src/Schema/Content/TextContent.php +++ b/src/Schema/Content/TextContent.php @@ -11,8 +11,8 @@ namespace Mcp\Schema\Content; -use Mcp\Exception\InvalidArgumentException; use Mcp\Schema\Annotations; +use Mcp\Schema\Exception\InvalidArgumentException; /** * Represents text content in MCP. diff --git a/src/Schema/Content/TextResourceContents.php b/src/Schema/Content/TextResourceContents.php index 9beff811..2aba480c 100644 --- a/src/Schema/Content/TextResourceContents.php +++ b/src/Schema/Content/TextResourceContents.php @@ -11,7 +11,7 @@ namespace Mcp\Schema\Content; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Schema\Exception\InvalidArgumentException; /** * Represents text resource contents in MCP. diff --git a/src/Schema/Content/ToolResultContent.php b/src/Schema/Content/ToolResultContent.php index 7f2b11c1..01b15fc6 100644 --- a/src/Schema/Content/ToolResultContent.php +++ b/src/Schema/Content/ToolResultContent.php @@ -11,7 +11,7 @@ namespace Mcp\Schema\Content; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Schema\Exception\InvalidArgumentException; /** * The result of a tool use, provided by the user back to the assistant. diff --git a/src/Schema/Content/ToolUseContent.php b/src/Schema/Content/ToolUseContent.php index 8952e8cb..a87542fa 100644 --- a/src/Schema/Content/ToolUseContent.php +++ b/src/Schema/Content/ToolUseContent.php @@ -11,7 +11,7 @@ namespace Mcp\Schema\Content; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Schema\Exception\InvalidArgumentException; /** * A request from the assistant to call a tool. diff --git a/src/Schema/Elicitation/AbstractSchemaDefinition.php b/src/Schema/Elicitation/AbstractSchemaDefinition.php index a05135f1..948612e5 100644 --- a/src/Schema/Elicitation/AbstractSchemaDefinition.php +++ b/src/Schema/Elicitation/AbstractSchemaDefinition.php @@ -11,7 +11,7 @@ namespace Mcp\Schema\Elicitation; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Schema\Exception\InvalidArgumentException; /** * Base class for schema definitions in elicitation requests. diff --git a/src/Schema/Elicitation/ElicitationSchema.php b/src/Schema/Elicitation/ElicitationSchema.php index 36d130af..9889b966 100644 --- a/src/Schema/Elicitation/ElicitationSchema.php +++ b/src/Schema/Elicitation/ElicitationSchema.php @@ -11,7 +11,7 @@ namespace Mcp\Schema\Elicitation; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Schema\Exception\InvalidArgumentException; /** * Schema wrapper for elicitation requestedSchema (JSON Schema object type). diff --git a/src/Schema/Elicitation/EnumSchemaDefinition.php b/src/Schema/Elicitation/EnumSchemaDefinition.php index 1eaef8b5..da5e2e2e 100644 --- a/src/Schema/Elicitation/EnumSchemaDefinition.php +++ b/src/Schema/Elicitation/EnumSchemaDefinition.php @@ -11,7 +11,7 @@ namespace Mcp\Schema\Elicitation; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Schema\Exception\InvalidArgumentException; /** * Schema definition for string enum fields in elicitation requests. diff --git a/src/Schema/Elicitation/MultiSelectEnumSchemaDefinition.php b/src/Schema/Elicitation/MultiSelectEnumSchemaDefinition.php index ce2ab08e..42f1bbf1 100644 --- a/src/Schema/Elicitation/MultiSelectEnumSchemaDefinition.php +++ b/src/Schema/Elicitation/MultiSelectEnumSchemaDefinition.php @@ -11,7 +11,7 @@ namespace Mcp\Schema\Elicitation; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Schema\Exception\InvalidArgumentException; /** * Schema definition for multi-select enum fields without titles (SEP-1330). diff --git a/src/Schema/Elicitation/NumberSchemaDefinition.php b/src/Schema/Elicitation/NumberSchemaDefinition.php index d2bf540c..aea61b31 100644 --- a/src/Schema/Elicitation/NumberSchemaDefinition.php +++ b/src/Schema/Elicitation/NumberSchemaDefinition.php @@ -11,7 +11,7 @@ namespace Mcp\Schema\Elicitation; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Schema\Exception\InvalidArgumentException; /** * Schema definition for number/integer fields in elicitation requests. diff --git a/src/Schema/Elicitation/StringSchemaDefinition.php b/src/Schema/Elicitation/StringSchemaDefinition.php index 36c5e447..9dceee25 100644 --- a/src/Schema/Elicitation/StringSchemaDefinition.php +++ b/src/Schema/Elicitation/StringSchemaDefinition.php @@ -11,7 +11,7 @@ namespace Mcp\Schema\Elicitation; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Schema\Exception\InvalidArgumentException; /** * Schema definition for string fields in elicitation requests. diff --git a/src/Schema/Elicitation/TitledEnumSchemaDefinition.php b/src/Schema/Elicitation/TitledEnumSchemaDefinition.php index f6c47d4f..d5dd4d28 100644 --- a/src/Schema/Elicitation/TitledEnumSchemaDefinition.php +++ b/src/Schema/Elicitation/TitledEnumSchemaDefinition.php @@ -11,7 +11,7 @@ namespace Mcp\Schema\Elicitation; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Schema\Exception\InvalidArgumentException; /** * Schema definition for single-select enum fields with titled options (SEP-1330). diff --git a/src/Schema/Elicitation/TitledMultiSelectEnumSchemaDefinition.php b/src/Schema/Elicitation/TitledMultiSelectEnumSchemaDefinition.php index ee49a053..94d1ccde 100644 --- a/src/Schema/Elicitation/TitledMultiSelectEnumSchemaDefinition.php +++ b/src/Schema/Elicitation/TitledMultiSelectEnumSchemaDefinition.php @@ -11,7 +11,7 @@ namespace Mcp\Schema\Elicitation; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Schema\Exception\InvalidArgumentException; /** * Schema definition for multi-select enum fields with titled options (SEP-1330). diff --git a/src/Schema/Enum/ProtocolVersion.php b/src/Schema/Enum/ProtocolVersion.php index 03ebddfd..dc97cdf9 100644 --- a/src/Schema/Enum/ProtocolVersion.php +++ b/src/Schema/Enum/ProtocolVersion.php @@ -11,7 +11,7 @@ namespace Mcp\Schema\Enum; -use Mcp\Exception\LogicException; +use Mcp\Schema\Exception\LogicException; /** * Registry of the MCP protocol revisions this SDK knows about. diff --git a/src/Exception/ExceptionInterface.php b/src/Schema/Exception/ExceptionInterface.php similarity index 92% rename from src/Exception/ExceptionInterface.php rename to src/Schema/Exception/ExceptionInterface.php index 63449305..f9597980 100644 --- a/src/Exception/ExceptionInterface.php +++ b/src/Schema/Exception/ExceptionInterface.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace Mcp\Exception; +namespace Mcp\Schema\Exception; /** * @author Tobias Nyholm diff --git a/src/Schema/Exception/InvalidArgumentException.php b/src/Schema/Exception/InvalidArgumentException.php new file mode 100644 index 00000000..a1abda4d --- /dev/null +++ b/src/Schema/Exception/InvalidArgumentException.php @@ -0,0 +1,19 @@ + + */ +class InvalidArgumentException extends \InvalidArgumentException implements ExceptionInterface +{ +} diff --git a/src/Exception/InvalidInputMessageException.php b/src/Schema/Exception/InvalidInputMessageException.php similarity index 83% rename from src/Exception/InvalidInputMessageException.php rename to src/Schema/Exception/InvalidInputMessageException.php index 0f961224..a5821b16 100644 --- a/src/Exception/InvalidInputMessageException.php +++ b/src/Schema/Exception/InvalidInputMessageException.php @@ -9,12 +9,12 @@ * file that was distributed with this source code. */ -namespace Mcp\Exception; +namespace Mcp\Schema\Exception; /** * @author Tobias Nyholm */ -class InvalidInputMessageException extends \InvalidArgumentException implements ExceptionInterface +class InvalidInputMessageException extends InvalidArgumentException { private string|int|null $requestId = null; diff --git a/src/Schema/Exception/LogicException.php b/src/Schema/Exception/LogicException.php new file mode 100644 index 00000000..3f2d12c9 --- /dev/null +++ b/src/Schema/Exception/LogicException.php @@ -0,0 +1,19 @@ + + */ +final class LogicException extends \LogicException implements ExceptionInterface +{ +} diff --git a/src/Exception/MissingRequestMetaException.php b/src/Schema/Exception/MissingRequestMetaException.php similarity index 94% rename from src/Exception/MissingRequestMetaException.php rename to src/Schema/Exception/MissingRequestMetaException.php index 1499205f..93fe01f0 100644 --- a/src/Exception/MissingRequestMetaException.php +++ b/src/Schema/Exception/MissingRequestMetaException.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace Mcp\Exception; +namespace Mcp\Schema\Exception; /** * A modern-era request omitted the protocol version or client capabilities. diff --git a/src/Exception/RuntimeException.php b/src/Schema/Exception/RuntimeException.php similarity index 92% rename from src/Exception/RuntimeException.php rename to src/Schema/Exception/RuntimeException.php index b68a1bf4..15e59498 100644 --- a/src/Exception/RuntimeException.php +++ b/src/Schema/Exception/RuntimeException.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace Mcp\Exception; +namespace Mcp\Schema\Exception; /** * @author Christopher Hertel diff --git a/src/Schema/Extension/Apps/UiResourceContentMeta.php b/src/Schema/Extension/Apps/UiResourceContentMeta.php index 666a7e99..137d080b 100644 --- a/src/Schema/Extension/Apps/UiResourceContentMeta.php +++ b/src/Schema/Extension/Apps/UiResourceContentMeta.php @@ -11,7 +11,7 @@ namespace Mcp\Schema\Extension\Apps; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Schema\Exception\InvalidArgumentException; /** * Metadata for the _meta.ui field on resource content in a resources/read response. diff --git a/src/Schema/Extension/Apps/UiResourceCsp.php b/src/Schema/Extension/Apps/UiResourceCsp.php index e3550a67..ba08ecf1 100644 --- a/src/Schema/Extension/Apps/UiResourceCsp.php +++ b/src/Schema/Extension/Apps/UiResourceCsp.php @@ -11,7 +11,7 @@ namespace Mcp\Schema\Extension\Apps; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Schema\Exception\InvalidArgumentException; /** * Content Security Policy configuration for MCP App resources. diff --git a/src/Schema/Extension/Apps/UiToolMeta.php b/src/Schema/Extension/Apps/UiToolMeta.php index 235df2a4..c3929ebe 100644 --- a/src/Schema/Extension/Apps/UiToolMeta.php +++ b/src/Schema/Extension/Apps/UiToolMeta.php @@ -11,7 +11,7 @@ namespace Mcp\Schema\Extension\Apps; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Schema\Exception\InvalidArgumentException; /** * Metadata for the _meta.ui field on a Tool, linking it to a UI resource. diff --git a/src/Schema/Extension/ExtensionIdentifier.php b/src/Schema/Extension/ExtensionIdentifier.php index 2d714d6e..595cc930 100644 --- a/src/Schema/Extension/ExtensionIdentifier.php +++ b/src/Schema/Extension/ExtensionIdentifier.php @@ -11,7 +11,7 @@ namespace Mcp\Schema\Extension; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Schema\Exception\InvalidArgumentException; /** * An extension identifier (SEP-2133): a `_meta` key with a mandatory vendor diff --git a/src/Schema/Extension/ExtensionInterface.php b/src/Schema/Extension/ExtensionInterface.php index a6635254..f59eabaa 100644 --- a/src/Schema/Extension/ExtensionInterface.php +++ b/src/Schema/Extension/ExtensionInterface.php @@ -51,7 +51,7 @@ public function getCapabilities(): array; /** * Every message class this extension defines. * - * These are registered with the {@see \Mcp\JsonRpc\MessageFactory}, without + * These are registered with the {@see \Mcp\Schema\MessageFactory}, without * which an extension's method cannot be decoded off the wire at all, and * their method names are what let a server distinguish an extension it does * not serve from a method that does not exist. An extension with no methods diff --git a/src/Schema/Icon.php b/src/Schema/Icon.php index 27513435..6f456e28 100644 --- a/src/Schema/Icon.php +++ b/src/Schema/Icon.php @@ -11,8 +11,8 @@ namespace Mcp\Schema; -use Mcp\Exception\InvalidArgumentException; use Mcp\Schema\Enum\IconTheme; +use Mcp\Schema\Exception\InvalidArgumentException; /** * A url pointing to an icon URL or a base64-encoded data URI. diff --git a/src/Schema/Implementation.php b/src/Schema/Implementation.php index b48be544..2288ca8f 100644 --- a/src/Schema/Implementation.php +++ b/src/Schema/Implementation.php @@ -11,7 +11,7 @@ namespace Mcp\Schema; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Schema\Exception\InvalidArgumentException; /** * Describes the name and version of an MCP implementation. diff --git a/src/Schema/JsonRpc/Error.php b/src/Schema/JsonRpc/Error.php index 7749fa8f..e303d4dd 100644 --- a/src/Schema/JsonRpc/Error.php +++ b/src/Schema/JsonRpc/Error.php @@ -11,9 +11,9 @@ namespace Mcp\Schema\JsonRpc; -use Mcp\Exception\InvalidArgumentException; use Mcp\Schema\ClientCapabilities; use Mcp\Schema\Enum\ProtocolVersion; +use Mcp\Schema\Exception\InvalidArgumentException; /** * A response to a request that indicates an error occurred. diff --git a/src/Schema/JsonRpc/Notification.php b/src/Schema/JsonRpc/Notification.php index bfd37f1f..64a458ba 100644 --- a/src/Schema/JsonRpc/Notification.php +++ b/src/Schema/JsonRpc/Notification.php @@ -11,7 +11,7 @@ namespace Mcp\Schema\JsonRpc; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Schema\Exception\InvalidArgumentException; /** * @phpstan-type NotificationData array{ diff --git a/src/Schema/JsonRpc/Request.php b/src/Schema/JsonRpc/Request.php index cb8ed836..4ab4b12c 100644 --- a/src/Schema/JsonRpc/Request.php +++ b/src/Schema/JsonRpc/Request.php @@ -11,7 +11,7 @@ namespace Mcp\Schema\JsonRpc; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Schema\Exception\InvalidArgumentException; /** * @phpstan-type RequestData array{ diff --git a/src/Schema/JsonRpc/Response.php b/src/Schema/JsonRpc/Response.php index 4c64881e..7dfe3b26 100644 --- a/src/Schema/JsonRpc/Response.php +++ b/src/Schema/JsonRpc/Response.php @@ -11,7 +11,7 @@ namespace Mcp\Schema\JsonRpc; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Schema\Exception\InvalidArgumentException; /** * Covariant because a Response only hands its result out, never consumes it, diff --git a/src/JsonRpc/MessageFactory.php b/src/Schema/MessageFactory.php similarity index 98% rename from src/JsonRpc/MessageFactory.php rename to src/Schema/MessageFactory.php index 27860a2c..04237900 100644 --- a/src/JsonRpc/MessageFactory.php +++ b/src/Schema/MessageFactory.php @@ -9,11 +9,11 @@ * file that was distributed with this source code. */ -namespace Mcp\JsonRpc; +namespace Mcp\Schema; -use Mcp\Exception\InvalidArgumentException; -use Mcp\Exception\InvalidInputMessageException; use Mcp\Schema; +use Mcp\Schema\Exception\InvalidArgumentException; +use Mcp\Schema\Exception\InvalidInputMessageException; use Mcp\Schema\JsonRpc\Error; use Mcp\Schema\JsonRpc\MessageInterface; use Mcp\Schema\JsonRpc\Notification; diff --git a/src/Schema/ModelPreferences.php b/src/Schema/ModelPreferences.php index e6684290..cf223c2c 100644 --- a/src/Schema/ModelPreferences.php +++ b/src/Schema/ModelPreferences.php @@ -11,7 +11,7 @@ namespace Mcp\Schema; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Schema\Exception\InvalidArgumentException; /** * The server's preferences for model selection, requested of the client during sampling. diff --git a/src/Schema/Notification/CancelledNotification.php b/src/Schema/Notification/CancelledNotification.php index 4ae32576..e86a33d3 100644 --- a/src/Schema/Notification/CancelledNotification.php +++ b/src/Schema/Notification/CancelledNotification.php @@ -11,7 +11,7 @@ namespace Mcp\Schema\Notification; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Schema\Exception\InvalidArgumentException; use Mcp\Schema\JsonRpc\Notification; /** diff --git a/src/Schema/Notification/LoggingMessageNotification.php b/src/Schema/Notification/LoggingMessageNotification.php index 17cbd70c..ad18f680 100644 --- a/src/Schema/Notification/LoggingMessageNotification.php +++ b/src/Schema/Notification/LoggingMessageNotification.php @@ -11,8 +11,8 @@ namespace Mcp\Schema\Notification; -use Mcp\Exception\InvalidArgumentException; use Mcp\Schema\Enum\LoggingLevel; +use Mcp\Schema\Exception\InvalidArgumentException; use Mcp\Schema\JsonRpc\Notification; /** diff --git a/src/Schema/Notification/ProgressNotification.php b/src/Schema/Notification/ProgressNotification.php index 15fc50ac..341da730 100644 --- a/src/Schema/Notification/ProgressNotification.php +++ b/src/Schema/Notification/ProgressNotification.php @@ -11,7 +11,7 @@ namespace Mcp\Schema\Notification; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Schema\Exception\InvalidArgumentException; use Mcp\Schema\JsonRpc\Notification; /** diff --git a/src/Schema/Notification/ResourceUpdatedNotification.php b/src/Schema/Notification/ResourceUpdatedNotification.php index 946d500e..2a07fb39 100644 --- a/src/Schema/Notification/ResourceUpdatedNotification.php +++ b/src/Schema/Notification/ResourceUpdatedNotification.php @@ -11,7 +11,7 @@ namespace Mcp\Schema\Notification; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Schema\Exception\InvalidArgumentException; use Mcp\Schema\JsonRpc\Notification; /** diff --git a/src/Schema/Prompt.php b/src/Schema/Prompt.php index 1f33e410..e49be3cf 100644 --- a/src/Schema/Prompt.php +++ b/src/Schema/Prompt.php @@ -11,7 +11,7 @@ namespace Mcp\Schema; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Schema\Exception\InvalidArgumentException; /** * A prompt or prompt template that the server offers. diff --git a/src/Schema/PromptArgument.php b/src/Schema/PromptArgument.php index 38fe3dc0..88f3262e 100644 --- a/src/Schema/PromptArgument.php +++ b/src/Schema/PromptArgument.php @@ -11,7 +11,7 @@ namespace Mcp\Schema; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Schema\Exception\InvalidArgumentException; /** * Describes an argument that a prompt can accept. diff --git a/src/Schema/Request/CallToolRequest.php b/src/Schema/Request/CallToolRequest.php index 0674066c..9b937104 100644 --- a/src/Schema/Request/CallToolRequest.php +++ b/src/Schema/Request/CallToolRequest.php @@ -11,7 +11,7 @@ namespace Mcp\Schema\Request; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Schema\Exception\InvalidArgumentException; use Mcp\Schema\JsonRpc\Request; /** diff --git a/src/Schema/Request/CompletionCompleteRequest.php b/src/Schema/Request/CompletionCompleteRequest.php index 7ad0332c..63a17440 100644 --- a/src/Schema/Request/CompletionCompleteRequest.php +++ b/src/Schema/Request/CompletionCompleteRequest.php @@ -11,7 +11,7 @@ namespace Mcp\Schema\Request; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Schema\Exception\InvalidArgumentException; use Mcp\Schema\JsonRpc\Request; use Mcp\Schema\PromptReference; use Mcp\Schema\ResourceReference; diff --git a/src/Schema/Request/CreateSamplingMessageRequest.php b/src/Schema/Request/CreateSamplingMessageRequest.php index 12e03092..0e65941e 100644 --- a/src/Schema/Request/CreateSamplingMessageRequest.php +++ b/src/Schema/Request/CreateSamplingMessageRequest.php @@ -11,12 +11,12 @@ namespace Mcp\Schema\Request; -use Mcp\Exception\InvalidArgumentException; use Mcp\Schema\Content\SamplingMessage; use Mcp\Schema\Content\ToolResultContent; use Mcp\Schema\Content\ToolUseContent; use Mcp\Schema\Enum\Role; use Mcp\Schema\Enum\SamplingContext; +use Mcp\Schema\Exception\InvalidArgumentException; use Mcp\Schema\JsonRpc\Request; use Mcp\Schema\ModelPreferences; use Mcp\Schema\Tool; diff --git a/src/Schema/Request/ElicitRequest.php b/src/Schema/Request/ElicitRequest.php index 15a74ee1..e6b609df 100644 --- a/src/Schema/Request/ElicitRequest.php +++ b/src/Schema/Request/ElicitRequest.php @@ -11,9 +11,9 @@ namespace Mcp\Schema\Request; -use Mcp\Exception\InvalidArgumentException; use Mcp\Schema\Elicitation\ElicitationSchema; use Mcp\Schema\Enum\ElicitationMode; +use Mcp\Schema\Exception\InvalidArgumentException; use Mcp\Schema\JsonRpc\Request; /** diff --git a/src/Schema/Request/GetPromptRequest.php b/src/Schema/Request/GetPromptRequest.php index 5d91ff55..ffa17b15 100644 --- a/src/Schema/Request/GetPromptRequest.php +++ b/src/Schema/Request/GetPromptRequest.php @@ -11,7 +11,7 @@ namespace Mcp\Schema\Request; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Schema\Exception\InvalidArgumentException; use Mcp\Schema\JsonRpc\Request; /** diff --git a/src/Schema/Request/InitializeRequest.php b/src/Schema/Request/InitializeRequest.php index f7b74601..b8a19a07 100644 --- a/src/Schema/Request/InitializeRequest.php +++ b/src/Schema/Request/InitializeRequest.php @@ -11,8 +11,8 @@ namespace Mcp\Schema\Request; -use Mcp\Exception\InvalidArgumentException; use Mcp\Schema\ClientCapabilities; +use Mcp\Schema\Exception\InvalidArgumentException; use Mcp\Schema\Implementation; use Mcp\Schema\JsonRpc\Request; diff --git a/src/Schema/Request/ListPromptsRequest.php b/src/Schema/Request/ListPromptsRequest.php index 3f1cff0e..d1d79477 100644 --- a/src/Schema/Request/ListPromptsRequest.php +++ b/src/Schema/Request/ListPromptsRequest.php @@ -11,7 +11,7 @@ namespace Mcp\Schema\Request; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Schema\Exception\InvalidArgumentException; use Mcp\Schema\JsonRpc\Request; /** diff --git a/src/Schema/Request/ListResourceTemplatesRequest.php b/src/Schema/Request/ListResourceTemplatesRequest.php index 1822c57e..dc66eb98 100644 --- a/src/Schema/Request/ListResourceTemplatesRequest.php +++ b/src/Schema/Request/ListResourceTemplatesRequest.php @@ -11,7 +11,7 @@ namespace Mcp\Schema\Request; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Schema\Exception\InvalidArgumentException; use Mcp\Schema\JsonRpc\Request; /** diff --git a/src/Schema/Request/ListResourcesRequest.php b/src/Schema/Request/ListResourcesRequest.php index a8fe7727..b9a68699 100644 --- a/src/Schema/Request/ListResourcesRequest.php +++ b/src/Schema/Request/ListResourcesRequest.php @@ -11,7 +11,7 @@ namespace Mcp\Schema\Request; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Schema\Exception\InvalidArgumentException; use Mcp\Schema\JsonRpc\Request; /** diff --git a/src/Schema/Request/ListToolsRequest.php b/src/Schema/Request/ListToolsRequest.php index 83cf8875..1bdfbdc7 100644 --- a/src/Schema/Request/ListToolsRequest.php +++ b/src/Schema/Request/ListToolsRequest.php @@ -11,7 +11,7 @@ namespace Mcp\Schema\Request; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Schema\Exception\InvalidArgumentException; use Mcp\Schema\JsonRpc\Request; /** diff --git a/src/Schema/Request/ReadResourceRequest.php b/src/Schema/Request/ReadResourceRequest.php index 69523eff..c671f735 100644 --- a/src/Schema/Request/ReadResourceRequest.php +++ b/src/Schema/Request/ReadResourceRequest.php @@ -11,7 +11,7 @@ namespace Mcp\Schema\Request; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Schema\Exception\InvalidArgumentException; use Mcp\Schema\JsonRpc\Request; /** diff --git a/src/Schema/Request/ResourceSubscribeRequest.php b/src/Schema/Request/ResourceSubscribeRequest.php index 036785a2..98a1b053 100644 --- a/src/Schema/Request/ResourceSubscribeRequest.php +++ b/src/Schema/Request/ResourceSubscribeRequest.php @@ -11,7 +11,7 @@ namespace Mcp\Schema\Request; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Schema\Exception\InvalidArgumentException; use Mcp\Schema\JsonRpc\Request; /** diff --git a/src/Schema/Request/ResourceUnsubscribeRequest.php b/src/Schema/Request/ResourceUnsubscribeRequest.php index fd93727b..04f08884 100644 --- a/src/Schema/Request/ResourceUnsubscribeRequest.php +++ b/src/Schema/Request/ResourceUnsubscribeRequest.php @@ -11,7 +11,7 @@ namespace Mcp\Schema\Request; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Schema\Exception\InvalidArgumentException; use Mcp\Schema\JsonRpc\Request; /** diff --git a/src/Schema/Request/SetLogLevelRequest.php b/src/Schema/Request/SetLogLevelRequest.php index f781ca51..88435d8a 100644 --- a/src/Schema/Request/SetLogLevelRequest.php +++ b/src/Schema/Request/SetLogLevelRequest.php @@ -11,8 +11,8 @@ namespace Mcp\Schema\Request; -use Mcp\Exception\InvalidArgumentException; use Mcp\Schema\Enum\LoggingLevel; +use Mcp\Schema\Exception\InvalidArgumentException; use Mcp\Schema\JsonRpc\Request; /** diff --git a/src/Server/Stateless/RequestMeta.php b/src/Schema/RequestMeta.php similarity index 94% rename from src/Server/Stateless/RequestMeta.php rename to src/Schema/RequestMeta.php index 3744d92c..47466070 100644 --- a/src/Server/Stateless/RequestMeta.php +++ b/src/Schema/RequestMeta.php @@ -9,13 +9,11 @@ * file that was distributed with this source code. */ -namespace Mcp\Server\Stateless; +namespace Mcp\Schema; -use Mcp\Exception\MissingRequestMetaException; -use Mcp\Schema\ClientCapabilities; use Mcp\Schema\Enum\LoggingLevel; -use Mcp\Schema\Implementation; -use Mcp\Server\Wire\InboundClassifier; +use Mcp\Schema\Exception\MissingRequestMetaException; +use Mcp\Schema\Wire\McpHeader; /** * The per-request metadata that replaces the `initialize` handshake in the @@ -123,7 +121,7 @@ private static function parseTraceContext(array $meta, array $headers): array foreach (self::TRACE_KEYS as $key) { if (\is_string($meta[$key] ?? null)) { $context[$key] = $meta[$key]; - } elseif (null !== $header = InboundClassifier::header($headers, $key)) { + } elseif (null !== $header = McpHeader::lookup($headers, $key)) { $context[$key] = $header; } } diff --git a/src/Schema/ResourceDefinition.php b/src/Schema/ResourceDefinition.php index 69c44d5f..decc90e1 100644 --- a/src/Schema/ResourceDefinition.php +++ b/src/Schema/ResourceDefinition.php @@ -11,7 +11,7 @@ namespace Mcp\Schema; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Schema\Exception\InvalidArgumentException; /** * A known resource that the server is capable of reading. diff --git a/src/Schema/ResourceTemplate.php b/src/Schema/ResourceTemplate.php index 46033975..fb552705 100644 --- a/src/Schema/ResourceTemplate.php +++ b/src/Schema/ResourceTemplate.php @@ -11,7 +11,7 @@ namespace Mcp\Schema; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Schema\Exception\InvalidArgumentException; /** * A template description for resources available on the server. diff --git a/src/Schema/Result/CallToolResult.php b/src/Schema/Result/CallToolResult.php index b986becf..11bace55 100644 --- a/src/Schema/Result/CallToolResult.php +++ b/src/Schema/Result/CallToolResult.php @@ -11,13 +11,13 @@ namespace Mcp\Schema\Result; -use Mcp\Exception\InvalidArgumentException; use Mcp\Schema\Content\AudioContent; use Mcp\Schema\Content\Content; use Mcp\Schema\Content\EmbeddedResource; use Mcp\Schema\Content\ImageContent; use Mcp\Schema\Content\ResourceLink; use Mcp\Schema\Content\TextContent; +use Mcp\Schema\Exception\InvalidArgumentException; use Mcp\Schema\JsonRpc\ResultInterface; /** diff --git a/src/Schema/Result/CompletionCompleteResult.php b/src/Schema/Result/CompletionCompleteResult.php index 43c9fed4..02e4b708 100644 --- a/src/Schema/Result/CompletionCompleteResult.php +++ b/src/Schema/Result/CompletionCompleteResult.php @@ -11,7 +11,7 @@ namespace Mcp\Schema\Result; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Schema\Exception\InvalidArgumentException; use Mcp\Schema\JsonRpc\ResultInterface; /** diff --git a/src/Schema/Result/CreateSamplingMessageResult.php b/src/Schema/Result/CreateSamplingMessageResult.php index a325ed94..a434064a 100644 --- a/src/Schema/Result/CreateSamplingMessageResult.php +++ b/src/Schema/Result/CreateSamplingMessageResult.php @@ -11,12 +11,12 @@ namespace Mcp\Schema\Result; -use Mcp\Exception\InvalidArgumentException; use Mcp\Schema\Content\AudioContent; use Mcp\Schema\Content\ImageContent; use Mcp\Schema\Content\TextContent; use Mcp\Schema\Content\ToolUseContent; use Mcp\Schema\Enum\Role; +use Mcp\Schema\Exception\InvalidArgumentException; use Mcp\Schema\JsonRpc\ResultInterface; /** diff --git a/src/Schema/Result/DiscoverResult.php b/src/Schema/Result/DiscoverResult.php index 22222e97..524bf912 100644 --- a/src/Schema/Result/DiscoverResult.php +++ b/src/Schema/Result/DiscoverResult.php @@ -11,9 +11,8 @@ namespace Mcp\Schema\Result; -use Mcp\Exception\InvalidArgumentException; use Mcp\Schema\Enum\ProtocolVersion; -use Mcp\Schema\Enum\ResultType; +use Mcp\Schema\Exception\InvalidArgumentException; use Mcp\Schema\JsonRpc\ResultInterface; use Mcp\Schema\ServerCapabilities; diff --git a/src/Schema/Result/ElicitResult.php b/src/Schema/Result/ElicitResult.php index 533d28f1..e82f3d79 100644 --- a/src/Schema/Result/ElicitResult.php +++ b/src/Schema/Result/ElicitResult.php @@ -11,9 +11,9 @@ namespace Mcp\Schema\Result; -use Mcp\Exception\InvalidArgumentException; use Mcp\Schema\Enum\ElicitAction; use Mcp\Schema\Enum\ElicitationMode; +use Mcp\Schema\Exception\InvalidArgumentException; use Mcp\Schema\JsonRpc\ResultInterface; /** diff --git a/src/Schema/Result/GetPromptResult.php b/src/Schema/Result/GetPromptResult.php index 0083a83e..aa70b299 100644 --- a/src/Schema/Result/GetPromptResult.php +++ b/src/Schema/Result/GetPromptResult.php @@ -11,8 +11,8 @@ namespace Mcp\Schema\Result; -use Mcp\Exception\InvalidArgumentException; use Mcp\Schema\Content\PromptMessage; +use Mcp\Schema\Exception\InvalidArgumentException; use Mcp\Schema\JsonRpc\ResultInterface; /** diff --git a/src/Schema/Result/InitializeResult.php b/src/Schema/Result/InitializeResult.php index e80c28ca..c9f28a3e 100644 --- a/src/Schema/Result/InitializeResult.php +++ b/src/Schema/Result/InitializeResult.php @@ -11,11 +11,10 @@ namespace Mcp\Schema\Result; -use Mcp\Exception\InvalidArgumentException; use Mcp\Schema\Enum\ProtocolVersion; +use Mcp\Schema\Exception\InvalidArgumentException; use Mcp\Schema\Implementation; use Mcp\Schema\JsonRpc\MessageInterface; -use Mcp\Schema\JsonRpc\Response; use Mcp\Schema\JsonRpc\ResultInterface; use Mcp\Schema\ServerCapabilities; diff --git a/src/Schema/Result/InputRequiredResult.php b/src/Schema/Result/InputRequiredResult.php index a0fca5e6..4525535e 100644 --- a/src/Schema/Result/InputRequiredResult.php +++ b/src/Schema/Result/InputRequiredResult.php @@ -11,7 +11,7 @@ namespace Mcp\Schema\Result; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Schema\Exception\InvalidArgumentException; use Mcp\Schema\JsonRpc\ResultInterface; use Mcp\Schema\Request\CreateSamplingMessageRequest; use Mcp\Schema\Request\ElicitRequest; diff --git a/src/Schema/Result/ListPromptsResult.php b/src/Schema/Result/ListPromptsResult.php index fd164c45..7e8d2e1d 100644 --- a/src/Schema/Result/ListPromptsResult.php +++ b/src/Schema/Result/ListPromptsResult.php @@ -11,8 +11,7 @@ namespace Mcp\Schema\Result; -use Mcp\Exception\InvalidArgumentException; -use Mcp\Schema\JsonRpc\Response; +use Mcp\Schema\Exception\InvalidArgumentException; use Mcp\Schema\JsonRpc\ResultInterface; use Mcp\Schema\Prompt; diff --git a/src/Schema/Result/ListResourceTemplatesResult.php b/src/Schema/Result/ListResourceTemplatesResult.php index e0b71146..cc475eb6 100644 --- a/src/Schema/Result/ListResourceTemplatesResult.php +++ b/src/Schema/Result/ListResourceTemplatesResult.php @@ -11,8 +11,7 @@ namespace Mcp\Schema\Result; -use Mcp\Exception\InvalidArgumentException; -use Mcp\Schema\JsonRpc\Response; +use Mcp\Schema\Exception\InvalidArgumentException; use Mcp\Schema\JsonRpc\ResultInterface; use Mcp\Schema\ResourceTemplate; diff --git a/src/Schema/Result/ListResourcesResult.php b/src/Schema/Result/ListResourcesResult.php index 63066b06..e312a7f6 100644 --- a/src/Schema/Result/ListResourcesResult.php +++ b/src/Schema/Result/ListResourcesResult.php @@ -11,8 +11,7 @@ namespace Mcp\Schema\Result; -use Mcp\Exception\InvalidArgumentException; -use Mcp\Schema\JsonRpc\Response; +use Mcp\Schema\Exception\InvalidArgumentException; use Mcp\Schema\JsonRpc\ResultInterface; use Mcp\Schema\ResourceDefinition; diff --git a/src/Schema/Result/ListRootsResult.php b/src/Schema/Result/ListRootsResult.php index 613b53f6..056b9519 100644 --- a/src/Schema/Result/ListRootsResult.php +++ b/src/Schema/Result/ListRootsResult.php @@ -11,7 +11,7 @@ namespace Mcp\Schema\Result; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Schema\Exception\InvalidArgumentException; use Mcp\Schema\JsonRpc\ResultInterface; use Mcp\Schema\Root; diff --git a/src/Schema/Result/ListToolsResult.php b/src/Schema/Result/ListToolsResult.php index c6ba6c84..6f027b31 100644 --- a/src/Schema/Result/ListToolsResult.php +++ b/src/Schema/Result/ListToolsResult.php @@ -11,8 +11,7 @@ namespace Mcp\Schema\Result; -use Mcp\Exception\InvalidArgumentException; -use Mcp\Schema\JsonRpc\Response; +use Mcp\Schema\Exception\InvalidArgumentException; use Mcp\Schema\JsonRpc\ResultInterface; use Mcp\Schema\Tool; diff --git a/src/Schema/Result/ReadResourceResult.php b/src/Schema/Result/ReadResourceResult.php index 7c6d0c53..cc3202ed 100644 --- a/src/Schema/Result/ReadResourceResult.php +++ b/src/Schema/Result/ReadResourceResult.php @@ -11,11 +11,11 @@ namespace Mcp\Schema\Result; -use Mcp\Exception\InvalidArgumentException; use Mcp\Schema\Content\BlobResourceContents; use Mcp\Schema\Content\ResourceContents; use Mcp\Schema\Content\TextResourceContents; use Mcp\Schema\Enum\CacheScope; +use Mcp\Schema\Exception\InvalidArgumentException; use Mcp\Schema\JsonRpc\ResultInterface; /** diff --git a/src/Schema/Root.php b/src/Schema/Root.php index 97a2e3af..664ca460 100644 --- a/src/Schema/Root.php +++ b/src/Schema/Root.php @@ -11,7 +11,7 @@ namespace Mcp\Schema; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Schema\Exception\InvalidArgumentException; /** * Represents a root directory or file that the server can operate on. diff --git a/src/Schema/Tool.php b/src/Schema/Tool.php index 1e939f6d..f1bae902 100644 --- a/src/Schema/Tool.php +++ b/src/Schema/Tool.php @@ -11,7 +11,7 @@ namespace Mcp\Schema; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Schema\Exception\InvalidArgumentException; use Mcp\Schema\Wire\McpHeader; /** diff --git a/src/Schema/ToolAnnotations.php b/src/Schema/ToolAnnotations.php index c4f27746..8943cef4 100644 --- a/src/Schema/ToolAnnotations.php +++ b/src/Schema/ToolAnnotations.php @@ -11,7 +11,7 @@ namespace Mcp\Schema; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Schema\Exception\InvalidArgumentException; /** * Additional properties describing a Tool to clients. diff --git a/src/Schema/ToolChoice.php b/src/Schema/ToolChoice.php index ad003232..c36c4d98 100644 --- a/src/Schema/ToolChoice.php +++ b/src/Schema/ToolChoice.php @@ -11,8 +11,8 @@ namespace Mcp\Schema; -use Mcp\Exception\InvalidArgumentException; use Mcp\Schema\Enum\ToolChoiceMode; +use Mcp\Schema\Exception\InvalidArgumentException; /** * Controls how the model uses tools during sampling. diff --git a/src/Schema/Wire/McpHeader.php b/src/Schema/Wire/McpHeader.php index e73907b3..b90eb5a7 100644 --- a/src/Schema/Wire/McpHeader.php +++ b/src/Schema/Wire/McpHeader.php @@ -188,6 +188,22 @@ public static function annotations(array $schema, string $prefix = ''): array return $found; } + /** + * Case-insensitive header lookup, since PSR-7 preserves the sender's casing. + * + * @param array $headers + */ + public static function lookup(array $headers, string $name): ?string + { + foreach ($headers as $key => $value) { + if (0 === strcasecmp($key, $name)) { + return '' === $value ? null : $value; + } + } + + return null; + } + private static function wrap(string $value): string { return self::BASE64_PREFIX.base64_encode($value).self::BASE64_SUFFIX; diff --git a/src/Server/Builder.php b/src/Server/Builder.php index 1a5dd73b..5b4b6229 100644 --- a/src/Server/Builder.php +++ b/src/Server/Builder.php @@ -11,38 +11,37 @@ namespace Mcp\Server; -use Mcp\Capability\Completion\ProviderInterface; -use Mcp\Capability\Discovery\CachedDiscoverer; -use Mcp\Capability\Discovery\Discoverer; -use Mcp\Capability\Discovery\DiscovererInterface; -use Mcp\Capability\Discovery\SchemaGeneratorInterface; -use Mcp\Capability\Registry; -use Mcp\Capability\Registry\Container; -use Mcp\Capability\Registry\ElementReference; -use Mcp\Capability\Registry\Loader\ChainLoader; -use Mcp\Capability\Registry\Loader\DiscoveryLoader; -use Mcp\Capability\Registry\Loader\ExplicitElementLoader; -use Mcp\Capability\Registry\Loader\LoaderInterface; -use Mcp\Capability\Registry\Loader\ReflectedElementLoader; -use Mcp\Capability\Registry\ReferenceHandler; -use Mcp\Capability\Registry\ReferenceHandlerInterface; -use Mcp\Capability\RegistryInterface; -use Mcp\Exception\InvalidArgumentException; -use Mcp\Exception\LogicException; -use Mcp\JsonRpc\MessageFactory; use Mcp\Schema\Annotations; use Mcp\Schema\Enum\ProtocolVersion; use Mcp\Schema\Extension\AbstractExtension; use Mcp\Schema\Extension\ExtensionInterface; use Mcp\Schema\Icon; use Mcp\Schema\Implementation; +use Mcp\Schema\MessageFactory; use Mcp\Schema\Prompt; use Mcp\Schema\ResourceDefinition; use Mcp\Schema\ResourceTemplate; use Mcp\Schema\ServerCapabilities; use Mcp\Schema\Tool; use Mcp\Schema\ToolAnnotations; -use Mcp\Server; +use Mcp\Server\Capability\Completion\ProviderInterface; +use Mcp\Server\Capability\Discovery\CachedDiscoverer; +use Mcp\Server\Capability\Discovery\Discoverer; +use Mcp\Server\Capability\Discovery\DiscovererInterface; +use Mcp\Server\Capability\Discovery\SchemaGeneratorInterface; +use Mcp\Server\Capability\Registry; +use Mcp\Server\Capability\Registry\Container; +use Mcp\Server\Capability\Registry\ElementReference; +use Mcp\Server\Capability\Registry\Loader\ChainLoader; +use Mcp\Server\Capability\Registry\Loader\DiscoveryLoader; +use Mcp\Server\Capability\Registry\Loader\ExplicitElementLoader; +use Mcp\Server\Capability\Registry\Loader\LoaderInterface; +use Mcp\Server\Capability\Registry\Loader\ReflectedElementLoader; +use Mcp\Server\Capability\Registry\ReferenceHandler; +use Mcp\Server\Capability\Registry\ReferenceHandlerInterface; +use Mcp\Server\Capability\RegistryInterface; +use Mcp\Server\Exception\InvalidArgumentException; +use Mcp\Server\Exception\LogicException; use Mcp\Server\Handler\ElementHandlerInterface; use Mcp\Server\Handler\Notification\NotificationHandlerInterface; use Mcp\Server\Handler\PromptHandlerInterface; @@ -787,7 +786,7 @@ public function addPrompt( * reflection of the handler. * * Mismatched pairings (e.g. a `Tool` with a `PromptHandlerInterface`) raise - * `Mcp\Exception\InvalidArgumentException`. Completion providers are only supported on + * `Mcp\Server\Exception\InvalidArgumentException`. Completion providers are only supported on * `Prompt` and `ResourceTemplate` definitions; supplying them with `Tool` or * `ResourceDefinition` raises the same exception. * diff --git a/src/Capability/Attribute/CompletionProvider.php b/src/Server/Capability/Attribute/CompletionProvider.php similarity index 88% rename from src/Capability/Attribute/CompletionProvider.php rename to src/Server/Capability/Attribute/CompletionProvider.php index 9e8dc802..d9e32e5f 100644 --- a/src/Capability/Attribute/CompletionProvider.php +++ b/src/Server/Capability/Attribute/CompletionProvider.php @@ -9,10 +9,10 @@ * file that was distributed with this source code. */ -namespace Mcp\Capability\Attribute; +namespace Mcp\Server\Capability\Attribute; -use Mcp\Capability\Completion\ProviderInterface; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Server\Capability\Completion\ProviderInterface; +use Mcp\Server\Exception\InvalidArgumentException; /** * @author Kyrian Obikwelu diff --git a/src/Capability/Attribute/McpPrompt.php b/src/Server/Capability/Attribute/McpPrompt.php similarity index 96% rename from src/Capability/Attribute/McpPrompt.php rename to src/Server/Capability/Attribute/McpPrompt.php index cd47fe2c..da4c5e55 100644 --- a/src/Capability/Attribute/McpPrompt.php +++ b/src/Server/Capability/Attribute/McpPrompt.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace Mcp\Capability\Attribute; +namespace Mcp\Server\Capability\Attribute; use Mcp\Schema\Icon; diff --git a/src/Capability/Attribute/McpResource.php b/src/Server/Capability/Attribute/McpResource.php similarity index 97% rename from src/Capability/Attribute/McpResource.php rename to src/Server/Capability/Attribute/McpResource.php index 0f516576..eff97ac7 100644 --- a/src/Capability/Attribute/McpResource.php +++ b/src/Server/Capability/Attribute/McpResource.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace Mcp\Capability\Attribute; +namespace Mcp\Server\Capability\Attribute; use Mcp\Schema\Annotations; use Mcp\Schema\Icon; diff --git a/src/Capability/Attribute/McpResourceTemplate.php b/src/Server/Capability/Attribute/McpResourceTemplate.php similarity index 97% rename from src/Capability/Attribute/McpResourceTemplate.php rename to src/Server/Capability/Attribute/McpResourceTemplate.php index 6a2044d8..f4d802e1 100644 --- a/src/Capability/Attribute/McpResourceTemplate.php +++ b/src/Server/Capability/Attribute/McpResourceTemplate.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace Mcp\Capability\Attribute; +namespace Mcp\Server\Capability\Attribute; use Mcp\Schema\Annotations; diff --git a/src/Capability/Attribute/McpTool.php b/src/Server/Capability/Attribute/McpTool.php similarity index 97% rename from src/Capability/Attribute/McpTool.php rename to src/Server/Capability/Attribute/McpTool.php index 1c71e2cd..2ac171ad 100644 --- a/src/Capability/Attribute/McpTool.php +++ b/src/Server/Capability/Attribute/McpTool.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace Mcp\Capability\Attribute; +namespace Mcp\Server\Capability\Attribute; use Mcp\Schema\Icon; use Mcp\Schema\ToolAnnotations; diff --git a/src/Capability/Attribute/Schema.php b/src/Server/Capability/Attribute/Schema.php similarity index 99% rename from src/Capability/Attribute/Schema.php rename to src/Server/Capability/Attribute/Schema.php index 80ec4b53..dd00be12 100644 --- a/src/Capability/Attribute/Schema.php +++ b/src/Server/Capability/Attribute/Schema.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace Mcp\Capability\Attribute; +namespace Mcp\Server\Capability\Attribute; /** * Defines a JSON Schema for a method's input or an individual parameter. diff --git a/src/Capability/Completion/EnumCompletionProvider.php b/src/Server/Capability/Completion/EnumCompletionProvider.php similarity index 92% rename from src/Capability/Completion/EnumCompletionProvider.php rename to src/Server/Capability/Completion/EnumCompletionProvider.php index 7864e4e6..f2077a35 100644 --- a/src/Capability/Completion/EnumCompletionProvider.php +++ b/src/Server/Capability/Completion/EnumCompletionProvider.php @@ -9,9 +9,9 @@ * file that was distributed with this source code. */ -namespace Mcp\Capability\Completion; +namespace Mcp\Server\Capability\Completion; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Server\Exception\InvalidArgumentException; /** * @author Kyrian Obikwelu diff --git a/src/Capability/Completion/ListCompletionProvider.php b/src/Server/Capability/Completion/ListCompletionProvider.php similarity index 94% rename from src/Capability/Completion/ListCompletionProvider.php rename to src/Server/Capability/Completion/ListCompletionProvider.php index 5d48f4bd..64298425 100644 --- a/src/Capability/Completion/ListCompletionProvider.php +++ b/src/Server/Capability/Completion/ListCompletionProvider.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace Mcp\Capability\Completion; +namespace Mcp\Server\Capability\Completion; /** * @author Kyrian Obikwelu diff --git a/src/Capability/Completion/ProviderInterface.php b/src/Server/Capability/Completion/ProviderInterface.php similarity index 93% rename from src/Capability/Completion/ProviderInterface.php rename to src/Server/Capability/Completion/ProviderInterface.php index 84f3f234..792933b1 100644 --- a/src/Capability/Completion/ProviderInterface.php +++ b/src/Server/Capability/Completion/ProviderInterface.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace Mcp\Capability\Completion; +namespace Mcp\Server\Capability\Completion; /** * @author Kyrian Obikwelu diff --git a/src/Capability/Discovery/CachedDiscoverer.php b/src/Server/Capability/Discovery/CachedDiscoverer.php similarity index 98% rename from src/Capability/Discovery/CachedDiscoverer.php rename to src/Server/Capability/Discovery/CachedDiscoverer.php index d5ed8525..4a61511d 100644 --- a/src/Capability/Discovery/CachedDiscoverer.php +++ b/src/Server/Capability/Discovery/CachedDiscoverer.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace Mcp\Capability\Discovery; +namespace Mcp\Server\Capability\Discovery; use Psr\Log\LoggerInterface; use Psr\SimpleCache\CacheInterface; diff --git a/src/Capability/Discovery/Discoverer.php b/src/Server/Capability/Discovery/Discoverer.php similarity index 95% rename from src/Capability/Discovery/Discoverer.php rename to src/Server/Capability/Discovery/Discoverer.php index 5b7e4765..50506e80 100644 --- a/src/Capability/Discovery/Discoverer.php +++ b/src/Server/Capability/Discovery/Discoverer.php @@ -9,27 +9,27 @@ * file that was distributed with this source code. */ -namespace Mcp\Capability\Discovery; - -use Mcp\Capability\Attribute\CompletionProvider; -use Mcp\Capability\Attribute\McpPrompt; -use Mcp\Capability\Attribute\McpResource; -use Mcp\Capability\Attribute\McpResourceTemplate; -use Mcp\Capability\Attribute\McpTool; -use Mcp\Capability\Completion\EnumCompletionProvider; -use Mcp\Capability\Completion\ListCompletionProvider; -use Mcp\Capability\Completion\ProviderInterface; -use Mcp\Capability\Registry\PromptReference; -use Mcp\Capability\Registry\ResourceReference; -use Mcp\Capability\Registry\ResourceTemplateReference; -use Mcp\Capability\Registry\ToolReference; -use Mcp\Exception\ExceptionInterface; -use Mcp\Exception\RuntimeException; +namespace Mcp\Server\Capability\Discovery; + +use Mcp\Schema\Exception\ExceptionInterface; use Mcp\Schema\Prompt; use Mcp\Schema\PromptArgument; use Mcp\Schema\ResourceDefinition; use Mcp\Schema\ResourceTemplate; use Mcp\Schema\Tool; +use Mcp\Server\Capability\Attribute\CompletionProvider; +use Mcp\Server\Capability\Attribute\McpPrompt; +use Mcp\Server\Capability\Attribute\McpResource; +use Mcp\Server\Capability\Attribute\McpResourceTemplate; +use Mcp\Server\Capability\Attribute\McpTool; +use Mcp\Server\Capability\Completion\EnumCompletionProvider; +use Mcp\Server\Capability\Completion\ListCompletionProvider; +use Mcp\Server\Capability\Completion\ProviderInterface; +use Mcp\Server\Capability\Registry\PromptReference; +use Mcp\Server\Capability\Registry\ResourceReference; +use Mcp\Server\Capability\Registry\ResourceTemplateReference; +use Mcp\Server\Capability\Registry\ToolReference; +use Mcp\Server\Exception\RuntimeException; use Psr\Log\LoggerInterface; use Psr\Log\NullLogger; use Symfony\Component\Finder\Finder; @@ -295,6 +295,8 @@ private function processMethod(\ReflectionMethod $method, array &$discoveredCoun break; } } catch (ExceptionInterface $e) { + // Schema's root, not the Server one: the value objects built above + // validate their own input and throw from the Schema package. $this->logger->error("Failed to process MCP attribute on {$className}::{$methodName}", [ 'attribute' => $attributeClassName, 'exception' => $e, diff --git a/src/Capability/Discovery/DiscovererInterface.php b/src/Server/Capability/Discovery/DiscovererInterface.php similarity index 96% rename from src/Capability/Discovery/DiscovererInterface.php rename to src/Server/Capability/Discovery/DiscovererInterface.php index 2df69f35..8bf12ecb 100644 --- a/src/Capability/Discovery/DiscovererInterface.php +++ b/src/Server/Capability/Discovery/DiscovererInterface.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace Mcp\Capability\Discovery; +namespace Mcp\Server\Capability\Discovery; /** * Discovers MCP elements (tools, resources, prompts, resource templates) in directories. diff --git a/src/Capability/Discovery/DiscoveryState.php b/src/Server/Capability/Discovery/DiscoveryState.php similarity index 92% rename from src/Capability/Discovery/DiscoveryState.php rename to src/Server/Capability/Discovery/DiscoveryState.php index 59a73ec8..5f4f78ea 100644 --- a/src/Capability/Discovery/DiscoveryState.php +++ b/src/Server/Capability/Discovery/DiscoveryState.php @@ -9,12 +9,12 @@ * file that was distributed with this source code. */ -namespace Mcp\Capability\Discovery; +namespace Mcp\Server\Capability\Discovery; -use Mcp\Capability\Registry\PromptReference; -use Mcp\Capability\Registry\ResourceReference; -use Mcp\Capability\Registry\ResourceTemplateReference; -use Mcp\Capability\Registry\ToolReference; +use Mcp\Server\Capability\Registry\PromptReference; +use Mcp\Server\Capability\Registry\ResourceReference; +use Mcp\Server\Capability\Registry\ResourceTemplateReference; +use Mcp\Server\Capability\Registry\ToolReference; /** * Represents the state of discovered MCP capabilities. diff --git a/src/Capability/Discovery/DocBlockParser.php b/src/Server/Capability/Discovery/DocBlockParser.php similarity index 98% rename from src/Capability/Discovery/DocBlockParser.php rename to src/Server/Capability/Discovery/DocBlockParser.php index eb14a147..aa6e868f 100644 --- a/src/Capability/Discovery/DocBlockParser.php +++ b/src/Server/Capability/Discovery/DocBlockParser.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace Mcp\Capability\Discovery; +namespace Mcp\Server\Capability\Discovery; use phpDocumentor\Reflection\DocBlock; use phpDocumentor\Reflection\DocBlock\Tags\Param; diff --git a/src/Capability/Discovery/ElementMetadataResolver.php b/src/Server/Capability/Discovery/ElementMetadataResolver.php similarity index 96% rename from src/Capability/Discovery/ElementMetadataResolver.php rename to src/Server/Capability/Discovery/ElementMetadataResolver.php index 3c755ddd..a170a6c7 100644 --- a/src/Capability/Discovery/ElementMetadataResolver.php +++ b/src/Server/Capability/Discovery/ElementMetadataResolver.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace Mcp\Capability\Discovery; +namespace Mcp\Server\Capability\Discovery; /** * Derives an element's name and description from its handler method, used by diff --git a/src/Capability/Discovery/HandlerResolver.php b/src/Server/Capability/Discovery/HandlerResolver.php similarity index 96% rename from src/Capability/Discovery/HandlerResolver.php rename to src/Server/Capability/Discovery/HandlerResolver.php index 8cadcd3c..b145480b 100644 --- a/src/Capability/Discovery/HandlerResolver.php +++ b/src/Server/Capability/Discovery/HandlerResolver.php @@ -9,10 +9,10 @@ * file that was distributed with this source code. */ -namespace Mcp\Capability\Discovery; +namespace Mcp\Server\Capability\Discovery; -use Mcp\Capability\Registry\ElementReference; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Server\Capability\Registry\ElementReference; +use Mcp\Server\Exception\InvalidArgumentException; /** * Utility class to validate and resolve MCP element handlers. diff --git a/src/Capability/Discovery/SchemaGenerator.php b/src/Server/Capability/Discovery/SchemaGenerator.php similarity index 99% rename from src/Capability/Discovery/SchemaGenerator.php rename to src/Server/Capability/Discovery/SchemaGenerator.php index 357c9e98..2f14cd53 100644 --- a/src/Capability/Discovery/SchemaGenerator.php +++ b/src/Server/Capability/Discovery/SchemaGenerator.php @@ -9,13 +9,13 @@ * file that was distributed with this source code. */ -namespace Mcp\Capability\Discovery; +namespace Mcp\Server\Capability\Discovery; -use Mcp\Capability\Attribute\McpTool; -use Mcp\Capability\Attribute\Schema; -use Mcp\Capability\Registry\InjectableParameters; -use Mcp\Exception\BadMethodCallException; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Server\Capability\Attribute\McpTool; +use Mcp\Server\Capability\Attribute\Schema; +use Mcp\Server\Capability\Registry\InjectableParameters; +use Mcp\Server\Exception\BadMethodCallException; +use Mcp\Server\Exception\InvalidArgumentException; use phpDocumentor\Reflection\DocBlock\Tags\Param; /** diff --git a/src/Capability/Discovery/SchemaGeneratorInterface.php b/src/Server/Capability/Discovery/SchemaGeneratorInterface.php similarity index 95% rename from src/Capability/Discovery/SchemaGeneratorInterface.php rename to src/Server/Capability/Discovery/SchemaGeneratorInterface.php index c21d3cdd..054a3646 100644 --- a/src/Capability/Discovery/SchemaGeneratorInterface.php +++ b/src/Server/Capability/Discovery/SchemaGeneratorInterface.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace Mcp\Capability\Discovery; +namespace Mcp\Server\Capability\Discovery; /** * Provides JSON Schema generation for reflected elements. diff --git a/src/Capability/Discovery/SchemaValidator.php b/src/Server/Capability/Discovery/SchemaValidator.php similarity index 99% rename from src/Capability/Discovery/SchemaValidator.php rename to src/Server/Capability/Discovery/SchemaValidator.php index 56174bdc..e74cf574 100644 --- a/src/Capability/Discovery/SchemaValidator.php +++ b/src/Server/Capability/Discovery/SchemaValidator.php @@ -9,9 +9,9 @@ * file that was distributed with this source code. */ -namespace Mcp\Capability\Discovery; +namespace Mcp\Server\Capability\Discovery; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Server\Exception\InvalidArgumentException; use Opis\JsonSchema\Errors\ValidationError; use Opis\JsonSchema\Validator; use Psr\Log\LoggerInterface; diff --git a/src/Capability/Formatter/PromptResultFormatter.php b/src/Server/Capability/Formatter/PromptResultFormatter.php similarity index 96% rename from src/Capability/Formatter/PromptResultFormatter.php rename to src/Server/Capability/Formatter/PromptResultFormatter.php index 207c7e26..8c2f64c7 100644 --- a/src/Capability/Formatter/PromptResultFormatter.php +++ b/src/Server/Capability/Formatter/PromptResultFormatter.php @@ -9,10 +9,8 @@ * file that was distributed with this source code. */ -namespace Mcp\Capability\Formatter; +namespace Mcp\Server\Capability\Formatter; -use Mcp\Exception\InvalidArgumentException; -use Mcp\Exception\RuntimeException; use Mcp\Schema\Content\AudioContent; use Mcp\Schema\Content\Content; use Mcp\Schema\Content\EmbeddedResource; @@ -21,6 +19,8 @@ use Mcp\Schema\Content\ResourceLink; use Mcp\Schema\Content\TextContent; use Mcp\Schema\Enum\Role; +use Mcp\Schema\Exception\InvalidArgumentException; +use Mcp\Server\Exception\RuntimeException; /** * @author Kyrian Obikwelu @@ -35,8 +35,8 @@ final class PromptResultFormatter * * @return PromptMessage[] array of PromptMessage objects * - * @throws \RuntimeException if the result cannot be formatted - * @throws \JsonException if JSON encoding fails + * @throws RuntimeException if the result cannot be formatted + * @throws \JsonException if JSON encoding fails */ public function format(mixed $promptGenerationResult): array { @@ -70,7 +70,7 @@ public function format(mixed $promptGenerationResult): array if ($hasPromptMessages) { $result = []; - foreach ($promptGenerationResult as $index => $item) { + foreach ($promptGenerationResult as $item) { if ($item instanceof PromptMessage) { $result[] = $item; } else { diff --git a/src/Capability/Formatter/ResourceResultFormatter.php b/src/Server/Capability/Formatter/ResourceResultFormatter.php similarity index 98% rename from src/Capability/Formatter/ResourceResultFormatter.php rename to src/Server/Capability/Formatter/ResourceResultFormatter.php index bac2bc77..9786fbec 100644 --- a/src/Capability/Formatter/ResourceResultFormatter.php +++ b/src/Server/Capability/Formatter/ResourceResultFormatter.php @@ -9,13 +9,13 @@ * file that was distributed with this source code. */ -namespace Mcp\Capability\Formatter; +namespace Mcp\Server\Capability\Formatter; -use Mcp\Exception\RuntimeException; use Mcp\Schema\Content\BlobResourceContents; use Mcp\Schema\Content\EmbeddedResource; use Mcp\Schema\Content\ResourceContents; use Mcp\Schema\Content\TextResourceContents; +use Mcp\Server\Exception\RuntimeException; /** * Formats the raw result of a resource read operation into MCP ResourceContent items. diff --git a/src/Capability/Formatter/ToolResultFormatter.php b/src/Server/Capability/Formatter/ToolResultFormatter.php similarity index 98% rename from src/Capability/Formatter/ToolResultFormatter.php rename to src/Server/Capability/Formatter/ToolResultFormatter.php index 7583bc6a..1e15be7d 100644 --- a/src/Capability/Formatter/ToolResultFormatter.php +++ b/src/Server/Capability/Formatter/ToolResultFormatter.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace Mcp\Capability\Formatter; +namespace Mcp\Server\Capability\Formatter; use Mcp\Schema\Content\Content; use Mcp\Schema\Content\TextContent; diff --git a/src/Capability/Logger/ClientLogger.php b/src/Server/Capability/Logger/ClientLogger.php similarity index 98% rename from src/Capability/Logger/ClientLogger.php rename to src/Server/Capability/Logger/ClientLogger.php index f94deb67..df4172e3 100644 --- a/src/Capability/Logger/ClientLogger.php +++ b/src/Server/Capability/Logger/ClientLogger.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace Mcp\Capability\Logger; +namespace Mcp\Server\Capability\Logger; use Mcp\Schema\Enum\LoggingLevel; use Mcp\Server\ClientGateway; diff --git a/src/Capability/Registry.php b/src/Server/Capability/Registry.php similarity index 94% rename from src/Capability/Registry.php rename to src/Server/Capability/Registry.php index 97840431..e8472d28 100644 --- a/src/Capability/Registry.php +++ b/src/Server/Capability/Registry.php @@ -9,27 +9,27 @@ * file that was distributed with this source code. */ -namespace Mcp\Capability; - -use Mcp\Capability\Registry\Loader\LoaderInterface; -use Mcp\Capability\Registry\PromptReference; -use Mcp\Capability\Registry\ResourceReference; -use Mcp\Capability\Registry\ResourceTemplateReference; -use Mcp\Capability\Registry\ToolReference; -use Mcp\Capability\Tool\NameValidator; -use Mcp\Event\PromptListChangedEvent; -use Mcp\Event\ResourceListChangedEvent; -use Mcp\Event\ResourceTemplateListChangedEvent; -use Mcp\Event\ToolListChangedEvent; -use Mcp\Exception\InvalidCursorException; -use Mcp\Exception\PromptNotFoundException; -use Mcp\Exception\ResourceNotFoundException; -use Mcp\Exception\ToolNotFoundException; +namespace Mcp\Server\Capability; + use Mcp\Schema\Page; use Mcp\Schema\Prompt; use Mcp\Schema\ResourceDefinition; use Mcp\Schema\ResourceTemplate; use Mcp\Schema\Tool; +use Mcp\Server\Capability\Registry\Loader\LoaderInterface; +use Mcp\Server\Capability\Registry\PromptReference; +use Mcp\Server\Capability\Registry\ResourceReference; +use Mcp\Server\Capability\Registry\ResourceTemplateReference; +use Mcp\Server\Capability\Registry\ToolReference; +use Mcp\Server\Capability\Tool\NameValidator; +use Mcp\Server\Event\PromptListChangedEvent; +use Mcp\Server\Event\ResourceListChangedEvent; +use Mcp\Server\Event\ResourceTemplateListChangedEvent; +use Mcp\Server\Event\ToolListChangedEvent; +use Mcp\Server\Exception\InvalidCursorException; +use Mcp\Server\Exception\PromptNotFoundException; +use Mcp\Server\Exception\ResourceNotFoundException; +use Mcp\Server\Exception\ToolNotFoundException; use Psr\EventDispatcher\EventDispatcherInterface; use Psr\Log\LoggerInterface; use Psr\Log\NullLogger; diff --git a/src/Capability/Registry/Container.php b/src/Server/Capability/Registry/Container.php similarity index 98% rename from src/Capability/Registry/Container.php rename to src/Server/Capability/Registry/Container.php index 92c4a908..32f4392d 100644 --- a/src/Capability/Registry/Container.php +++ b/src/Server/Capability/Registry/Container.php @@ -9,10 +9,10 @@ * file that was distributed with this source code. */ -namespace Mcp\Capability\Registry; +namespace Mcp\Server\Capability\Registry; -use Mcp\Exception\ContainerException; -use Mcp\Exception\ServiceNotFoundException; +use Mcp\Server\Exception\ContainerException; +use Mcp\Server\Exception\ServiceNotFoundException; use Psr\Container\ContainerExceptionInterface; use Psr\Container\ContainerInterface; use Psr\Container\NotFoundExceptionInterface; diff --git a/src/Capability/Registry/ElementReference.php b/src/Server/Capability/Registry/ElementReference.php similarity index 93% rename from src/Capability/Registry/ElementReference.php rename to src/Server/Capability/Registry/ElementReference.php index a49b2eb3..38d92d63 100644 --- a/src/Capability/Registry/ElementReference.php +++ b/src/Server/Capability/Registry/ElementReference.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace Mcp\Capability\Registry; +namespace Mcp\Server\Capability\Registry; /** * @phpstan-type Handler \Closure|array{0: object|string, 1: string}|string diff --git a/src/Capability/Registry/InjectableParameters.php b/src/Server/Capability/Registry/InjectableParameters.php similarity index 97% rename from src/Capability/Registry/InjectableParameters.php rename to src/Server/Capability/Registry/InjectableParameters.php index 4e8eba24..fa1b1a0d 100644 --- a/src/Capability/Registry/InjectableParameters.php +++ b/src/Server/Capability/Registry/InjectableParameters.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace Mcp\Capability\Registry; +namespace Mcp\Server\Capability\Registry; use Mcp\Server\ClientGateway; use Mcp\Server\RequestContext; diff --git a/src/Capability/Registry/Loader/ChainLoader.php b/src/Server/Capability/Registry/Loader/ChainLoader.php similarity index 90% rename from src/Capability/Registry/Loader/ChainLoader.php rename to src/Server/Capability/Registry/Loader/ChainLoader.php index 6c30a160..cb37a486 100644 --- a/src/Capability/Registry/Loader/ChainLoader.php +++ b/src/Server/Capability/Registry/Loader/ChainLoader.php @@ -9,9 +9,9 @@ * file that was distributed with this source code. */ -namespace Mcp\Capability\Registry\Loader; +namespace Mcp\Server\Capability\Registry\Loader; -use Mcp\Capability\RegistryInterface; +use Mcp\Server\Capability\RegistryInterface; /** * Composes multiple loaders into a single one. Child loaders run in the order they were given; diff --git a/src/Capability/Registry/Loader/DiscoveryLoader.php b/src/Server/Capability/Registry/Loader/DiscoveryLoader.php similarity index 96% rename from src/Capability/Registry/Loader/DiscoveryLoader.php rename to src/Server/Capability/Registry/Loader/DiscoveryLoader.php index d2b95384..bec36720 100644 --- a/src/Capability/Registry/Loader/DiscoveryLoader.php +++ b/src/Server/Capability/Registry/Loader/DiscoveryLoader.php @@ -9,11 +9,11 @@ * file that was distributed with this source code. */ -namespace Mcp\Capability\Registry\Loader; +namespace Mcp\Server\Capability\Registry\Loader; -use Mcp\Capability\Discovery\DiscovererInterface; -use Mcp\Capability\Discovery\DiscoveryState; -use Mcp\Capability\RegistryInterface; +use Mcp\Server\Capability\Discovery\DiscovererInterface; +use Mcp\Server\Capability\Discovery\DiscoveryState; +use Mcp\Server\Capability\RegistryInterface; use Psr\Log\LoggerInterface; use Psr\Log\NullLogger; diff --git a/src/Capability/Registry/Loader/ExplicitElementLoader.php b/src/Server/Capability/Registry/Loader/ExplicitElementLoader.php similarity index 95% rename from src/Capability/Registry/Loader/ExplicitElementLoader.php rename to src/Server/Capability/Registry/Loader/ExplicitElementLoader.php index 4733ab97..e6515dde 100644 --- a/src/Capability/Registry/Loader/ExplicitElementLoader.php +++ b/src/Server/Capability/Registry/Loader/ExplicitElementLoader.php @@ -9,15 +9,15 @@ * file that was distributed with this source code. */ -namespace Mcp\Capability\Registry\Loader; +namespace Mcp\Server\Capability\Registry\Loader; -use Mcp\Capability\Completion\ProviderInterface; -use Mcp\Capability\Registry\ReferenceHandler; -use Mcp\Capability\RegistryInterface; use Mcp\Schema\Prompt; use Mcp\Schema\ResourceDefinition; use Mcp\Schema\ResourceTemplate; use Mcp\Schema\Tool; +use Mcp\Server\Capability\Completion\ProviderInterface; +use Mcp\Server\Capability\Registry\ReferenceHandler; +use Mcp\Server\Capability\RegistryInterface; use Mcp\Server\ClientGateway; use Mcp\Server\Handler\PromptHandlerInterface; use Mcp\Server\Handler\ResourceHandlerInterface; diff --git a/src/Capability/Registry/Loader/LoaderInterface.php b/src/Server/Capability/Registry/Loader/LoaderInterface.php similarity index 81% rename from src/Capability/Registry/Loader/LoaderInterface.php rename to src/Server/Capability/Registry/Loader/LoaderInterface.php index a7ad87ce..aa24dcc7 100644 --- a/src/Capability/Registry/Loader/LoaderInterface.php +++ b/src/Server/Capability/Registry/Loader/LoaderInterface.php @@ -9,9 +9,9 @@ * file that was distributed with this source code. */ -namespace Mcp\Capability\Registry\Loader; +namespace Mcp\Server\Capability\Registry\Loader; -use Mcp\Capability\RegistryInterface; +use Mcp\Server\Capability\RegistryInterface; /** * @author Antoine Bluchet diff --git a/src/Capability/Registry/Loader/ReflectedElementLoader.php b/src/Server/Capability/Registry/Loader/ReflectedElementLoader.php similarity index 94% rename from src/Capability/Registry/Loader/ReflectedElementLoader.php rename to src/Server/Capability/Registry/Loader/ReflectedElementLoader.php index d1e849da..89272665 100644 --- a/src/Capability/Registry/Loader/ReflectedElementLoader.php +++ b/src/Server/Capability/Registry/Loader/ReflectedElementLoader.php @@ -9,20 +9,8 @@ * file that was distributed with this source code. */ -namespace Mcp\Capability\Registry\Loader; - -use Mcp\Capability\Attribute\CompletionProvider; -use Mcp\Capability\Completion\EnumCompletionProvider; -use Mcp\Capability\Completion\ListCompletionProvider; -use Mcp\Capability\Completion\ProviderInterface; -use Mcp\Capability\Discovery\DocBlockParser; -use Mcp\Capability\Discovery\ElementMetadataResolver; -use Mcp\Capability\Discovery\HandlerResolver; -use Mcp\Capability\Discovery\SchemaGenerator; -use Mcp\Capability\Discovery\SchemaGeneratorInterface; -use Mcp\Capability\Registry\ElementReference; -use Mcp\Capability\RegistryInterface; -use Mcp\Exception\ConfigurationException; +namespace Mcp\Server\Capability\Registry\Loader; + use Mcp\Schema\Annotations; use Mcp\Schema\Icon; use Mcp\Schema\Prompt; @@ -31,6 +19,18 @@ use Mcp\Schema\ResourceTemplate; use Mcp\Schema\Tool; use Mcp\Schema\ToolAnnotations; +use Mcp\Server\Capability\Attribute\CompletionProvider; +use Mcp\Server\Capability\Completion\EnumCompletionProvider; +use Mcp\Server\Capability\Completion\ListCompletionProvider; +use Mcp\Server\Capability\Completion\ProviderInterface; +use Mcp\Server\Capability\Discovery\DocBlockParser; +use Mcp\Server\Capability\Discovery\ElementMetadataResolver; +use Mcp\Server\Capability\Discovery\HandlerResolver; +use Mcp\Server\Capability\Discovery\SchemaGenerator; +use Mcp\Server\Capability\Discovery\SchemaGeneratorInterface; +use Mcp\Server\Capability\Registry\ElementReference; +use Mcp\Server\Capability\RegistryInterface; +use Mcp\Server\Exception\ConfigurationException; use Mcp\Server\Handler; use Psr\Log\LoggerInterface; use Psr\Log\NullLogger; diff --git a/src/Capability/Registry/PromptReference.php b/src/Server/Capability/Registry/PromptReference.php similarity index 93% rename from src/Capability/Registry/PromptReference.php rename to src/Server/Capability/Registry/PromptReference.php index ec7d0219..ab1f4c19 100644 --- a/src/Capability/Registry/PromptReference.php +++ b/src/Server/Capability/Registry/PromptReference.php @@ -9,11 +9,11 @@ * file that was distributed with this source code. */ -namespace Mcp\Capability\Registry; +namespace Mcp\Server\Capability\Registry; -use Mcp\Capability\Formatter\PromptResultFormatter; use Mcp\Schema\Content\PromptMessage; use Mcp\Schema\Prompt; +use Mcp\Server\Capability\Formatter\PromptResultFormatter; /** * @phpstan-import-type Handler from ElementReference diff --git a/src/Capability/Registry/ReferenceHandler.php b/src/Server/Capability/Registry/ReferenceHandler.php similarity index 98% rename from src/Capability/Registry/ReferenceHandler.php rename to src/Server/Capability/Registry/ReferenceHandler.php index c0084cbf..b898a606 100644 --- a/src/Capability/Registry/ReferenceHandler.php +++ b/src/Server/Capability/Registry/ReferenceHandler.php @@ -9,10 +9,10 @@ * file that was distributed with this source code. */ -namespace Mcp\Capability\Registry; +namespace Mcp\Server\Capability\Registry; -use Mcp\Exception\InvalidArgumentException; -use Mcp\Exception\RegistryException; +use Mcp\Server\Exception\InvalidArgumentException; +use Mcp\Server\Exception\RegistryException; use Mcp\Server\Session\SessionInterface; use Psr\Container\ContainerInterface; diff --git a/src/Capability/Registry/ReferenceHandlerInterface.php b/src/Server/Capability/Registry/ReferenceHandlerInterface.php similarity index 87% rename from src/Capability/Registry/ReferenceHandlerInterface.php rename to src/Server/Capability/Registry/ReferenceHandlerInterface.php index c4e52f10..b6dc4057 100644 --- a/src/Capability/Registry/ReferenceHandlerInterface.php +++ b/src/Server/Capability/Registry/ReferenceHandlerInterface.php @@ -9,10 +9,10 @@ * file that was distributed with this source code. */ -namespace Mcp\Capability\Registry; +namespace Mcp\Server\Capability\Registry; -use Mcp\Exception\InvalidArgumentException; -use Mcp\Exception\RegistryException; +use Mcp\Server\Exception\InvalidArgumentException; +use Mcp\Server\Exception\RegistryException; /** * Interface for handling execution of MCP elements. diff --git a/src/Capability/Registry/ResourceReference.php b/src/Server/Capability/Registry/ResourceReference.php similarity index 95% rename from src/Capability/Registry/ResourceReference.php rename to src/Server/Capability/Registry/ResourceReference.php index 10d78377..8a50ab33 100644 --- a/src/Capability/Registry/ResourceReference.php +++ b/src/Server/Capability/Registry/ResourceReference.php @@ -9,11 +9,11 @@ * file that was distributed with this source code. */ -namespace Mcp\Capability\Registry; +namespace Mcp\Server\Capability\Registry; -use Mcp\Capability\Formatter\ResourceResultFormatter; use Mcp\Schema\Content\ResourceContents; use Mcp\Schema\ResourceDefinition; +use Mcp\Server\Capability\Formatter\ResourceResultFormatter; /** * @phpstan-import-type Handler from ElementReference diff --git a/src/Capability/Registry/ResourceTemplateReference.php b/src/Server/Capability/Registry/ResourceTemplateReference.php similarity index 97% rename from src/Capability/Registry/ResourceTemplateReference.php rename to src/Server/Capability/Registry/ResourceTemplateReference.php index 49d03b39..15862f2e 100644 --- a/src/Capability/Registry/ResourceTemplateReference.php +++ b/src/Server/Capability/Registry/ResourceTemplateReference.php @@ -9,11 +9,11 @@ * file that was distributed with this source code. */ -namespace Mcp\Capability\Registry; +namespace Mcp\Server\Capability\Registry; -use Mcp\Capability\Formatter\ResourceResultFormatter; use Mcp\Schema\Content\ResourceContents; use Mcp\Schema\ResourceTemplate; +use Mcp\Server\Capability\Formatter\ResourceResultFormatter; /** * @phpstan-import-type Handler from ElementReference diff --git a/src/Capability/Registry/ToolReference.php b/src/Server/Capability/Registry/ToolReference.php similarity index 98% rename from src/Capability/Registry/ToolReference.php rename to src/Server/Capability/Registry/ToolReference.php index 97ace43e..9d67c06f 100644 --- a/src/Capability/Registry/ToolReference.php +++ b/src/Server/Capability/Registry/ToolReference.php @@ -9,12 +9,12 @@ * file that was distributed with this source code. */ -namespace Mcp\Capability\Registry; +namespace Mcp\Server\Capability\Registry; -use Mcp\Capability\Formatter\ToolResultFormatter; use Mcp\Schema\Content\Content; use Mcp\Schema\Enum\ProtocolVersion; use Mcp\Schema\Tool; +use Mcp\Server\Capability\Formatter\ToolResultFormatter; /** * @phpstan-import-type Handler from ElementReference diff --git a/src/Capability/RegistryInterface.php b/src/Server/Capability/RegistryInterface.php similarity index 91% rename from src/Capability/RegistryInterface.php rename to src/Server/Capability/RegistryInterface.php index bbbef766..bccca7b2 100644 --- a/src/Capability/RegistryInterface.php +++ b/src/Server/Capability/RegistryInterface.php @@ -9,21 +9,21 @@ * file that was distributed with this source code. */ -namespace Mcp\Capability; - -use Mcp\Capability\Registry\ElementReference; -use Mcp\Capability\Registry\PromptReference; -use Mcp\Capability\Registry\ResourceReference; -use Mcp\Capability\Registry\ResourceTemplateReference; -use Mcp\Capability\Registry\ToolReference; -use Mcp\Exception\PromptNotFoundException; -use Mcp\Exception\ResourceNotFoundException; -use Mcp\Exception\ToolNotFoundException; +namespace Mcp\Server\Capability; + use Mcp\Schema\Page; use Mcp\Schema\Prompt; use Mcp\Schema\ResourceDefinition; use Mcp\Schema\ResourceTemplate; use Mcp\Schema\Tool; +use Mcp\Server\Capability\Registry\ElementReference; +use Mcp\Server\Capability\Registry\PromptReference; +use Mcp\Server\Capability\Registry\ResourceReference; +use Mcp\Server\Capability\Registry\ResourceTemplateReference; +use Mcp\Server\Capability\Registry\ToolReference; +use Mcp\Server\Exception\PromptNotFoundException; +use Mcp\Server\Exception\ResourceNotFoundException; +use Mcp\Server\Exception\ToolNotFoundException; /** * @phpstan-import-type Handler from ElementReference diff --git a/src/Capability/Tool/NameValidator.php b/src/Server/Capability/Tool/NameValidator.php similarity index 91% rename from src/Capability/Tool/NameValidator.php rename to src/Server/Capability/Tool/NameValidator.php index fe9bb084..5daeefeb 100644 --- a/src/Capability/Tool/NameValidator.php +++ b/src/Server/Capability/Tool/NameValidator.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace Mcp\Capability\Tool; +namespace Mcp\Server\Capability\Tool; final class NameValidator { diff --git a/src/Server/ClientGateway.php b/src/Server/ClientGateway.php index a60e539c..8b8c6f44 100644 --- a/src/Server/ClientGateway.php +++ b/src/Server/ClientGateway.php @@ -11,9 +11,6 @@ namespace Mcp\Server; -use Mcp\Exception\ClientException; -use Mcp\Exception\InvalidArgumentException; -use Mcp\Exception\RuntimeException; use Mcp\Schema\Content\AudioContent; use Mcp\Schema\Content\Content; use Mcp\Schema\Content\ImageContent; @@ -39,6 +36,9 @@ use Mcp\Schema\Result\ListRootsResult; use Mcp\Schema\Tool; use Mcp\Schema\ToolChoice; +use Mcp\Server\Exception\ClientException; +use Mcp\Server\Exception\InvalidArgumentException; +use Mcp\Server\Exception\RuntimeException; use Mcp\Server\Session\SessionInterface; /** diff --git a/src/Event/ErrorEvent.php b/src/Server/Event/ErrorEvent.php similarity index 97% rename from src/Event/ErrorEvent.php rename to src/Server/Event/ErrorEvent.php index 65ce650d..8521e9fd 100644 --- a/src/Event/ErrorEvent.php +++ b/src/Server/Event/ErrorEvent.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace Mcp\Event; +namespace Mcp\Server\Event; use Mcp\Schema\JsonRpc\Error; use Mcp\Schema\JsonRpc\Request; diff --git a/src/Event/NotificationEvent.php b/src/Server/Event/NotificationEvent.php similarity index 97% rename from src/Event/NotificationEvent.php rename to src/Server/Event/NotificationEvent.php index 579d877d..b021ae31 100644 --- a/src/Event/NotificationEvent.php +++ b/src/Server/Event/NotificationEvent.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace Mcp\Event; +namespace Mcp\Server\Event; use Mcp\Schema\JsonRpc\Notification; use Mcp\Server\Session\SessionInterface; diff --git a/src/Event/PromptListChangedEvent.php b/src/Server/Event/PromptListChangedEvent.php similarity index 92% rename from src/Event/PromptListChangedEvent.php rename to src/Server/Event/PromptListChangedEvent.php index 2e869181..3da1352b 100644 --- a/src/Event/PromptListChangedEvent.php +++ b/src/Server/Event/PromptListChangedEvent.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace Mcp\Event; +namespace Mcp\Server\Event; /** * @author Christopher Hertel diff --git a/src/Event/RequestEvent.php b/src/Server/Event/RequestEvent.php similarity index 97% rename from src/Event/RequestEvent.php rename to src/Server/Event/RequestEvent.php index 3a7de08e..465a1ac9 100644 --- a/src/Event/RequestEvent.php +++ b/src/Server/Event/RequestEvent.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace Mcp\Event; +namespace Mcp\Server\Event; use Mcp\Schema\JsonRpc\Request; use Mcp\Server\Session\SessionInterface; diff --git a/src/Event/ResourceListChangedEvent.php b/src/Server/Event/ResourceListChangedEvent.php similarity index 92% rename from src/Event/ResourceListChangedEvent.php rename to src/Server/Event/ResourceListChangedEvent.php index 83120d68..3a4bdb10 100644 --- a/src/Event/ResourceListChangedEvent.php +++ b/src/Server/Event/ResourceListChangedEvent.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace Mcp\Event; +namespace Mcp\Server\Event; /** * @author Christopher Hertel diff --git a/src/Event/ResourceTemplateListChangedEvent.php b/src/Server/Event/ResourceTemplateListChangedEvent.php similarity index 93% rename from src/Event/ResourceTemplateListChangedEvent.php rename to src/Server/Event/ResourceTemplateListChangedEvent.php index 0c13f654..f888a9d0 100644 --- a/src/Event/ResourceTemplateListChangedEvent.php +++ b/src/Server/Event/ResourceTemplateListChangedEvent.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace Mcp\Event; +namespace Mcp\Server\Event; /** * @author Christopher Hertel diff --git a/src/Event/ResponseEvent.php b/src/Server/Event/ResponseEvent.php similarity index 98% rename from src/Event/ResponseEvent.php rename to src/Server/Event/ResponseEvent.php index 94b9a907..9eec7c00 100644 --- a/src/Event/ResponseEvent.php +++ b/src/Server/Event/ResponseEvent.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace Mcp\Event; +namespace Mcp\Server\Event; use Mcp\Schema\JsonRpc\Request; use Mcp\Schema\JsonRpc\Response; diff --git a/src/Event/ToolListChangedEvent.php b/src/Server/Event/ToolListChangedEvent.php similarity index 92% rename from src/Event/ToolListChangedEvent.php rename to src/Server/Event/ToolListChangedEvent.php index 84d175a2..672eba02 100644 --- a/src/Event/ToolListChangedEvent.php +++ b/src/Server/Event/ToolListChangedEvent.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace Mcp\Event; +namespace Mcp\Server\Event; /** * @author Christopher Hertel diff --git a/src/Exception/BadMethodCallException.php b/src/Server/Exception/BadMethodCallException.php similarity index 92% rename from src/Exception/BadMethodCallException.php rename to src/Server/Exception/BadMethodCallException.php index d7c00c14..641b3681 100644 --- a/src/Exception/BadMethodCallException.php +++ b/src/Server/Exception/BadMethodCallException.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace Mcp\Exception; +namespace Mcp\Server\Exception; /** * @author Antoine Bluchet diff --git a/src/Exception/ClientException.php b/src/Server/Exception/ClientException.php similarity index 95% rename from src/Exception/ClientException.php rename to src/Server/Exception/ClientException.php index 33e36680..9dd00e5a 100644 --- a/src/Exception/ClientException.php +++ b/src/Server/Exception/ClientException.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace Mcp\Exception; +namespace Mcp\Server\Exception; use Mcp\Schema\JsonRpc\Error; diff --git a/src/Exception/ClientRegistrationException.php b/src/Server/Exception/ClientRegistrationException.php similarity index 80% rename from src/Exception/ClientRegistrationException.php rename to src/Server/Exception/ClientRegistrationException.php index 38711468..42145898 100644 --- a/src/Exception/ClientRegistrationException.php +++ b/src/Server/Exception/ClientRegistrationException.php @@ -9,9 +9,9 @@ * file that was distributed with this source code. */ -namespace Mcp\Exception; +namespace Mcp\Server\Exception; -final class ClientRegistrationException extends \RuntimeException implements ExceptionInterface +final class ClientRegistrationException extends RuntimeException { public function __construct( string $message, diff --git a/src/Exception/ConfigurationException.php b/src/Server/Exception/ConfigurationException.php similarity index 92% rename from src/Exception/ConfigurationException.php rename to src/Server/Exception/ConfigurationException.php index b53333e0..ac530b0c 100644 --- a/src/Exception/ConfigurationException.php +++ b/src/Server/Exception/ConfigurationException.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace Mcp\Exception; +namespace Mcp\Server\Exception; /** * @author Oskar Stark diff --git a/src/Exception/ContainerException.php b/src/Server/Exception/ContainerException.php similarity index 92% rename from src/Exception/ContainerException.php rename to src/Server/Exception/ContainerException.php index 0a56987d..842297a0 100644 --- a/src/Exception/ContainerException.php +++ b/src/Server/Exception/ContainerException.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace Mcp\Exception; +namespace Mcp\Server\Exception; use Psr\Container\ContainerExceptionInterface; diff --git a/src/Server/Exception/Exception.php b/src/Server/Exception/Exception.php new file mode 100644 index 00000000..eeed34be --- /dev/null +++ b/src/Server/Exception/Exception.php @@ -0,0 +1,19 @@ + + */ +class Exception extends \Exception implements ExceptionInterface +{ +} diff --git a/src/Exception/HandlerNotFoundException.php b/src/Server/Exception/ExceptionInterface.php similarity index 65% rename from src/Exception/HandlerNotFoundException.php rename to src/Server/Exception/ExceptionInterface.php index ef222eda..9e4b4434 100644 --- a/src/Exception/HandlerNotFoundException.php +++ b/src/Server/Exception/ExceptionInterface.php @@ -9,11 +9,13 @@ * file that was distributed with this source code. */ -namespace Mcp\Exception; +namespace Mcp\Server\Exception; + +use Mcp\Schema\Exception\ExceptionInterface as SchemaExceptionInterface; /** * @author Tobias Nyholm */ -class HandlerNotFoundException extends \InvalidArgumentException implements NotFoundExceptionInterface +interface ExceptionInterface extends SchemaExceptionInterface { } diff --git a/src/Server/Exception/InvalidArgumentException.php b/src/Server/Exception/InvalidArgumentException.php new file mode 100644 index 00000000..30bcdc85 --- /dev/null +++ b/src/Server/Exception/InvalidArgumentException.php @@ -0,0 +1,19 @@ + + */ +class InvalidArgumentException extends \InvalidArgumentException implements ExceptionInterface +{ +} diff --git a/src/Exception/InvalidCursorException.php b/src/Server/Exception/InvalidCursorException.php similarity index 80% rename from src/Exception/InvalidCursorException.php rename to src/Server/Exception/InvalidCursorException.php index 5b08743a..ddb15124 100644 --- a/src/Exception/InvalidCursorException.php +++ b/src/Server/Exception/InvalidCursorException.php @@ -9,12 +9,12 @@ * file that was distributed with this source code. */ -namespace Mcp\Exception; +namespace Mcp\Server\Exception; /** * @author Tobias Nyholm */ -final class InvalidCursorException extends \InvalidArgumentException implements ExceptionInterface +final class InvalidCursorException extends InvalidArgumentException { public function __construct( public readonly string $cursor, diff --git a/src/Server/Exception/LogicException.php b/src/Server/Exception/LogicException.php new file mode 100644 index 00000000..1b5359a6 --- /dev/null +++ b/src/Server/Exception/LogicException.php @@ -0,0 +1,19 @@ + + */ +final class LogicException extends \LogicException implements ExceptionInterface +{ +} diff --git a/src/Exception/MissingRequiredClientCapabilityException.php b/src/Server/Exception/MissingRequiredClientCapabilityException.php similarity index 87% rename from src/Exception/MissingRequiredClientCapabilityException.php rename to src/Server/Exception/MissingRequiredClientCapabilityException.php index aa8b0315..83687973 100644 --- a/src/Exception/MissingRequiredClientCapabilityException.php +++ b/src/Server/Exception/MissingRequiredClientCapabilityException.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace Mcp\Exception; +namespace Mcp\Server\Exception; use Mcp\Schema\ClientCapabilities; @@ -22,7 +22,7 @@ * * @author Christopher Hertel */ -class MissingRequiredClientCapabilityException extends \RuntimeException implements ExceptionInterface +class MissingRequiredClientCapabilityException extends RuntimeException { public function __construct( public readonly ClientCapabilities $requiredCapabilities, diff --git a/src/Exception/NotFoundExceptionInterface.php b/src/Server/Exception/NotFoundExceptionInterface.php similarity index 92% rename from src/Exception/NotFoundExceptionInterface.php rename to src/Server/Exception/NotFoundExceptionInterface.php index faecad67..5b629bda 100644 --- a/src/Exception/NotFoundExceptionInterface.php +++ b/src/Server/Exception/NotFoundExceptionInterface.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace Mcp\Exception; +namespace Mcp\Server\Exception; /** * @author Tobias Nyholm diff --git a/src/Exception/PromptGetException.php b/src/Server/Exception/PromptGetException.php similarity index 74% rename from src/Exception/PromptGetException.php rename to src/Server/Exception/PromptGetException.php index 7eec0daf..1a803c22 100644 --- a/src/Exception/PromptGetException.php +++ b/src/Server/Exception/PromptGetException.php @@ -9,11 +9,11 @@ * file that was distributed with this source code. */ -namespace Mcp\Exception; +namespace Mcp\Server\Exception; /** * @author Tobias Nyholm */ -final class PromptGetException extends \RuntimeException implements ExceptionInterface +final class PromptGetException extends RuntimeException { } diff --git a/src/Exception/PromptNotFoundException.php b/src/Server/Exception/PromptNotFoundException.php similarity index 78% rename from src/Exception/PromptNotFoundException.php rename to src/Server/Exception/PromptNotFoundException.php index 81b7c6e5..b316c079 100644 --- a/src/Exception/PromptNotFoundException.php +++ b/src/Server/Exception/PromptNotFoundException.php @@ -9,12 +9,12 @@ * file that was distributed with this source code. */ -namespace Mcp\Exception; +namespace Mcp\Server\Exception; /** * @author Tobias Nyholm */ -final class PromptNotFoundException extends \RuntimeException implements NotFoundExceptionInterface +final class PromptNotFoundException extends RuntimeException implements NotFoundExceptionInterface { public function __construct( public readonly string $name, diff --git a/src/Exception/RegistryException.php b/src/Server/Exception/RegistryException.php similarity index 89% rename from src/Exception/RegistryException.php rename to src/Server/Exception/RegistryException.php index c483a01e..403fb203 100644 --- a/src/Exception/RegistryException.php +++ b/src/Server/Exception/RegistryException.php @@ -9,11 +9,11 @@ * file that was distributed with this source code. */ -namespace Mcp\Exception; +namespace Mcp\Server\Exception; use Mcp\Schema\JsonRpc\Error; -final class RegistryException extends \Exception implements ExceptionInterface +final class RegistryException extends Exception { public static function invalidParams(string $message = 'Invalid params', ?\Throwable $previous = null): self { diff --git a/src/Exception/RequestStateException.php b/src/Server/Exception/RequestStateException.php similarity index 94% rename from src/Exception/RequestStateException.php rename to src/Server/Exception/RequestStateException.php index 2dde880b..5ee65fc1 100644 --- a/src/Exception/RequestStateException.php +++ b/src/Server/Exception/RequestStateException.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace Mcp\Exception; +namespace Mcp\Server\Exception; /** * An echoed `requestState` failed verification. diff --git a/src/Exception/ResourceNotFoundException.php b/src/Server/Exception/ResourceNotFoundException.php similarity index 78% rename from src/Exception/ResourceNotFoundException.php rename to src/Server/Exception/ResourceNotFoundException.php index 420ac1a8..847716a2 100644 --- a/src/Exception/ResourceNotFoundException.php +++ b/src/Server/Exception/ResourceNotFoundException.php @@ -9,12 +9,12 @@ * file that was distributed with this source code. */ -namespace Mcp\Exception; +namespace Mcp\Server\Exception; /** * @author Tobias Nyholm */ -final class ResourceNotFoundException extends \RuntimeException implements NotFoundExceptionInterface +final class ResourceNotFoundException extends RuntimeException implements NotFoundExceptionInterface { public function __construct( public readonly string $uri, diff --git a/src/Exception/ResourceReadException.php b/src/Server/Exception/ResourceReadException.php similarity index 73% rename from src/Exception/ResourceReadException.php rename to src/Server/Exception/ResourceReadException.php index a89dec8e..c4ac7975 100644 --- a/src/Exception/ResourceReadException.php +++ b/src/Server/Exception/ResourceReadException.php @@ -9,11 +9,11 @@ * file that was distributed with this source code. */ -namespace Mcp\Exception; +namespace Mcp\Server\Exception; /** * @author Tobias Nyholm */ -final class ResourceReadException extends \RuntimeException implements ExceptionInterface +final class ResourceReadException extends RuntimeException { } diff --git a/src/Server/Exception/RuntimeException.php b/src/Server/Exception/RuntimeException.php new file mode 100644 index 00000000..65194ef1 --- /dev/null +++ b/src/Server/Exception/RuntimeException.php @@ -0,0 +1,19 @@ + + */ +class RuntimeException extends \RuntimeException implements ExceptionInterface +{ +} diff --git a/src/Exception/ServiceNotFoundException.php b/src/Server/Exception/ServiceNotFoundException.php similarity index 92% rename from src/Exception/ServiceNotFoundException.php rename to src/Server/Exception/ServiceNotFoundException.php index 2d22708a..f34aad1a 100644 --- a/src/Exception/ServiceNotFoundException.php +++ b/src/Server/Exception/ServiceNotFoundException.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace Mcp\Exception; +namespace Mcp\Server\Exception; use Psr\Container\NotFoundExceptionInterface; diff --git a/src/Exception/ToolCallException.php b/src/Server/Exception/ToolCallException.php similarity index 74% rename from src/Exception/ToolCallException.php rename to src/Server/Exception/ToolCallException.php index 01ba9f45..64bedafc 100644 --- a/src/Exception/ToolCallException.php +++ b/src/Server/Exception/ToolCallException.php @@ -9,11 +9,11 @@ * file that was distributed with this source code. */ -namespace Mcp\Exception; +namespace Mcp\Server\Exception; /** * @author Tobias Nyholm */ -final class ToolCallException extends \RuntimeException implements ExceptionInterface +final class ToolCallException extends RuntimeException { } diff --git a/src/Exception/ToolNotFoundException.php b/src/Server/Exception/ToolNotFoundException.php similarity index 78% rename from src/Exception/ToolNotFoundException.php rename to src/Server/Exception/ToolNotFoundException.php index 0a864e75..e61752f2 100644 --- a/src/Exception/ToolNotFoundException.php +++ b/src/Server/Exception/ToolNotFoundException.php @@ -9,12 +9,12 @@ * file that was distributed with this source code. */ -namespace Mcp\Exception; +namespace Mcp\Server\Exception; /** * @author Tobias Nyholm */ -final class ToolNotFoundException extends \RuntimeException implements NotFoundExceptionInterface +final class ToolNotFoundException extends RuntimeException implements NotFoundExceptionInterface { public function __construct( public readonly string $name, diff --git a/src/Server/Handler/Request/CallToolHandler.php b/src/Server/Handler/Request/CallToolHandler.php index 72f3c21f..f1884a4e 100644 --- a/src/Server/Handler/Request/CallToolHandler.php +++ b/src/Server/Handler/Request/CallToolHandler.php @@ -11,12 +11,6 @@ namespace Mcp\Server\Handler\Request; -use Mcp\Capability\Discovery\SchemaValidator; -use Mcp\Capability\Registry\ReferenceHandlerInterface; -use Mcp\Capability\RegistryInterface; -use Mcp\Exception\MissingRequiredClientCapabilityException; -use Mcp\Exception\ToolCallException; -use Mcp\Exception\ToolNotFoundException; use Mcp\Schema\Content\TextContent; use Mcp\Schema\JsonRpc\Error; use Mcp\Schema\JsonRpc\Request; @@ -24,6 +18,12 @@ use Mcp\Schema\Request\CallToolRequest; use Mcp\Schema\Result\CallToolResult; use Mcp\Schema\Result\InputRequiredResult; +use Mcp\Server\Capability\Discovery\SchemaValidator; +use Mcp\Server\Capability\Registry\ReferenceHandlerInterface; +use Mcp\Server\Capability\RegistryInterface; +use Mcp\Server\Exception\MissingRequiredClientCapabilityException; +use Mcp\Server\Exception\ToolCallException; +use Mcp\Server\Exception\ToolNotFoundException; use Mcp\Server\RequestContext; use Mcp\Server\Session\SessionInterface; use Psr\Log\LoggerInterface; diff --git a/src/Server/Handler/Request/CompletionCompleteHandler.php b/src/Server/Handler/Request/CompletionCompleteHandler.php index 704116da..aa708703 100644 --- a/src/Server/Handler/Request/CompletionCompleteHandler.php +++ b/src/Server/Handler/Request/CompletionCompleteHandler.php @@ -11,11 +11,6 @@ namespace Mcp\Server\Handler\Request; -use Mcp\Capability\Completion\ProviderInterface; -use Mcp\Capability\Registry\ResourceTemplateReference; -use Mcp\Capability\RegistryInterface; -use Mcp\Exception\PromptNotFoundException; -use Mcp\Exception\ResourceNotFoundException; use Mcp\Schema\JsonRpc\Error; use Mcp\Schema\JsonRpc\Request; use Mcp\Schema\JsonRpc\Response; @@ -23,6 +18,11 @@ use Mcp\Schema\Request\CompletionCompleteRequest; use Mcp\Schema\ResourceReference; use Mcp\Schema\Result\CompletionCompleteResult; +use Mcp\Server\Capability\Completion\ProviderInterface; +use Mcp\Server\Capability\Registry\ResourceTemplateReference; +use Mcp\Server\Capability\RegistryInterface; +use Mcp\Server\Exception\PromptNotFoundException; +use Mcp\Server\Exception\ResourceNotFoundException; use Mcp\Server\Session\SessionInterface; use Psr\Container\ContainerInterface; use Psr\Log\LoggerInterface; diff --git a/src/Server/Handler/Request/GetPromptHandler.php b/src/Server/Handler/Request/GetPromptHandler.php index 71d6f8c2..8631b046 100644 --- a/src/Server/Handler/Request/GetPromptHandler.php +++ b/src/Server/Handler/Request/GetPromptHandler.php @@ -11,17 +11,17 @@ namespace Mcp\Server\Handler\Request; -use Mcp\Capability\Registry\ReferenceHandlerInterface; -use Mcp\Capability\RegistryInterface; -use Mcp\Exception\MissingRequiredClientCapabilityException; -use Mcp\Exception\PromptGetException; -use Mcp\Exception\PromptNotFoundException; use Mcp\Schema\JsonRpc\Error; use Mcp\Schema\JsonRpc\Request; use Mcp\Schema\JsonRpc\Response; use Mcp\Schema\Request\GetPromptRequest; use Mcp\Schema\Result\GetPromptResult; use Mcp\Schema\Result\InputRequiredResult; +use Mcp\Server\Capability\Registry\ReferenceHandlerInterface; +use Mcp\Server\Capability\RegistryInterface; +use Mcp\Server\Exception\MissingRequiredClientCapabilityException; +use Mcp\Server\Exception\PromptGetException; +use Mcp\Server\Exception\PromptNotFoundException; use Mcp\Server\Session\SessionInterface; use Psr\Log\LoggerInterface; use Psr\Log\NullLogger; diff --git a/src/Server/Handler/Request/ListPromptsHandler.php b/src/Server/Handler/Request/ListPromptsHandler.php index ee287560..5f45f9f0 100644 --- a/src/Server/Handler/Request/ListPromptsHandler.php +++ b/src/Server/Handler/Request/ListPromptsHandler.php @@ -11,12 +11,12 @@ namespace Mcp\Server\Handler\Request; -use Mcp\Capability\RegistryInterface; -use Mcp\Exception\InvalidCursorException; use Mcp\Schema\JsonRpc\Request; use Mcp\Schema\JsonRpc\Response; use Mcp\Schema\Request\ListPromptsRequest; use Mcp\Schema\Result\ListPromptsResult; +use Mcp\Server\Capability\RegistryInterface; +use Mcp\Server\Exception\InvalidCursorException; use Mcp\Server\Session\SessionInterface; /** diff --git a/src/Server/Handler/Request/ListResourceTemplatesHandler.php b/src/Server/Handler/Request/ListResourceTemplatesHandler.php index 5360f75e..a211eeed 100644 --- a/src/Server/Handler/Request/ListResourceTemplatesHandler.php +++ b/src/Server/Handler/Request/ListResourceTemplatesHandler.php @@ -11,12 +11,12 @@ namespace Mcp\Server\Handler\Request; -use Mcp\Capability\RegistryInterface; -use Mcp\Exception\InvalidCursorException; use Mcp\Schema\JsonRpc\Request; use Mcp\Schema\JsonRpc\Response; use Mcp\Schema\Request\ListResourceTemplatesRequest; use Mcp\Schema\Result\ListResourceTemplatesResult; +use Mcp\Server\Capability\RegistryInterface; +use Mcp\Server\Exception\InvalidCursorException; use Mcp\Server\Session\SessionInterface; /** diff --git a/src/Server/Handler/Request/ListResourcesHandler.php b/src/Server/Handler/Request/ListResourcesHandler.php index d1d68307..e5c3c1b9 100644 --- a/src/Server/Handler/Request/ListResourcesHandler.php +++ b/src/Server/Handler/Request/ListResourcesHandler.php @@ -11,12 +11,12 @@ namespace Mcp\Server\Handler\Request; -use Mcp\Capability\RegistryInterface; -use Mcp\Exception\InvalidCursorException; use Mcp\Schema\JsonRpc\Request; use Mcp\Schema\JsonRpc\Response; use Mcp\Schema\Request\ListResourcesRequest; use Mcp\Schema\Result\ListResourcesResult; +use Mcp\Server\Capability\RegistryInterface; +use Mcp\Server\Exception\InvalidCursorException; use Mcp\Server\Session\SessionInterface; /** diff --git a/src/Server/Handler/Request/ListToolsHandler.php b/src/Server/Handler/Request/ListToolsHandler.php index 007bdd50..775a31ff 100644 --- a/src/Server/Handler/Request/ListToolsHandler.php +++ b/src/Server/Handler/Request/ListToolsHandler.php @@ -11,12 +11,12 @@ namespace Mcp\Server\Handler\Request; -use Mcp\Capability\RegistryInterface; -use Mcp\Exception\InvalidCursorException; use Mcp\Schema\JsonRpc\Request; use Mcp\Schema\JsonRpc\Response; use Mcp\Schema\Request\ListToolsRequest; use Mcp\Schema\Result\ListToolsResult; +use Mcp\Server\Capability\RegistryInterface; +use Mcp\Server\Exception\InvalidCursorException; use Mcp\Server\Session\SessionInterface; /** diff --git a/src/Server/Handler/Request/ReadResourceHandler.php b/src/Server/Handler/Request/ReadResourceHandler.php index 60755f8f..1fff2948 100644 --- a/src/Server/Handler/Request/ReadResourceHandler.php +++ b/src/Server/Handler/Request/ReadResourceHandler.php @@ -11,18 +11,18 @@ namespace Mcp\Server\Handler\Request; -use Mcp\Capability\Registry\ReferenceHandlerInterface; -use Mcp\Capability\Registry\ResourceTemplateReference; -use Mcp\Capability\RegistryInterface; -use Mcp\Exception\MissingRequiredClientCapabilityException; -use Mcp\Exception\ResourceNotFoundException; -use Mcp\Exception\ResourceReadException; use Mcp\Schema\JsonRpc\Error; use Mcp\Schema\JsonRpc\Request; use Mcp\Schema\JsonRpc\Response; use Mcp\Schema\Request\ReadResourceRequest; use Mcp\Schema\Result\InputRequiredResult; use Mcp\Schema\Result\ReadResourceResult; +use Mcp\Server\Capability\Registry\ReferenceHandlerInterface; +use Mcp\Server\Capability\Registry\ResourceTemplateReference; +use Mcp\Server\Capability\RegistryInterface; +use Mcp\Server\Exception\MissingRequiredClientCapabilityException; +use Mcp\Server\Exception\ResourceNotFoundException; +use Mcp\Server\Exception\ResourceReadException; use Mcp\Server\RequestContext; use Mcp\Server\Session\SessionInterface; use Psr\Log\LoggerInterface; diff --git a/src/Server/Handler/Request/ResourceSubscribeHandler.php b/src/Server/Handler/Request/ResourceSubscribeHandler.php index 1e8147b0..96acdbd4 100644 --- a/src/Server/Handler/Request/ResourceSubscribeHandler.php +++ b/src/Server/Handler/Request/ResourceSubscribeHandler.php @@ -11,13 +11,13 @@ namespace Mcp\Server\Handler\Request; -use Mcp\Capability\RegistryInterface; -use Mcp\Exception\ResourceNotFoundException; use Mcp\Schema\JsonRpc\Error; use Mcp\Schema\JsonRpc\Request; use Mcp\Schema\JsonRpc\Response; use Mcp\Schema\Request\ResourceSubscribeRequest; use Mcp\Schema\Result\EmptyResult; +use Mcp\Server\Capability\RegistryInterface; +use Mcp\Server\Exception\ResourceNotFoundException; use Mcp\Server\RequestContext; use Mcp\Server\Resource\SubscriptionManagerInterface; use Mcp\Server\Session\SessionInterface; diff --git a/src/Server/Handler/Request/ResourceUnsubscribeHandler.php b/src/Server/Handler/Request/ResourceUnsubscribeHandler.php index 522c5128..a0bdfef3 100644 --- a/src/Server/Handler/Request/ResourceUnsubscribeHandler.php +++ b/src/Server/Handler/Request/ResourceUnsubscribeHandler.php @@ -11,13 +11,13 @@ namespace Mcp\Server\Handler\Request; -use Mcp\Capability\RegistryInterface; -use Mcp\Exception\ResourceNotFoundException; use Mcp\Schema\JsonRpc\Error; use Mcp\Schema\JsonRpc\Request; use Mcp\Schema\JsonRpc\Response; use Mcp\Schema\Request\ResourceUnsubscribeRequest; use Mcp\Schema\Result\EmptyResult; +use Mcp\Server\Capability\RegistryInterface; +use Mcp\Server\Exception\ResourceNotFoundException; use Mcp\Server\RequestContext; use Mcp\Server\Resource\SubscriptionManagerInterface; use Mcp\Server\Session\SessionInterface; diff --git a/src/Server/InputRequiredShim.php b/src/Server/InputRequiredShim.php index 9dff786c..7ddfb315 100644 --- a/src/Server/InputRequiredShim.php +++ b/src/Server/InputRequiredShim.php @@ -11,13 +11,13 @@ namespace Mcp\Server; -use Mcp\Exception\RequestStateException; use Mcp\Schema\ClientCapabilities; use Mcp\Schema\JsonRpc\Error; use Mcp\Schema\JsonRpc\Request; use Mcp\Schema\JsonRpc\Response; use Mcp\Schema\JsonRpc\ResultInterface; use Mcp\Schema\Result\InputRequiredResult; +use Mcp\Server\Exception\RequestStateException; use Mcp\Server\Handler\Request\RequestHandlerInterface; use Mcp\Server\Session\SessionInterface; use Mcp\Server\Stateless\InputContext; diff --git a/src/Server/Protocol.php b/src/Server/Protocol.php index 4d6e5f5c..da679d39 100644 --- a/src/Server/Protocol.php +++ b/src/Server/Protocol.php @@ -11,18 +11,18 @@ namespace Mcp\Server; -use Mcp\Event\ErrorEvent; -use Mcp\Event\NotificationEvent; -use Mcp\Event\RequestEvent; -use Mcp\Event\ResponseEvent; -use Mcp\Exception\InvalidInputMessageException; -use Mcp\JsonRpc\MessageFactory; +use Mcp\Schema\Exception\InvalidInputMessageException; use Mcp\Schema\JsonRpc\Error; use Mcp\Schema\JsonRpc\Notification; use Mcp\Schema\JsonRpc\Request; use Mcp\Schema\JsonRpc\Response; use Mcp\Schema\JsonRpc\ResultInterface; +use Mcp\Schema\MessageFactory; use Mcp\Schema\Request\InitializeRequest; +use Mcp\Server\Event\ErrorEvent; +use Mcp\Server\Event\NotificationEvent; +use Mcp\Server\Event\RequestEvent; +use Mcp\Server\Event\ResponseEvent; use Mcp\Server\Handler\Notification\NotificationHandlerInterface; use Mcp\Server\Handler\Request\RequestHandlerInterface; use Mcp\Server\Session\SessionInterface; diff --git a/src/Server/RequestContext.php b/src/Server/RequestContext.php index f322a39d..ec7d33bd 100644 --- a/src/Server/RequestContext.php +++ b/src/Server/RequestContext.php @@ -11,14 +11,14 @@ namespace Mcp\Server; -use Mcp\Capability\Logger\ClientLogger; -use Mcp\Exception\LogicException; use Mcp\Schema\ClientCapabilities; use Mcp\Schema\Enum\ProtocolVersion; use Mcp\Schema\JsonRpc\Request; +use Mcp\Schema\RequestMeta; +use Mcp\Server\Capability\Logger\ClientLogger; +use Mcp\Server\Exception\LogicException; use Mcp\Server\Session\SessionInterface; use Mcp\Server\Stateless\InputContext; -use Mcp\Server\Stateless\RequestMeta; use Mcp\Server\Stateless\RequestStateCodec; /** diff --git a/src/Server.php b/src/Server/Server.php similarity index 96% rename from src/Server.php rename to src/Server/Server.php index a19e8592..80c22fb8 100644 --- a/src/Server.php +++ b/src/Server/Server.php @@ -9,10 +9,8 @@ * file that was distributed with this source code. */ -namespace Mcp; +namespace Mcp\Server; -use Mcp\Server\Builder; -use Mcp\Server\Protocol; use Mcp\Server\Stateless\StatelessProtocol; use Mcp\Server\Transport\StatelessAwareTransportInterface; use Mcp\Server\Transport\TransportInterface; diff --git a/src/Server/Session/FileSessionStore.php b/src/Server/Session/FileSessionStore.php index e218e75a..a1b94e3e 100644 --- a/src/Server/Session/FileSessionStore.php +++ b/src/Server/Session/FileSessionStore.php @@ -11,7 +11,7 @@ namespace Mcp\Server\Session; -use Mcp\Exception\RuntimeException; +use Mcp\Server\Exception\RuntimeException; use Mcp\Server\NativeClock; use Psr\Clock\ClockInterface; use Symfony\Component\Uid\Uuid; diff --git a/src/Server/Session/SessionManager.php b/src/Server/Session/SessionManager.php index 2a08f7ee..21535359 100644 --- a/src/Server/Session/SessionManager.php +++ b/src/Server/Session/SessionManager.php @@ -11,7 +11,7 @@ namespace Mcp\Server\Session; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Server\Exception\InvalidArgumentException; use Psr\Log\LoggerInterface; use Psr\Log\NullLogger; use Symfony\Component\Uid\Uuid; diff --git a/src/Server/Stateless/ElicitationReplay.php b/src/Server/Stateless/ElicitationReplay.php index fe936277..6d66349d 100644 --- a/src/Server/Stateless/ElicitationReplay.php +++ b/src/Server/Stateless/ElicitationReplay.php @@ -11,11 +11,11 @@ namespace Mcp\Server\Stateless; -use Mcp\Exception\LogicException; use Mcp\Schema\Enum\ElicitationMode; use Mcp\Schema\Request\ElicitRequest; use Mcp\Schema\Result\ElicitResult; use Mcp\Schema\Result\InputRequiredResult; +use Mcp\Server\Exception\LogicException; /** * Answers a handler's {@see \Mcp\Server\ClientGateway::elicit()} on a lifecycle diff --git a/src/Server/Stateless/RequestStateCodec.php b/src/Server/Stateless/RequestStateCodec.php index 9dcf477b..b05911cd 100644 --- a/src/Server/Stateless/RequestStateCodec.php +++ b/src/Server/Stateless/RequestStateCodec.php @@ -11,8 +11,8 @@ namespace Mcp\Server\Stateless; -use Mcp\Exception\InvalidArgumentException; -use Mcp\Exception\RequestStateException; +use Mcp\Server\Exception\InvalidArgumentException; +use Mcp\Server\Exception\RequestStateException; /** * Seals and verifies the opaque `requestState` carried across the rounds of a diff --git a/src/Server/Stateless/StandardHeaderValidator.php b/src/Server/Stateless/StandardHeaderValidator.php index 0d548730..a96d7142 100644 --- a/src/Server/Stateless/StandardHeaderValidator.php +++ b/src/Server/Stateless/StandardHeaderValidator.php @@ -11,9 +11,9 @@ namespace Mcp\Server\Stateless; -use Mcp\Capability\RegistryInterface; -use Mcp\Exception\ToolNotFoundException; use Mcp\Schema\Wire\McpHeader; +use Mcp\Server\Capability\RegistryInterface; +use Mcp\Server\Exception\ToolNotFoundException; /** * Checks that a request's HTTP headers agree with its JSON-RPC body (SEP-2243). diff --git a/src/Server/Stateless/StatelessProtocol.php b/src/Server/Stateless/StatelessProtocol.php index a179a217..db4417fa 100644 --- a/src/Server/Stateless/StatelessProtocol.php +++ b/src/Server/Stateless/StatelessProtocol.php @@ -11,23 +11,25 @@ namespace Mcp\Server\Stateless; -use Mcp\Exception\InvalidInputMessageException; -use Mcp\Exception\LogicException; -use Mcp\Exception\MissingRequestMetaException; -use Mcp\Exception\MissingRequiredClientCapabilityException; -use Mcp\Exception\RequestStateException; -use Mcp\JsonRpc\MessageFactory; use Mcp\Schema\Enum\ProtocolVersion; +use Mcp\Schema\Exception\InvalidInputMessageException; +use Mcp\Schema\Exception\MissingRequestMetaException; use Mcp\Schema\JsonRpc\Error; use Mcp\Schema\JsonRpc\Notification; use Mcp\Schema\JsonRpc\Request; use Mcp\Schema\JsonRpc\Response; use Mcp\Schema\JsonRpc\ResultInterface; +use Mcp\Schema\MessageFactory; use Mcp\Schema\Notification\LoggingMessageNotification; use Mcp\Schema\Request\ElicitRequest; +use Mcp\Schema\RequestMeta; use Mcp\Schema\Result\DiscoverResult; use Mcp\Schema\Result\InputRequiredResult; +use Mcp\Schema\Wire\McpHeader; use Mcp\Server\Configuration; +use Mcp\Server\Exception\LogicException; +use Mcp\Server\Exception\MissingRequiredClientCapabilityException; +use Mcp\Server\Exception\RequestStateException; use Mcp\Server\Handler\Request\RequestHandlerInterface; use Mcp\Server\Protocol; use Mcp\Server\Session\InMemorySessionStore; @@ -262,7 +264,7 @@ private function acknowledge(string $method): StatelessResult */ private function checkVersion(RequestMeta $meta, array $headers, string|int|null $id): ?StatelessResult { - $headerVersion = $this->header($headers, 'MCP-Protocol-Version'); + $headerVersion = McpHeader::lookup($headers, 'MCP-Protocol-Version'); // REQUIRED on every POST. The 2025-03-26 fallback for a header-less // request exists only for servers choosing to serve pre-2025-06-18 @@ -863,12 +865,4 @@ private static function acceptsEventStream(array $headers): bool return false; } - - /** - * @param array $headers - */ - private function header(array $headers, string $name): ?string - { - return InboundClassifier::header($headers, $name); - } } diff --git a/src/Server/Subscription/InMemoryNotificationBus.php b/src/Server/Subscription/InMemoryNotificationBus.php index af93cef2..66c14694 100644 --- a/src/Server/Subscription/InMemoryNotificationBus.php +++ b/src/Server/Subscription/InMemoryNotificationBus.php @@ -11,8 +11,8 @@ namespace Mcp\Server\Subscription; -use Mcp\Exception\InvalidArgumentException; use Mcp\Schema\JsonRpc\Notification; +use Mcp\Server\Exception\InvalidArgumentException; /** * A notification bus held in one process's memory. diff --git a/src/Server/Subscription/Psr16NotificationBus.php b/src/Server/Subscription/Psr16NotificationBus.php index 2f9b63a1..6085c1e0 100644 --- a/src/Server/Subscription/Psr16NotificationBus.php +++ b/src/Server/Subscription/Psr16NotificationBus.php @@ -11,9 +11,9 @@ namespace Mcp\Server\Subscription; -use Mcp\Exception\InvalidArgumentException; -use Mcp\JsonRpc\MessageFactory; use Mcp\Schema\JsonRpc\Notification; +use Mcp\Schema\MessageFactory; +use Mcp\Server\Exception\InvalidArgumentException; use Psr\Log\LoggerInterface; use Psr\Log\NullLogger; use Psr\SimpleCache\CacheInterface; diff --git a/src/Server/Subscription/RegistryChangePublisher.php b/src/Server/Subscription/RegistryChangePublisher.php index f54a356d..9fbf45b3 100644 --- a/src/Server/Subscription/RegistryChangePublisher.php +++ b/src/Server/Subscription/RegistryChangePublisher.php @@ -11,13 +11,13 @@ namespace Mcp\Server\Subscription; -use Mcp\Event\PromptListChangedEvent; -use Mcp\Event\ResourceListChangedEvent; -use Mcp\Event\ResourceTemplateListChangedEvent; -use Mcp\Event\ToolListChangedEvent; use Mcp\Schema\Notification\PromptListChangedNotification; use Mcp\Schema\Notification\ResourceListChangedNotification; use Mcp\Schema\Notification\ToolListChangedNotification; +use Mcp\Server\Event\PromptListChangedEvent; +use Mcp\Server\Event\ResourceListChangedEvent; +use Mcp\Server\Event\ResourceTemplateListChangedEvent; +use Mcp\Server\Event\ToolListChangedEvent; /** * Turns the registry's own change events into the notifications a diff --git a/src/Server/Transport/CallbackStream.php b/src/Server/Transport/CallbackStream.php index 72d74b69..667363b1 100644 --- a/src/Server/Transport/CallbackStream.php +++ b/src/Server/Transport/CallbackStream.php @@ -11,7 +11,7 @@ namespace Mcp\Server\Transport; -use Mcp\Exception\RuntimeException; +use Mcp\Server\Exception\RuntimeException; use Psr\Http\Message\StreamInterface; use Psr\Log\LoggerInterface; use Psr\Log\NullLogger; diff --git a/src/Server/Transport/Http/Middleware/AuthorizationMiddleware.php b/src/Server/Transport/Http/Middleware/AuthorizationMiddleware.php index d4175985..496a295d 100644 --- a/src/Server/Transport/Http/Middleware/AuthorizationMiddleware.php +++ b/src/Server/Transport/Http/Middleware/AuthorizationMiddleware.php @@ -12,7 +12,7 @@ namespace Mcp\Server\Transport\Http\Middleware; use Http\Discovery\Psr17FactoryDiscovery; -use Mcp\Exception\RuntimeException; +use Mcp\Server\Exception\RuntimeException; use Mcp\Server\Transport\Http\OAuth\AuthorizationResult; use Mcp\Server\Transport\Http\OAuth\AuthorizationTokenValidatorInterface; use Mcp\Server\Transport\Http\OAuth\ProtectedResourceMetadata; diff --git a/src/Server/Transport/Http/Middleware/ClientRegistrationMiddleware.php b/src/Server/Transport/Http/Middleware/ClientRegistrationMiddleware.php index 6b94e308..568a37e6 100644 --- a/src/Server/Transport/Http/Middleware/ClientRegistrationMiddleware.php +++ b/src/Server/Transport/Http/Middleware/ClientRegistrationMiddleware.php @@ -12,8 +12,8 @@ namespace Mcp\Server\Transport\Http\Middleware; use Http\Discovery\Psr17FactoryDiscovery; -use Mcp\Exception\ClientRegistrationException; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Server\Exception\ClientRegistrationException; +use Mcp\Server\Exception\InvalidArgumentException; use Mcp\Server\Transport\Http\OAuth\ClientRegistrarInterface; use Psr\Http\Message\ResponseFactoryInterface; use Psr\Http\Message\ResponseInterface; diff --git a/src/Server/Transport/Http/Middleware/CorsMiddleware.php b/src/Server/Transport/Http/Middleware/CorsMiddleware.php index a32d4ca7..38d77b9c 100644 --- a/src/Server/Transport/Http/Middleware/CorsMiddleware.php +++ b/src/Server/Transport/Http/Middleware/CorsMiddleware.php @@ -11,7 +11,7 @@ namespace Mcp\Server\Transport\Http\Middleware; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Server\Exception\InvalidArgumentException; use Mcp\Server\Transport\StreamableHttpTransport; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; diff --git a/src/Server/Transport/Http/Middleware/OAuthProxyMiddleware.php b/src/Server/Transport/Http/Middleware/OAuthProxyMiddleware.php index f59a6dc8..f147d1a6 100644 --- a/src/Server/Transport/Http/Middleware/OAuthProxyMiddleware.php +++ b/src/Server/Transport/Http/Middleware/OAuthProxyMiddleware.php @@ -13,7 +13,7 @@ use Http\Discovery\Psr17FactoryDiscovery; use Http\Discovery\Psr18ClientDiscovery; -use Mcp\Exception\RuntimeException; +use Mcp\Server\Exception\RuntimeException; use Mcp\Server\Transport\Http\OAuth\OidcDiscoveryInterface; use Psr\Http\Client\ClientExceptionInterface; use Psr\Http\Client\ClientInterface; diff --git a/src/Server/Transport/Http/OAuth/ClientRegistrarInterface.php b/src/Server/Transport/Http/OAuth/ClientRegistrarInterface.php index c0b58dcd..ffca4afc 100644 --- a/src/Server/Transport/Http/OAuth/ClientRegistrarInterface.php +++ b/src/Server/Transport/Http/OAuth/ClientRegistrarInterface.php @@ -11,7 +11,7 @@ namespace Mcp\Server\Transport\Http\OAuth; -use Mcp\Exception\ClientRegistrationException; +use Mcp\Server\Exception\ClientRegistrationException; /** * Interface for OAuth 2.0 Dynamic Client Registration (RFC 7591). diff --git a/src/Server/Transport/Http/OAuth/JwksProvider.php b/src/Server/Transport/Http/OAuth/JwksProvider.php index 794ce3b3..b1568567 100644 --- a/src/Server/Transport/Http/OAuth/JwksProvider.php +++ b/src/Server/Transport/Http/OAuth/JwksProvider.php @@ -13,7 +13,7 @@ use Http\Discovery\Psr17FactoryDiscovery; use Http\Discovery\Psr18ClientDiscovery; -use Mcp\Exception\RuntimeException; +use Mcp\Server\Exception\RuntimeException; use Psr\Http\Client\ClientExceptionInterface; use Psr\Http\Client\ClientInterface; use Psr\Http\Message\RequestFactoryInterface; diff --git a/src/Server/Transport/Http/OAuth/JwtTokenValidator.php b/src/Server/Transport/Http/OAuth/JwtTokenValidator.php index a0ffe061..cda34e09 100644 --- a/src/Server/Transport/Http/OAuth/JwtTokenValidator.php +++ b/src/Server/Transport/Http/OAuth/JwtTokenValidator.php @@ -16,7 +16,7 @@ use Firebase\JWT\JWK; use Firebase\JWT\JWT; use Firebase\JWT\SignatureInvalidException; -use Mcp\Exception\RuntimeException; +use Mcp\Server\Exception\RuntimeException; /** * Validates JWT access tokens using JWKS from an OAuth 2.0 / OpenID Connect provider. diff --git a/src/Server/Transport/Http/OAuth/OidcDiscovery.php b/src/Server/Transport/Http/OAuth/OidcDiscovery.php index 2f246852..c66e2a28 100644 --- a/src/Server/Transport/Http/OAuth/OidcDiscovery.php +++ b/src/Server/Transport/Http/OAuth/OidcDiscovery.php @@ -13,7 +13,7 @@ use Http\Discovery\Psr17FactoryDiscovery; use Http\Discovery\Psr18ClientDiscovery; -use Mcp\Exception\RuntimeException; +use Mcp\Server\Exception\RuntimeException; use Psr\Http\Client\ClientExceptionInterface; use Psr\Http\Client\ClientInterface; use Psr\Http\Message\RequestFactoryInterface; diff --git a/src/Server/Transport/Http/OAuth/ProtectedResourceMetadata.php b/src/Server/Transport/Http/OAuth/ProtectedResourceMetadata.php index dd96982b..c31b3bdd 100644 --- a/src/Server/Transport/Http/OAuth/ProtectedResourceMetadata.php +++ b/src/Server/Transport/Http/OAuth/ProtectedResourceMetadata.php @@ -11,7 +11,7 @@ namespace Mcp\Server\Transport\Http\OAuth; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Server\Exception\InvalidArgumentException; /** * OAuth 2.0 Protected Resource Metadata (RFC 9728). diff --git a/src/Server/Transport/StatelessAwareTransportInterface.php b/src/Server/Transport/StatelessAwareTransportInterface.php index 52815b3e..f41d03a9 100644 --- a/src/Server/Transport/StatelessAwareTransportInterface.php +++ b/src/Server/Transport/StatelessAwareTransportInterface.php @@ -17,7 +17,7 @@ * A transport that can carry the modern (SEP-2575) lifecycle as well as the * handshake one. * - * {@see \Mcp\Server::run()} hands such a transport both dispatchers; deciding + * {@see \Mcp\Server\Server::run()} hands such a transport both dispatchers; deciding * which of them answers is the transport's job, because the evidence is in the * request it just read. * diff --git a/src/Server/Transport/StdioTransport.php b/src/Server/Transport/StdioTransport.php index 565f7da7..428af39d 100644 --- a/src/Server/Transport/StdioTransport.php +++ b/src/Server/Transport/StdioTransport.php @@ -11,8 +11,8 @@ namespace Mcp\Server\Transport; -use Mcp\Exception\InvalidArgumentException; use Mcp\Schema\JsonRpc\Error; +use Mcp\Server\Exception\InvalidArgumentException; use Mcp\Server\Transport\Stdio\RunnerControl; use Mcp\Server\Transport\Stdio\RunnerControlInterface; use Mcp\Server\Transport\Stdio\RunnerState; diff --git a/src/Server/Transport/StreamableHttpTransport.php b/src/Server/Transport/StreamableHttpTransport.php index 2bf088bc..9d086596 100644 --- a/src/Server/Transport/StreamableHttpTransport.php +++ b/src/Server/Transport/StreamableHttpTransport.php @@ -12,9 +12,9 @@ namespace Mcp\Server\Transport; use Http\Discovery\Psr17FactoryDiscovery; -use Mcp\Exception\InvalidArgumentException; use Mcp\Schema\Enum\ProtocolVersion; use Mcp\Schema\JsonRpc\Error; +use Mcp\Server\Exception\InvalidArgumentException; use Mcp\Server\Stateless\StatelessProtocol; use Mcp\Server\Transport\Http\Middleware\CorsMiddleware; use Mcp\Server\Transport\Http\Middleware\DnsRebindingProtectionMiddleware; diff --git a/src/Server/Wire/CachePolicy.php b/src/Server/Wire/CachePolicy.php index e22fb212..a74e393b 100644 --- a/src/Server/Wire/CachePolicy.php +++ b/src/Server/Wire/CachePolicy.php @@ -11,8 +11,8 @@ namespace Mcp\Server\Wire; -use Mcp\Exception\InvalidArgumentException; use Mcp\Schema\Enum\CacheScope; +use Mcp\Server\Exception\InvalidArgumentException; /** * How long, and to whom, a server's answers may be cached (SEP-2549). diff --git a/src/Server/Wire/InboundClassifier.php b/src/Server/Wire/InboundClassifier.php index 826284df..936e25e3 100644 --- a/src/Server/Wire/InboundClassifier.php +++ b/src/Server/Wire/InboundClassifier.php @@ -13,7 +13,8 @@ use Mcp\Schema\Enum\ProtocolVersion; use Mcp\Schema\JsonRpc\Error; -use Mcp\Server\Stateless\RequestMeta; +use Mcp\Schema\RequestMeta; +use Mcp\Schema\Wire\McpHeader; /** * Decides which protocol era one inbound HTTP request belongs to. @@ -73,7 +74,7 @@ public function classify(string $httpMethod, ?string $body, array $headers = []) return EraClassification::legacy(); } - $headerVersion = self::header($headers, self::PROTOCOL_VERSION_HEADER); + $headerVersion = McpHeader::lookup($headers, self::PROTOCOL_VERSION_HEADER); if (array_is_list($decoded)) { return $this->classifyBatch($decoded, $headerVersion); @@ -100,22 +101,6 @@ public static function crossCheckVersion(?string $headerVersion, string $claimed return \sprintf('MCP-Protocol-Version header "%s" contradicts the "%s" declared in _meta.', $headerVersion, $claimedVersion); } - /** - * Case-insensitive header lookup, since PSR-7 preserves the sender's casing. - * - * @param array $headers - */ - public static function header(array $headers, string $name): ?string - { - foreach ($headers as $key => $value) { - if (0 === strcasecmp($key, $name)) { - return '' === $value ? null : $value; - } - } - - return null; - } - /** * @param list $messages */ diff --git a/src/Server/Wire/Rev2026Codec.php b/src/Server/Wire/Rev2026Codec.php index d3b21eff..2003262c 100644 --- a/src/Server/Wire/Rev2026Codec.php +++ b/src/Server/Wire/Rev2026Codec.php @@ -14,7 +14,7 @@ use Mcp\Schema\Enum\CacheScope; use Mcp\Schema\Enum\ResultType; use Mcp\Schema\Implementation; -use Mcp\Server\Stateless\RequestMeta; +use Mcp\Schema\RequestMeta; /** * The wire codec for 2026-07-28: stamps `resultType`, then the SEP-2549 caching diff --git a/tests/Conformance/client.php b/tests/Conformance/client.php index 9832f47d..c6820e00 100644 --- a/tests/Conformance/client.php +++ b/tests/Conformance/client.php @@ -11,7 +11,7 @@ require_once dirname(__DIR__, 2).'/vendor/autoload.php'; -use Mcp\Client; +use Mcp\Client\Client; use Mcp\Client\Handler\Request\RequestHandlerInterface; use Mcp\Client\Transport\HttpTransport; use Mcp\Schema\ClientCapabilities; diff --git a/tests/Conformance/server.php b/tests/Conformance/server.php index b233d49b..f1556e51 100644 --- a/tests/Conformance/server.php +++ b/tests/Conformance/server.php @@ -26,8 +26,6 @@ use Http\Discovery\Psr17Factory; use Laminas\HttpHandlerRunner\Emitter\SapiEmitter; -use Mcp\Capability\Registry; -use Mcp\Exception\MissingRequiredClientCapabilityException; use Mcp\Schema\ClientCapabilities; use Mcp\Schema\Content\AudioContent; use Mcp\Schema\Content\EmbeddedResource; @@ -41,7 +39,9 @@ use Mcp\Schema\Result\CallToolResult; use Mcp\Schema\Result\InputRequiredResult; use Mcp\Schema\Tool; -use Mcp\Server; +use Mcp\Server\Capability\Registry; +use Mcp\Server\Exception\MissingRequiredClientCapabilityException; +use Mcp\Server\Server; use Mcp\Server\Session\FileSessionStore; use Mcp\Server\Subscription\Psr16NotificationBus; use Mcp\Server\Subscription\PublishingEventDispatcher; diff --git a/tests/Inspector/Http/snapshots/HttpSchemaShowcaseTest-tools_call-aggregate_samples.json b/tests/Inspector/Http/snapshots/HttpSchemaShowcaseTest-tools_call-aggregate_samples.json new file mode 100644 index 00000000..69a2dd59 --- /dev/null +++ b/tests/Inspector/Http/snapshots/HttpSchemaShowcaseTest-tools_call-aggregate_samples.json @@ -0,0 +1,18 @@ +{ + "content": [ + { + "type": "text", + "text": "{\n \"label\": \"latency\",\n \"count\": 3,\n \"sum\": 6.75,\n \"average\": 2.25,\n \"min\": 1.5,\n \"max\": 3.25\n}" + } + ], + "structuredContent": { + "label": "latency", + "count": 3, + "sum": 6.75, + "average": 2.25, + "min": 1.5, + "max": 3.25 + }, + "isError": false +} + diff --git a/tests/Inspector/Http/snapshots/HttpSchemaShowcaseTest-tools_call-aggregate_samples_empty.json b/tests/Inspector/Http/snapshots/HttpSchemaShowcaseTest-tools_call-aggregate_samples_empty.json new file mode 100644 index 00000000..314c1533 --- /dev/null +++ b/tests/Inspector/Http/snapshots/HttpSchemaShowcaseTest-tools_call-aggregate_samples_empty.json @@ -0,0 +1,15 @@ +{ + "content": [ + { + "type": "text", + "text": "{\n \"label\": \"latency\",\n \"count\": 0,\n \"note\": \"No samples provided - a variadic parameter is always optional.\"\n}" + } + ], + "structuredContent": { + "label": "latency", + "count": 0, + "note": "No samples provided - a variadic parameter is always optional." + }, + "isError": false +} + diff --git a/tests/Integration/DualEraExampleTestCase.php b/tests/Integration/DualEraExampleTestCase.php index b7671b86..41d1ae6c 100644 --- a/tests/Integration/DualEraExampleTestCase.php +++ b/tests/Integration/DualEraExampleTestCase.php @@ -11,7 +11,7 @@ namespace Mcp\Tests\Integration; -use Mcp\Client; +use Mcp\Client\Client; use Mcp\Client\Handler\Request\RequestHandlerInterface; use Mcp\Client\Transport\HttpTransport; use Mcp\Schema\ClientCapabilities; diff --git a/tests/Integration/Fixture/elicitation.php b/tests/Integration/Fixture/elicitation.php index ad588a94..411683b8 100644 --- a/tests/Integration/Fixture/elicitation.php +++ b/tests/Integration/Fixture/elicitation.php @@ -13,11 +13,11 @@ * Server for {@see \Mcp\Tests\Integration\ElicitationTest}. */ -use Mcp\Exception\ClientException; use Mcp\Schema\Elicitation\ElicitationSchema; use Mcp\Schema\Elicitation\StringSchemaDefinition; -use Mcp\Server; +use Mcp\Server\Exception\ClientException; use Mcp\Server\RequestContext; +use Mcp\Server\Server; use Mcp\Server\Transport\StdioTransport; require_once dirname(__DIR__, 3).'/vendor/autoload.php'; diff --git a/tests/Integration/Fixture/handshake.php b/tests/Integration/Fixture/handshake.php index 776f4513..d243765c 100644 --- a/tests/Integration/Fixture/handshake.php +++ b/tests/Integration/Fixture/handshake.php @@ -16,7 +16,7 @@ */ use Mcp\Schema\Enum\ProtocolVersion; -use Mcp\Server; +use Mcp\Server\Server; use Mcp\Server\Transport\StdioTransport; require_once dirname(__DIR__, 3).'/vendor/autoload.php'; diff --git a/tests/Integration/Fixture/notification.php b/tests/Integration/Fixture/notification.php index 166e84c6..c2c5c503 100644 --- a/tests/Integration/Fixture/notification.php +++ b/tests/Integration/Fixture/notification.php @@ -14,8 +14,8 @@ */ use Mcp\Schema\Enum\LoggingLevel; -use Mcp\Server; use Mcp\Server\RequestContext; +use Mcp\Server\Server; use Mcp\Server\Transport\StdioTransport; require_once dirname(__DIR__, 3).'/vendor/autoload.php'; diff --git a/tests/Integration/Fixture/request_timeout.php b/tests/Integration/Fixture/request_timeout.php index fb3697c6..55fe6c11 100644 --- a/tests/Integration/Fixture/request_timeout.php +++ b/tests/Integration/Fixture/request_timeout.php @@ -17,7 +17,7 @@ * given up on once. */ -use Mcp\Server; +use Mcp\Server\Server; use Mcp\Server\Transport\StdioTransport; require_once dirname(__DIR__, 3).'/vendor/autoload.php'; diff --git a/tests/Integration/Fixture/retry.php b/tests/Integration/Fixture/retry.php index 9bd25ee3..83f195ef 100644 --- a/tests/Integration/Fixture/retry.php +++ b/tests/Integration/Fixture/retry.php @@ -17,7 +17,7 @@ * actually started. */ -use Mcp\Server; +use Mcp\Server\Server; use Mcp\Server\Transport\StdioTransport; require_once dirname(__DIR__, 3).'/vendor/autoload.php'; diff --git a/tests/Integration/Fixture/roots.php b/tests/Integration/Fixture/roots.php index a4b63824..e3303eff 100644 --- a/tests/Integration/Fixture/roots.php +++ b/tests/Integration/Fixture/roots.php @@ -13,8 +13,8 @@ * Server for {@see \Mcp\Tests\Integration\RootsTest}. */ -use Mcp\Server; use Mcp\Server\RequestContext; +use Mcp\Server\Server; use Mcp\Server\Transport\StdioTransport; require_once dirname(__DIR__, 3).'/vendor/autoload.php'; diff --git a/tests/Integration/Fixture/sampling.php b/tests/Integration/Fixture/sampling.php index 5ea62c8a..bdb3536d 100644 --- a/tests/Integration/Fixture/sampling.php +++ b/tests/Integration/Fixture/sampling.php @@ -13,11 +13,11 @@ * Server for {@see \Mcp\Tests\Integration\SamplingTest}. */ -use Mcp\Exception\ClientException; use Mcp\Schema\Content\TextContent; -use Mcp\Server; use Mcp\Server\ClientGateway; +use Mcp\Server\Exception\ClientException; use Mcp\Server\RequestContext; +use Mcp\Server\Server; use Mcp\Server\Transport\StdioTransport; require_once dirname(__DIR__, 3).'/vendor/autoload.php'; diff --git a/tests/Integration/Fixture/sampling_tools.php b/tests/Integration/Fixture/sampling_tools.php index 94cd5612..102a07e0 100644 --- a/tests/Integration/Fixture/sampling_tools.php +++ b/tests/Integration/Fixture/sampling_tools.php @@ -19,8 +19,8 @@ use Mcp\Schema\Content\ToolUseContent; use Mcp\Schema\Enum\Role; use Mcp\Schema\Tool; -use Mcp\Server; use Mcp\Server\RequestContext; +use Mcp\Server\Server; use Mcp\Server\Transport\StdioTransport; require_once dirname(__DIR__, 3).'/vendor/autoload.php'; diff --git a/tests/Integration/IntegrationTestCase.php b/tests/Integration/IntegrationTestCase.php index 4ad33d42..47bd5e8d 100644 --- a/tests/Integration/IntegrationTestCase.php +++ b/tests/Integration/IntegrationTestCase.php @@ -11,10 +11,10 @@ namespace Mcp\Tests\Integration; -use Mcp\Client; use Mcp\Client\Builder as ClientBuilder; +use Mcp\Client\Client; +use Mcp\Client\Exception\ConnectionException; use Mcp\Client\Transport\StdioTransport; -use Mcp\Exception\ConnectionException; use PHPUnit\Framework\TestCase; /** diff --git a/tests/Integration/RequestTimeoutTest.php b/tests/Integration/RequestTimeoutTest.php index fa3ef4c4..9cbeecd3 100644 --- a/tests/Integration/RequestTimeoutTest.php +++ b/tests/Integration/RequestTimeoutTest.php @@ -11,7 +11,7 @@ namespace Mcp\Tests\Integration; -use Mcp\Exception\RequestException; +use Mcp\Client\Exception\RequestException; use PHPUnit\Framework\Attributes\TestDox; /** diff --git a/tests/Integration/RetryTest.php b/tests/Integration/RetryTest.php index 7fc974c7..d8bb70c8 100644 --- a/tests/Integration/RetryTest.php +++ b/tests/Integration/RetryTest.php @@ -11,7 +11,7 @@ namespace Mcp\Tests\Integration; -use Mcp\Exception\ConnectionException; +use Mcp\Client\Exception\ConnectionException; use PHPUnit\Framework\Attributes\TestDox; /** diff --git a/tests/Integration/StatelessClientTest.php b/tests/Integration/StatelessClientTest.php index fbd3d59e..98174ed5 100644 --- a/tests/Integration/StatelessClientTest.php +++ b/tests/Integration/StatelessClientTest.php @@ -11,7 +11,7 @@ namespace Mcp\Tests\Integration; -use Mcp\Client; +use Mcp\Client\Client; use Mcp\Client\Handler\Request\RequestHandlerInterface; use Mcp\Client\Transport\HttpTransport; use Mcp\Schema\ClientCapabilities; diff --git a/tests/Unit/Client/BuilderTest.php b/tests/Unit/Client/BuilderTest.php index b462b9bb..682e6a58 100644 --- a/tests/Unit/Client/BuilderTest.php +++ b/tests/Unit/Client/BuilderTest.php @@ -11,9 +11,9 @@ namespace Mcp\Tests\Unit\Client; -use Mcp\Client; +use Mcp\Client\Client; use Mcp\Client\Configuration; -use Mcp\Exception\LogicException; +use Mcp\Client\Exception\LogicException; use Mcp\Schema\ClientCapabilities; use Mcp\Schema\Extension\Apps\McpApps; use PHPUnit\Framework\Attributes\TestDox; diff --git a/tests/Unit/Client/ClientTest.php b/tests/Unit/Client/ClientTest.php index 29d23ffe..76663ca9 100644 --- a/tests/Unit/Client/ClientTest.php +++ b/tests/Unit/Client/ClientTest.php @@ -11,16 +11,143 @@ namespace Mcp\Tests\Unit\Client; -use Mcp\Client; +use Mcp\Client\Builder; +use Mcp\Client\Client; +use Mcp\Client\Exception\ConnectionException; +use Mcp\Client\Exception\InvalidArgumentException; +use Mcp\Client\Exception\RuntimeException; use Mcp\Client\State\ClientStateInterface; +use Mcp\Client\Transport\BaseTransport; use Mcp\Client\Transport\TransportInterface; -use Mcp\Exception\ConnectionException; -use Mcp\Exception\RuntimeException; use Mcp\Schema\ClientCapabilities; +use Mcp\Schema\Enum\ProtocolVersion; +use Mcp\Schema\JsonRpc\Error; +use Mcp\Schema\JsonRpc\Response; +use PHPUnit\Framework\Attributes\TestDox; use PHPUnit\Framework\TestCase; final class ClientTest extends TestCase { + #[TestDox('builder() returns a Builder instance')] + public function testBuilderReturnsBuilderInstance(): void + { + $this->assertInstanceOf(Builder::class, Client::builder()); + } + + #[TestDox('connect() succeeds on the first attempt without retrying')] + public function testConnectSucceedsWithoutRetrying(): void + { + $transport = new FakeTransport([FakeTransport::ACCEPT]); + + $client = Client::builder()->build(); + $client->connect($transport); + + $this->assertSame(1, $transport->connectCalls); + $this->assertSame(0, $transport->closeCalls); + $this->assertTrue($client->isConnected()); + } + + #[TestDox('connect() retries a failed attempt and succeeds on a later one')] + public function testConnectRetriesUntilItSucceeds(): void + { + $transport = new FakeTransport([FakeTransport::REJECT, FakeTransport::REJECT, FakeTransport::ACCEPT]); + + $client = Client::builder()->setMaxRetries(3)->build(); + $client->connect($transport); + + $this->assertSame(3, $transport->connectCalls); + $this->assertTrue($client->isConnected()); + $this->assertSame('Test Server', $client->getServerInfo()?->name); + } + + #[TestDox('connect() closes the transport between two attempts')] + public function testConnectClosesTransportBetweenAttempts(): void + { + $transport = new FakeTransport([FakeTransport::REJECT, FakeTransport::ACCEPT]); + + $client = Client::builder()->setMaxRetries(1)->build(); + $client->connect($transport); + + $this->assertSame(2, $transport->connectCalls); + $this->assertSame(1, $transport->closeCalls, 'the failed attempt must be cleaned up before the retry'); + } + + #[TestDox('connect() rethrows once the retries are exhausted')] + public function testConnectThrowsWhenRetriesAreExhausted(): void + { + $transport = new FakeTransport([FakeTransport::REJECT, FakeTransport::REJECT, FakeTransport::REJECT]); + + $client = Client::builder()->setMaxRetries(2)->build(); + + try { + $client->connect($transport); + $this->fail(\sprintf('Expected a "%s" to be thrown.', ConnectionException::class)); + } catch (ConnectionException) { + // Expected. + } + + $this->assertSame(3, $transport->connectCalls, 'one initial attempt plus two retries'); + $this->assertSame(3, $transport->closeCalls, 'the last attempt must be cleaned up as well'); + $this->assertFalse($client->isConnected()); + } + + #[TestDox('setMaxRetries(0) disables retrying')] + public function testZeroRetriesAttemptsToConnectOnce(): void + { + $transport = new FakeTransport([FakeTransport::REJECT, FakeTransport::ACCEPT]); + + $client = Client::builder()->setMaxRetries(0)->build(); + + $this->expectException(ConnectionException::class); + + try { + $client->connect($transport); + } finally { + $this->assertSame(1, $transport->connectCalls); + } + } + + #[TestDox('a negative retry count is rejected')] + public function testNegativeRetryCountIsRejected(): void + { + $builder = Client::builder()->setMaxRetries(-1); + + $this->expectException(InvalidArgumentException::class); + $this->expectExceptionMessage('The maximum number of retries must be zero or greater, got -1.'); + + $builder->build(); + } + + #[TestDox('a connection breaking after the handshake result does not leave the client connected')] + public function testFailureAfterHandshakeResultDoesNotLeaveClientConnected(): void + { + $transport = new FakeTransport([FakeTransport::BREAK_AFTER_ACCEPT]); + + $client = Client::builder()->setMaxRetries(0)->build(); + + try { + $client->connect($transport); + $this->fail(\sprintf('Expected a "%s" to be thrown.', ConnectionException::class)); + } catch (ConnectionException) { + // Expected. + } + + $this->assertFalse($client->isConnected()); + } + + #[TestDox('a timed out attempt does not leave state behind that fails the retry')] + public function testTimedOutAttemptDoesNotPoisonTheRetry(): void + { + // The shortest allowed init timeout, so this waits out about a second. + $transport = new FakeTransport([FakeTransport::IGNORE, FakeTransport::ACCEPT]); + + $client = Client::builder()->setInitTimeout(1)->setMaxRetries(1)->build(); + $client->connect($transport); + + $this->assertSame(2, $transport->connectCalls); + $this->assertTrue($client->isConnected()); + } + public function testSendRootsListChangedSendsNotificationWhenCapabilityDeclared(): void { $sent = []; @@ -77,3 +204,139 @@ public function testSendRootsListChangedThrowsWhenNotConnected(): void $client->sendRootsListChanged(); } } + +/** + * Transport whose connection attempts succeed or fail on command. + * + * Requests are answered from the polling loop rather than from send(), the way + * a stdio transport does, with each connect() call answering according to the + * next configured outcome. + * + * @phpstan-import-type McpFiber from TransportInterface + */ +final class FakeTransport extends BaseTransport +{ + /** The initialize request is answered with a result. */ + public const ACCEPT = 'accept'; + + /** The initialize request is answered with a JSON-RPC error. */ + public const REJECT = 'reject'; + + /** The initialize request is not answered at all and has to time out. */ + public const IGNORE = 'ignore'; + + /** The initialize request is answered, but the connection breaks right after. */ + public const BREAK_AFTER_ACCEPT = 'break_after_accept'; + + public int $connectCalls = 0; + public int $closeCalls = 0; + + private string $outcome = self::ACCEPT; + + /** @var list Answers not yet delivered to the client */ + private array $outbox = []; + + /** + * @param list $attempts How each successive connect() call behaves + */ + public function __construct(private array $attempts = [self::ACCEPT]) + { + parent::__construct(); + } + + public function connect(): void + { + ++$this->connectCalls; + $this->outcome = array_shift($this->attempts) ?? self::ACCEPT; + + $result = $this->runRequest(new \Fiber(fn () => $this->handleInitialize())); + + if ($result instanceof Error) { + throw new ConnectionException('Initialization failed: '.$result->message); + } + } + + public function send(string $data): void + { + if (self::IGNORE === $this->outcome) { + return; + } + + $message = json_decode($data, true, 512, \JSON_THROW_ON_ERROR); + + if (!isset($message['id'])) { + if (self::BREAK_AFTER_ACCEPT === $this->outcome) { + throw new ConnectionException('Connection lost'); + } + + return; // A notification, nothing to answer. + } + + $answer = self::REJECT === $this->outcome + ? ['error' => ['code' => Error::INTERNAL_ERROR, 'message' => 'Server unavailable']] + : ['result' => [ + 'protocolVersion' => ProtocolVersion::V2025_11_25->value, + 'capabilities' => [], + 'serverInfo' => ['name' => 'Test Server', 'version' => '1.0.0'], + ]]; + + $this->outbox[] = json_encode(['jsonrpc' => '2.0', 'id' => $message['id']] + $answer, \JSON_THROW_ON_ERROR); + } + + public function runRequest(\Fiber $fiber, ?callable $onProgress = null): Response|Error + { + $fiber->start(); + + // Polls at the same 1ms interval as the real transports, so a request + // left unanswered runs into its timeout in real time. + for ($poll = 0; !$fiber->isTerminated(); ++$poll) { + if ($poll > 5000) { + throw new \LogicException('The fiber never terminated, no pending request became resolvable.'); + } + + foreach ($this->outbox as $answer) { + $this->handleMessage($answer); + } + $this->outbox = []; + + $this->resumeFiber($fiber); + + usleep(1000); + } + + return $fiber->getReturn(); + } + + public function close(): void + { + ++$this->closeCalls; + + $this->handleClose('Transport closed'); + } + + /** + * @param McpFiber $fiber + */ + private function resumeFiber(\Fiber $fiber): void + { + if (!$fiber->isSuspended() || null === $this->state) { + return; + } + + foreach ($this->state->getPendingRequests() as $pending) { + $response = $this->state->consumeResponse($pending['request_id']); + + if (null !== $response) { + $fiber->resume($response); + + return; + } + + if (time() - $pending['timestamp'] >= $pending['timeout']) { + $fiber->resume(Error::forInternalError('Request timed out', $pending['request_id'])); + + return; + } + } + } +} diff --git a/tests/Unit/Client/ConfigurationTest.php b/tests/Unit/Client/ConfigurationTest.php index ae50a499..f63d72a6 100644 --- a/tests/Unit/Client/ConfigurationTest.php +++ b/tests/Unit/Client/ConfigurationTest.php @@ -11,9 +11,9 @@ namespace Mcp\Tests\Unit\Client; -use Mcp\Client; +use Mcp\Client\Client; use Mcp\Client\Configuration; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Client\Exception\InvalidArgumentException; use Mcp\Schema\ClientCapabilities; use Mcp\Schema\Implementation; use PHPUnit\Framework\Attributes\DataProvider; diff --git a/tests/Unit/Client/Handler/Request/ElicitationRequestHandlerTest.php b/tests/Unit/Client/Handler/Request/ElicitationRequestHandlerTest.php index 67358717..03843280 100644 --- a/tests/Unit/Client/Handler/Request/ElicitationRequestHandlerTest.php +++ b/tests/Unit/Client/Handler/Request/ElicitationRequestHandlerTest.php @@ -11,9 +11,9 @@ namespace Mcp\Tests\Unit\Client\Handler\Request; +use Mcp\Client\Exception\ElicitationException; use Mcp\Client\Handler\Request\ElicitationCallbackInterface; use Mcp\Client\Handler\Request\ElicitationRequestHandler; -use Mcp\Exception\ElicitationException; use Mcp\Schema\Enum\ElicitAction; use Mcp\Schema\JsonRpc\Error; use Mcp\Schema\JsonRpc\Response; diff --git a/tests/Unit/Client/Handler/Request/ListRootsRequestHandlerTest.php b/tests/Unit/Client/Handler/Request/ListRootsRequestHandlerTest.php index c101b168..9bac2e61 100644 --- a/tests/Unit/Client/Handler/Request/ListRootsRequestHandlerTest.php +++ b/tests/Unit/Client/Handler/Request/ListRootsRequestHandlerTest.php @@ -11,9 +11,9 @@ namespace Mcp\Tests\Unit\Client\Handler\Request; +use Mcp\Client\Exception\RootsException; use Mcp\Client\Handler\Request\ListRootsRequestHandler; use Mcp\Client\Handler\Request\RootsCallbackInterface; -use Mcp\Exception\RootsException; use Mcp\Schema\JsonRpc\Error; use Mcp\Schema\JsonRpc\Response; use Mcp\Schema\Request\ListRootsRequest; diff --git a/tests/Unit/Client/ProtocolTest.php b/tests/Unit/Client/ProtocolTest.php index ee421258..4741c391 100644 --- a/tests/Unit/Client/ProtocolTest.php +++ b/tests/Unit/Client/ProtocolTest.php @@ -12,11 +12,11 @@ namespace Mcp\Tests\Unit\Client; use Mcp\Client\Configuration; +use Mcp\Client\Exception\ConnectionException; +use Mcp\Client\Exception\LogicException; use Mcp\Client\Protocol; use Mcp\Client\State\ClientStateInterface; use Mcp\Client\Transport\TransportInterface; -use Mcp\Exception\ConnectionException; -use Mcp\Exception\LogicException; use Mcp\Schema\ClientCapabilities; use Mcp\Schema\Enum\ProtocolVersion; use Mcp\Schema\Implementation; @@ -24,7 +24,7 @@ use Mcp\Schema\JsonRpc\MessageInterface; use Mcp\Schema\JsonRpc\Response; use Mcp\Schema\Request\PingRequest; -use Mcp\Server\Stateless\RequestMeta; +use Mcp\Schema\RequestMeta; use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\Attributes\TestDox; use PHPUnit\Framework\TestCase; diff --git a/tests/Unit/Client/Stateless/InputRequestResolverTest.php b/tests/Unit/Client/Stateless/InputRequestResolverTest.php index 536aa312..7329b66f 100644 --- a/tests/Unit/Client/Stateless/InputRequestResolverTest.php +++ b/tests/Unit/Client/Stateless/InputRequestResolverTest.php @@ -11,9 +11,9 @@ namespace Mcp\Tests\Unit\Client\Stateless; +use Mcp\Client\Exception\RuntimeException; use Mcp\Client\Handler\Request\RequestHandlerInterface; use Mcp\Client\Stateless\InputRequestResolver; -use Mcp\Exception\RuntimeException; use Mcp\Schema\Enum\ElicitAction; use Mcp\Schema\JsonRpc\Request; use Mcp\Schema\JsonRpc\Response; diff --git a/tests/Unit/Client/Transport/HttpTransportTest.php b/tests/Unit/Client/Transport/HttpTransportTest.php index 6c6119e1..421cb3ed 100644 --- a/tests/Unit/Client/Transport/HttpTransportTest.php +++ b/tests/Unit/Client/Transport/HttpTransportTest.php @@ -11,10 +11,10 @@ namespace Mcp\Tests\Unit\Client\Transport; -use Mcp\Client; +use Mcp\Client\Client; +use Mcp\Client\Exception\InvalidArgumentException; use Mcp\Client\State\ClientState; use Mcp\Client\Transport\HttpTransport; -use Mcp\Exception\InvalidArgumentException; use Mcp\Schema\JsonRpc\Error; use Nyholm\Psr7\Factory\Psr17Factory; use Nyholm\Psr7\Response; diff --git a/tests/Unit/Client/Transport/StdioTransportTest.php b/tests/Unit/Client/Transport/StdioTransportTest.php index fb314083..3781fc63 100644 --- a/tests/Unit/Client/Transport/StdioTransportTest.php +++ b/tests/Unit/Client/Transport/StdioTransportTest.php @@ -11,9 +11,9 @@ namespace Mcp\Tests\Unit\Client\Transport; +use Mcp\Client\Exception\InvalidArgumentException; use Mcp\Client\State\ClientState; use Mcp\Client\Transport\StdioTransport; -use Mcp\Exception\InvalidArgumentException; use Mcp\Schema\JsonRpc\Error; use PHPUnit\Framework\Attributes\TestDox; use PHPUnit\Framework\TestCase; diff --git a/tests/Unit/ClientTest.php b/tests/Unit/ClientTest.php deleted file mode 100644 index 558de954..00000000 --- a/tests/Unit/ClientTest.php +++ /dev/null @@ -1,283 +0,0 @@ -assertInstanceOf(Builder::class, Client::builder()); - } - - #[TestDox('connect() succeeds on the first attempt without retrying')] - public function testConnectSucceedsWithoutRetrying(): void - { - $transport = new FakeTransport([FakeTransport::ACCEPT]); - - $client = Client::builder()->build(); - $client->connect($transport); - - $this->assertSame(1, $transport->connectCalls); - $this->assertSame(0, $transport->closeCalls); - $this->assertTrue($client->isConnected()); - } - - #[TestDox('connect() retries a failed attempt and succeeds on a later one')] - public function testConnectRetriesUntilItSucceeds(): void - { - $transport = new FakeTransport([FakeTransport::REJECT, FakeTransport::REJECT, FakeTransport::ACCEPT]); - - $client = Client::builder()->setMaxRetries(3)->build(); - $client->connect($transport); - - $this->assertSame(3, $transport->connectCalls); - $this->assertTrue($client->isConnected()); - $this->assertSame('Test Server', $client->getServerInfo()?->name); - } - - #[TestDox('connect() closes the transport between two attempts')] - public function testConnectClosesTransportBetweenAttempts(): void - { - $transport = new FakeTransport([FakeTransport::REJECT, FakeTransport::ACCEPT]); - - $client = Client::builder()->setMaxRetries(1)->build(); - $client->connect($transport); - - $this->assertSame(2, $transport->connectCalls); - $this->assertSame(1, $transport->closeCalls, 'the failed attempt must be cleaned up before the retry'); - } - - #[TestDox('connect() rethrows once the retries are exhausted')] - public function testConnectThrowsWhenRetriesAreExhausted(): void - { - $transport = new FakeTransport([FakeTransport::REJECT, FakeTransport::REJECT, FakeTransport::REJECT]); - - $client = Client::builder()->setMaxRetries(2)->build(); - - try { - $client->connect($transport); - $this->fail(\sprintf('Expected a "%s" to be thrown.', ConnectionException::class)); - } catch (ConnectionException) { - // Expected. - } - - $this->assertSame(3, $transport->connectCalls, 'one initial attempt plus two retries'); - $this->assertSame(3, $transport->closeCalls, 'the last attempt must be cleaned up as well'); - $this->assertFalse($client->isConnected()); - } - - #[TestDox('setMaxRetries(0) disables retrying')] - public function testZeroRetriesAttemptsToConnectOnce(): void - { - $transport = new FakeTransport([FakeTransport::REJECT, FakeTransport::ACCEPT]); - - $client = Client::builder()->setMaxRetries(0)->build(); - - $this->expectException(ConnectionException::class); - - try { - $client->connect($transport); - } finally { - $this->assertSame(1, $transport->connectCalls); - } - } - - #[TestDox('a negative retry count is rejected')] - public function testNegativeRetryCountIsRejected(): void - { - $builder = Client::builder()->setMaxRetries(-1); - - $this->expectException(InvalidArgumentException::class); - $this->expectExceptionMessage('The maximum number of retries must be zero or greater, got -1.'); - - $builder->build(); - } - - #[TestDox('a connection breaking after the handshake result does not leave the client connected')] - public function testFailureAfterHandshakeResultDoesNotLeaveClientConnected(): void - { - $transport = new FakeTransport([FakeTransport::BREAK_AFTER_ACCEPT]); - - $client = Client::builder()->setMaxRetries(0)->build(); - - try { - $client->connect($transport); - $this->fail(\sprintf('Expected a "%s" to be thrown.', ConnectionException::class)); - } catch (ConnectionException) { - // Expected. - } - - $this->assertFalse($client->isConnected()); - } - - #[TestDox('a timed out attempt does not leave state behind that fails the retry')] - public function testTimedOutAttemptDoesNotPoisonTheRetry(): void - { - // The shortest allowed init timeout, so this waits out about a second. - $transport = new FakeTransport([FakeTransport::IGNORE, FakeTransport::ACCEPT]); - - $client = Client::builder()->setInitTimeout(1)->setMaxRetries(1)->build(); - $client->connect($transport); - - $this->assertSame(2, $transport->connectCalls); - $this->assertTrue($client->isConnected()); - } -} - -/** - * Transport whose connection attempts succeed or fail on command. - * - * Requests are answered from the polling loop rather than from send(), the way - * a stdio transport does, with each connect() call answering according to the - * next configured outcome. - * - * @phpstan-import-type McpFiber from TransportInterface - */ -final class FakeTransport extends BaseTransport -{ - /** The initialize request is answered with a result. */ - public const ACCEPT = 'accept'; - - /** The initialize request is answered with a JSON-RPC error. */ - public const REJECT = 'reject'; - - /** The initialize request is not answered at all and has to time out. */ - public const IGNORE = 'ignore'; - - /** The initialize request is answered, but the connection breaks right after. */ - public const BREAK_AFTER_ACCEPT = 'break_after_accept'; - - public int $connectCalls = 0; - public int $closeCalls = 0; - - private string $outcome = self::ACCEPT; - - /** @var list Answers not yet delivered to the client */ - private array $outbox = []; - - /** - * @param list $attempts How each successive connect() call behaves - */ - public function __construct(private array $attempts = [self::ACCEPT]) - { - parent::__construct(); - } - - public function connect(): void - { - ++$this->connectCalls; - $this->outcome = array_shift($this->attempts) ?? self::ACCEPT; - - $result = $this->runRequest(new \Fiber(fn () => $this->handleInitialize())); - - if ($result instanceof Error) { - throw new ConnectionException('Initialization failed: '.$result->message); - } - } - - public function send(string $data): void - { - if (self::IGNORE === $this->outcome) { - return; - } - - $message = json_decode($data, true, 512, \JSON_THROW_ON_ERROR); - - if (!isset($message['id'])) { - if (self::BREAK_AFTER_ACCEPT === $this->outcome) { - throw new ConnectionException('Connection lost'); - } - - return; // A notification, nothing to answer. - } - - $answer = self::REJECT === $this->outcome - ? ['error' => ['code' => Error::INTERNAL_ERROR, 'message' => 'Server unavailable']] - : ['result' => [ - 'protocolVersion' => ProtocolVersion::V2025_11_25->value, - 'capabilities' => [], - 'serverInfo' => ['name' => 'Test Server', 'version' => '1.0.0'], - ]]; - - $this->outbox[] = json_encode(['jsonrpc' => '2.0', 'id' => $message['id']] + $answer, \JSON_THROW_ON_ERROR); - } - - public function runRequest(\Fiber $fiber, ?callable $onProgress = null): Response|Error - { - $fiber->start(); - - // Polls at the same 1ms interval as the real transports, so a request - // left unanswered runs into its timeout in real time. - for ($poll = 0; !$fiber->isTerminated(); ++$poll) { - if ($poll > 5000) { - throw new \LogicException('The fiber never terminated, no pending request became resolvable.'); - } - - foreach ($this->outbox as $answer) { - $this->handleMessage($answer); - } - $this->outbox = []; - - $this->resumeFiber($fiber); - - usleep(1000); - } - - return $fiber->getReturn(); - } - - public function close(): void - { - ++$this->closeCalls; - - $this->handleClose('Transport closed'); - } - - /** - * @param McpFiber $fiber - */ - private function resumeFiber(\Fiber $fiber): void - { - if (!$fiber->isSuspended() || null === $this->state) { - return; - } - - foreach ($this->state->getPendingRequests() as $pending) { - $response = $this->state->consumeResponse($pending['request_id']); - - if (null !== $response) { - $fiber->resume($response); - - return; - } - - if (time() - $pending['timestamp'] >= $pending['timeout']) { - $fiber->resume(Error::forInternalError('Request timed out', $pending['request_id'])); - - return; - } - } - } -} diff --git a/tests/Unit/Schema/Content/PromptMessageTest.php b/tests/Unit/Schema/Content/PromptMessageTest.php index 8808d412..aba86f9c 100644 --- a/tests/Unit/Schema/Content/PromptMessageTest.php +++ b/tests/Unit/Schema/Content/PromptMessageTest.php @@ -11,10 +11,10 @@ namespace Mcp\Tests\Unit\Schema\Content; -use Mcp\Exception\InvalidArgumentException; use Mcp\Schema\Content\PromptMessage; use Mcp\Schema\Content\ResourceLink; use Mcp\Schema\Enum\Role; +use Mcp\Schema\Exception\InvalidArgumentException; use PHPUnit\Framework\TestCase; final class PromptMessageTest extends TestCase diff --git a/tests/Unit/Schema/Content/ResourceLinkTest.php b/tests/Unit/Schema/Content/ResourceLinkTest.php index ca064558..8301b459 100644 --- a/tests/Unit/Schema/Content/ResourceLinkTest.php +++ b/tests/Unit/Schema/Content/ResourceLinkTest.php @@ -11,10 +11,10 @@ namespace Mcp\Tests\Unit\Schema\Content; -use Mcp\Exception\InvalidArgumentException; use Mcp\Schema\Annotations; use Mcp\Schema\Content\ResourceLink; use Mcp\Schema\Enum\Role; +use Mcp\Schema\Exception\InvalidArgumentException; use Mcp\Schema\Icon; use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\TestCase; diff --git a/tests/Unit/Schema/Content/SamplingMessageTest.php b/tests/Unit/Schema/Content/SamplingMessageTest.php index c464575b..2f5d35f5 100644 --- a/tests/Unit/Schema/Content/SamplingMessageTest.php +++ b/tests/Unit/Schema/Content/SamplingMessageTest.php @@ -11,12 +11,12 @@ namespace Mcp\Tests\Unit\Schema\Content; -use Mcp\Exception\InvalidArgumentException; use Mcp\Schema\Content\SamplingMessage; use Mcp\Schema\Content\TextContent; use Mcp\Schema\Content\ToolResultContent; use Mcp\Schema\Content\ToolUseContent; use Mcp\Schema\Enum\Role; +use Mcp\Schema\Exception\InvalidArgumentException; use PHPUnit\Framework\TestCase; final class SamplingMessageTest extends TestCase diff --git a/tests/Unit/Schema/Content/ToolResultContentTest.php b/tests/Unit/Schema/Content/ToolResultContentTest.php index 3c45f664..33ea903d 100644 --- a/tests/Unit/Schema/Content/ToolResultContentTest.php +++ b/tests/Unit/Schema/Content/ToolResultContentTest.php @@ -11,13 +11,13 @@ namespace Mcp\Tests\Unit\Schema\Content; -use Mcp\Exception\InvalidArgumentException; use Mcp\Schema\Content\EmbeddedResource; use Mcp\Schema\Content\ResourceLink; use Mcp\Schema\Content\SamplingMessage; use Mcp\Schema\Content\TextContent; use Mcp\Schema\Content\ToolResultContent; use Mcp\Schema\Enum\Role; +use Mcp\Schema\Exception\InvalidArgumentException; use PHPUnit\Framework\TestCase; final class ToolResultContentTest extends TestCase diff --git a/tests/Unit/Schema/Content/ToolUseContentTest.php b/tests/Unit/Schema/Content/ToolUseContentTest.php index 686481ba..2a97911d 100644 --- a/tests/Unit/Schema/Content/ToolUseContentTest.php +++ b/tests/Unit/Schema/Content/ToolUseContentTest.php @@ -11,8 +11,8 @@ namespace Mcp\Tests\Unit\Schema\Content; -use Mcp\Exception\InvalidArgumentException; use Mcp\Schema\Content\ToolUseContent; +use Mcp\Schema\Exception\InvalidArgumentException; use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\TestCase; diff --git a/tests/Unit/Schema/Elicitation/BooleanSchemaDefinitionTest.php b/tests/Unit/Schema/Elicitation/BooleanSchemaDefinitionTest.php index a9e11732..0c634ecd 100644 --- a/tests/Unit/Schema/Elicitation/BooleanSchemaDefinitionTest.php +++ b/tests/Unit/Schema/Elicitation/BooleanSchemaDefinitionTest.php @@ -11,8 +11,8 @@ namespace Mcp\Tests\Unit\Schema\Elicitation; -use Mcp\Exception\InvalidArgumentException; use Mcp\Schema\Elicitation\BooleanSchemaDefinition; +use Mcp\Schema\Exception\InvalidArgumentException; use PHPUnit\Framework\TestCase; final class BooleanSchemaDefinitionTest extends TestCase diff --git a/tests/Unit/Schema/Elicitation/ElicitationSchemaTest.php b/tests/Unit/Schema/Elicitation/ElicitationSchemaTest.php index 3117de90..4685be92 100644 --- a/tests/Unit/Schema/Elicitation/ElicitationSchemaTest.php +++ b/tests/Unit/Schema/Elicitation/ElicitationSchemaTest.php @@ -11,7 +11,6 @@ namespace Mcp\Tests\Unit\Schema\Elicitation; -use Mcp\Exception\InvalidArgumentException; use Mcp\Schema\Elicitation\BooleanSchemaDefinition; use Mcp\Schema\Elicitation\ElicitationSchema; use Mcp\Schema\Elicitation\EnumSchemaDefinition; @@ -20,6 +19,7 @@ use Mcp\Schema\Elicitation\StringSchemaDefinition; use Mcp\Schema\Elicitation\TitledEnumSchemaDefinition; use Mcp\Schema\Elicitation\TitledMultiSelectEnumSchemaDefinition; +use Mcp\Schema\Exception\InvalidArgumentException; use PHPUnit\Framework\TestCase; final class ElicitationSchemaTest extends TestCase diff --git a/tests/Unit/Schema/Elicitation/EnumSchemaDefinitionTest.php b/tests/Unit/Schema/Elicitation/EnumSchemaDefinitionTest.php index ea200a86..34373691 100644 --- a/tests/Unit/Schema/Elicitation/EnumSchemaDefinitionTest.php +++ b/tests/Unit/Schema/Elicitation/EnumSchemaDefinitionTest.php @@ -11,8 +11,8 @@ namespace Mcp\Tests\Unit\Schema\Elicitation; -use Mcp\Exception\InvalidArgumentException; use Mcp\Schema\Elicitation\EnumSchemaDefinition; +use Mcp\Schema\Exception\InvalidArgumentException; use PHPUnit\Framework\TestCase; final class EnumSchemaDefinitionTest extends TestCase diff --git a/tests/Unit/Schema/Elicitation/MultiSelectEnumSchemaDefinitionTest.php b/tests/Unit/Schema/Elicitation/MultiSelectEnumSchemaDefinitionTest.php index 208f5d2c..acf63a19 100644 --- a/tests/Unit/Schema/Elicitation/MultiSelectEnumSchemaDefinitionTest.php +++ b/tests/Unit/Schema/Elicitation/MultiSelectEnumSchemaDefinitionTest.php @@ -11,8 +11,8 @@ namespace Mcp\Tests\Unit\Schema\Elicitation; -use Mcp\Exception\InvalidArgumentException; use Mcp\Schema\Elicitation\MultiSelectEnumSchemaDefinition; +use Mcp\Schema\Exception\InvalidArgumentException; use PHPUnit\Framework\TestCase; final class MultiSelectEnumSchemaDefinitionTest extends TestCase diff --git a/tests/Unit/Schema/Elicitation/NumberSchemaDefinitionTest.php b/tests/Unit/Schema/Elicitation/NumberSchemaDefinitionTest.php index ea040382..277c9038 100644 --- a/tests/Unit/Schema/Elicitation/NumberSchemaDefinitionTest.php +++ b/tests/Unit/Schema/Elicitation/NumberSchemaDefinitionTest.php @@ -11,8 +11,8 @@ namespace Mcp\Tests\Unit\Schema\Elicitation; -use Mcp\Exception\InvalidArgumentException; use Mcp\Schema\Elicitation\NumberSchemaDefinition; +use Mcp\Schema\Exception\InvalidArgumentException; use PHPUnit\Framework\TestCase; final class NumberSchemaDefinitionTest extends TestCase diff --git a/tests/Unit/Schema/Elicitation/StringSchemaDefinitionTest.php b/tests/Unit/Schema/Elicitation/StringSchemaDefinitionTest.php index 02998cce..afe5cb34 100644 --- a/tests/Unit/Schema/Elicitation/StringSchemaDefinitionTest.php +++ b/tests/Unit/Schema/Elicitation/StringSchemaDefinitionTest.php @@ -11,8 +11,8 @@ namespace Mcp\Tests\Unit\Schema\Elicitation; -use Mcp\Exception\InvalidArgumentException; use Mcp\Schema\Elicitation\StringSchemaDefinition; +use Mcp\Schema\Exception\InvalidArgumentException; use PHPUnit\Framework\TestCase; final class StringSchemaDefinitionTest extends TestCase diff --git a/tests/Unit/Schema/Elicitation/TitledEnumSchemaDefinitionTest.php b/tests/Unit/Schema/Elicitation/TitledEnumSchemaDefinitionTest.php index 26502832..303be0f7 100644 --- a/tests/Unit/Schema/Elicitation/TitledEnumSchemaDefinitionTest.php +++ b/tests/Unit/Schema/Elicitation/TitledEnumSchemaDefinitionTest.php @@ -11,8 +11,8 @@ namespace Mcp\Tests\Unit\Schema\Elicitation; -use Mcp\Exception\InvalidArgumentException; use Mcp\Schema\Elicitation\TitledEnumSchemaDefinition; +use Mcp\Schema\Exception\InvalidArgumentException; use PHPUnit\Framework\TestCase; final class TitledEnumSchemaDefinitionTest extends TestCase diff --git a/tests/Unit/Schema/Elicitation/TitledMultiSelectEnumSchemaDefinitionTest.php b/tests/Unit/Schema/Elicitation/TitledMultiSelectEnumSchemaDefinitionTest.php index 170893fb..e53a61f9 100644 --- a/tests/Unit/Schema/Elicitation/TitledMultiSelectEnumSchemaDefinitionTest.php +++ b/tests/Unit/Schema/Elicitation/TitledMultiSelectEnumSchemaDefinitionTest.php @@ -11,8 +11,8 @@ namespace Mcp\Tests\Unit\Schema\Elicitation; -use Mcp\Exception\InvalidArgumentException; use Mcp\Schema\Elicitation\TitledMultiSelectEnumSchemaDefinition; +use Mcp\Schema\Exception\InvalidArgumentException; use PHPUnit\Framework\TestCase; final class TitledMultiSelectEnumSchemaDefinitionTest extends TestCase diff --git a/tests/Unit/Schema/ElicitationModeTest.php b/tests/Unit/Schema/ElicitationModeTest.php index 1502e1e0..92aac79b 100644 --- a/tests/Unit/Schema/ElicitationModeTest.php +++ b/tests/Unit/Schema/ElicitationModeTest.php @@ -11,10 +11,10 @@ namespace Mcp\Tests\Unit\Schema; -use Mcp\Exception\InvalidArgumentException; use Mcp\Schema\Elicitation\ElicitationSchema; use Mcp\Schema\Elicitation\StringSchemaDefinition; use Mcp\Schema\Enum\ElicitationMode; +use Mcp\Schema\Exception\InvalidArgumentException; use Mcp\Schema\JsonRpc\MessageInterface; use Mcp\Schema\Request\ElicitRequest; use PHPUnit\Framework\Attributes\TestDox; diff --git a/tests/Unit/Schema/Extension/ExtensionIdentifierTest.php b/tests/Unit/Schema/Extension/ExtensionIdentifierTest.php index 96ff22d2..58ef1c8c 100644 --- a/tests/Unit/Schema/Extension/ExtensionIdentifierTest.php +++ b/tests/Unit/Schema/Extension/ExtensionIdentifierTest.php @@ -11,7 +11,7 @@ namespace Mcp\Tests\Unit\Schema\Extension; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Schema\Exception\InvalidArgumentException; use Mcp\Schema\Extension\ExtensionIdentifier; use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\Attributes\TestDox; diff --git a/tests/Unit/Schema/IconTest.php b/tests/Unit/Schema/IconTest.php index 65e00e24..c943deb5 100644 --- a/tests/Unit/Schema/IconTest.php +++ b/tests/Unit/Schema/IconTest.php @@ -11,8 +11,8 @@ namespace Mcp\Tests\Unit\Schema; -use Mcp\Exception\InvalidArgumentException; use Mcp\Schema\Enum\IconTheme; +use Mcp\Schema\Exception\InvalidArgumentException; use Mcp\Schema\Icon; use PHPUnit\Framework\TestCase; diff --git a/tests/Unit/Schema/ImplementationTest.php b/tests/Unit/Schema/ImplementationTest.php index 3268b6b1..c243232b 100644 --- a/tests/Unit/Schema/ImplementationTest.php +++ b/tests/Unit/Schema/ImplementationTest.php @@ -11,7 +11,7 @@ namespace Mcp\Tests\Unit\Schema; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Schema\Exception\InvalidArgumentException; use Mcp\Schema\Implementation; use PHPUnit\Framework\TestCase; diff --git a/tests/Unit/JsonRpc/MalformedInputTest.php b/tests/Unit/Schema/MalformedInputTest.php similarity index 97% rename from tests/Unit/JsonRpc/MalformedInputTest.php rename to tests/Unit/Schema/MalformedInputTest.php index cb8d1ad3..d4d0be1b 100644 --- a/tests/Unit/JsonRpc/MalformedInputTest.php +++ b/tests/Unit/Schema/MalformedInputTest.php @@ -9,10 +9,10 @@ * file that was distributed with this source code. */ -namespace Mcp\Tests\Unit\JsonRpc; +namespace Mcp\Tests\Unit\Schema; -use Mcp\Exception\InvalidInputMessageException; -use Mcp\JsonRpc\MessageFactory; +use Mcp\Schema\Exception\InvalidInputMessageException; +use Mcp\Schema\MessageFactory; use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\Attributes\TestDox; use PHPUnit\Framework\TestCase; diff --git a/tests/Unit/JsonRpc/MessageFactoryTest.php b/tests/Unit/Schema/MessageFactoryTest.php similarity index 99% rename from tests/Unit/JsonRpc/MessageFactoryTest.php rename to tests/Unit/Schema/MessageFactoryTest.php index fe2c0d2a..d6a6aedc 100644 --- a/tests/Unit/JsonRpc/MessageFactoryTest.php +++ b/tests/Unit/Schema/MessageFactoryTest.php @@ -9,13 +9,13 @@ * file that was distributed with this source code. */ -namespace Mcp\Tests\Unit\JsonRpc; +namespace Mcp\Tests\Unit\Schema; -use Mcp\Exception\InvalidArgumentException; -use Mcp\Exception\InvalidInputMessageException; -use Mcp\JsonRpc\MessageFactory; +use Mcp\Schema\Exception\InvalidArgumentException; +use Mcp\Schema\Exception\InvalidInputMessageException; use Mcp\Schema\JsonRpc\Error; use Mcp\Schema\JsonRpc\Response; +use Mcp\Schema\MessageFactory; use Mcp\Schema\Notification\CancelledNotification; use Mcp\Schema\Notification\InitializedNotification; use Mcp\Schema\Request\ElicitRequest; diff --git a/tests/Unit/Schema/NonObjectOutputSchemaTest.php b/tests/Unit/Schema/NonObjectOutputSchemaTest.php index 8e0fb0ba..3c5fe74a 100644 --- a/tests/Unit/Schema/NonObjectOutputSchemaTest.php +++ b/tests/Unit/Schema/NonObjectOutputSchemaTest.php @@ -11,8 +11,8 @@ namespace Mcp\Tests\Unit\Schema; -use Mcp\Exception\InvalidArgumentException; use Mcp\Schema\Content\TextContent; +use Mcp\Schema\Exception\InvalidArgumentException; use Mcp\Schema\Result\CallToolResult; use Mcp\Schema\Tool; use PHPUnit\Framework\Attributes\DataProvider; diff --git a/tests/Unit/Schema/Request/CreateSamplingMessageRequestTest.php b/tests/Unit/Schema/Request/CreateSamplingMessageRequestTest.php index fb065e61..40df9414 100644 --- a/tests/Unit/Schema/Request/CreateSamplingMessageRequestTest.php +++ b/tests/Unit/Schema/Request/CreateSamplingMessageRequestTest.php @@ -11,13 +11,13 @@ namespace Mcp\Tests\Unit\Schema\Request; -use Mcp\Exception\InvalidArgumentException; use Mcp\Schema\Content\SamplingMessage; use Mcp\Schema\Content\TextContent; use Mcp\Schema\Content\ToolResultContent; use Mcp\Schema\Content\ToolUseContent; use Mcp\Schema\Enum\Role; use Mcp\Schema\Enum\ToolChoiceMode; +use Mcp\Schema\Exception\InvalidArgumentException; use Mcp\Schema\Request\CreateSamplingMessageRequest; use Mcp\Schema\Tool; use Mcp\Schema\ToolChoice; diff --git a/tests/Unit/Schema/ResourceDefinitionTest.php b/tests/Unit/Schema/ResourceDefinitionTest.php index e6bbe56a..0db8d216 100644 --- a/tests/Unit/Schema/ResourceDefinitionTest.php +++ b/tests/Unit/Schema/ResourceDefinitionTest.php @@ -11,7 +11,7 @@ namespace Mcp\Tests\Unit\Schema; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Schema\Exception\InvalidArgumentException; use Mcp\Schema\ResourceDefinition; use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\TestCase; diff --git a/tests/Unit/Schema/ResourceTemplateTest.php b/tests/Unit/Schema/ResourceTemplateTest.php index b99c9d08..8dc5d29d 100644 --- a/tests/Unit/Schema/ResourceTemplateTest.php +++ b/tests/Unit/Schema/ResourceTemplateTest.php @@ -11,7 +11,7 @@ namespace Mcp\Tests\Unit\Schema; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Schema\Exception\InvalidArgumentException; use Mcp\Schema\ResourceTemplate; use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\TestCase; diff --git a/tests/Unit/Schema/Result/CallToolResultTest.php b/tests/Unit/Schema/Result/CallToolResultTest.php index f7c2b6ff..580f2da1 100644 --- a/tests/Unit/Schema/Result/CallToolResultTest.php +++ b/tests/Unit/Schema/Result/CallToolResultTest.php @@ -11,12 +11,12 @@ namespace Mcp\Tests\Unit\Schema\Result; -use Mcp\Exception\InvalidArgumentException; use Mcp\Schema\Content\AudioContent; use Mcp\Schema\Content\EmbeddedResource; use Mcp\Schema\Content\ImageContent; use Mcp\Schema\Content\ResourceLink; use Mcp\Schema\Content\TextContent; +use Mcp\Schema\Exception\InvalidArgumentException; use Mcp\Schema\Result\CallToolResult; use PHPUnit\Framework\TestCase; diff --git a/tests/Unit/Schema/Result/CreateSamplingMessageResultTest.php b/tests/Unit/Schema/Result/CreateSamplingMessageResultTest.php index 41961058..10502f8b 100644 --- a/tests/Unit/Schema/Result/CreateSamplingMessageResultTest.php +++ b/tests/Unit/Schema/Result/CreateSamplingMessageResultTest.php @@ -11,10 +11,10 @@ namespace Mcp\Tests\Unit\Schema\Result; -use Mcp\Exception\InvalidArgumentException; use Mcp\Schema\Content\TextContent; use Mcp\Schema\Content\ToolUseContent; use Mcp\Schema\Enum\Role; +use Mcp\Schema\Exception\InvalidArgumentException; use Mcp\Schema\Result\CreateSamplingMessageResult; use PHPUnit\Framework\TestCase; diff --git a/tests/Unit/Schema/Result/ElicitResultTest.php b/tests/Unit/Schema/Result/ElicitResultTest.php index b946c770..cfbf2431 100644 --- a/tests/Unit/Schema/Result/ElicitResultTest.php +++ b/tests/Unit/Schema/Result/ElicitResultTest.php @@ -11,9 +11,9 @@ namespace Mcp\Tests\Unit\Schema\Result; -use Mcp\Exception\InvalidArgumentException; use Mcp\Schema\Enum\ElicitAction; use Mcp\Schema\Enum\ElicitationMode; +use Mcp\Schema\Exception\InvalidArgumentException; use Mcp\Schema\Result\ElicitResult; use PHPUnit\Framework\TestCase; diff --git a/tests/Unit/Schema/Result/ListRootsResultTest.php b/tests/Unit/Schema/Result/ListRootsResultTest.php index 46729fbf..04360f12 100644 --- a/tests/Unit/Schema/Result/ListRootsResultTest.php +++ b/tests/Unit/Schema/Result/ListRootsResultTest.php @@ -11,7 +11,7 @@ namespace Mcp\Tests\Unit\Schema\Result; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Schema\Exception\InvalidArgumentException; use Mcp\Schema\Result\ListRootsResult; use Mcp\Schema\Root; use PHPUnit\Framework\TestCase; diff --git a/tests/Unit/Schema/ToolChoiceTest.php b/tests/Unit/Schema/ToolChoiceTest.php index 2b5e7cd3..d9f2be71 100644 --- a/tests/Unit/Schema/ToolChoiceTest.php +++ b/tests/Unit/Schema/ToolChoiceTest.php @@ -11,8 +11,8 @@ namespace Mcp\Tests\Unit\Schema; -use Mcp\Exception\InvalidArgumentException; use Mcp\Schema\Enum\ToolChoiceMode; +use Mcp\Schema\Exception\InvalidArgumentException; use Mcp\Schema\ToolChoice; use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\TestCase; diff --git a/tests/Unit/Schema/ToolHeaderAnnotationTest.php b/tests/Unit/Schema/ToolHeaderAnnotationTest.php index 8fab2820..e98e2020 100644 --- a/tests/Unit/Schema/ToolHeaderAnnotationTest.php +++ b/tests/Unit/Schema/ToolHeaderAnnotationTest.php @@ -11,7 +11,7 @@ namespace Mcp\Tests\Unit\Schema; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Schema\Exception\InvalidArgumentException; use Mcp\Schema\Tool; use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\Attributes\TestDox; diff --git a/tests/Unit/Server/BuilderTest.php b/tests/Unit/Server/BuilderTest.php index 790af5f5..13ed88ff 100644 --- a/tests/Unit/Server/BuilderTest.php +++ b/tests/Unit/Server/BuilderTest.php @@ -11,26 +11,27 @@ namespace Mcp\Tests\Unit\Server; -use Mcp\Capability\Registry; -use Mcp\Capability\Registry\ElementReference; -use Mcp\Capability\Registry\Loader\LoaderInterface; -use Mcp\Capability\Registry\ReferenceHandlerInterface; -use Mcp\Capability\RegistryInterface; -use Mcp\Exception\InvalidArgumentException; -use Mcp\Exception\LogicException; use Mcp\Schema\Content\TextContent; use Mcp\Schema\Enum\ProtocolVersion; +use Mcp\Schema\Exception\InvalidArgumentException as SchemaInvalidArgumentException; use Mcp\Schema\Extension\Apps\McpApps; use Mcp\Schema\Implementation; use Mcp\Schema\JsonRpc\Response; use Mcp\Schema\Request\CallToolRequest; use Mcp\Schema\ServerCapabilities; use Mcp\Schema\Tool; -use Mcp\Server; use Mcp\Server\Builder; +use Mcp\Server\Capability\Registry; +use Mcp\Server\Capability\Registry\ElementReference; +use Mcp\Server\Capability\Registry\Loader\LoaderInterface; +use Mcp\Server\Capability\Registry\ReferenceHandlerInterface; +use Mcp\Server\Capability\RegistryInterface; +use Mcp\Server\Exception\InvalidArgumentException as ServerInvalidArgumentException; +use Mcp\Server\Exception\LogicException; use Mcp\Server\Handler\Request\CallToolHandler; use Mcp\Server\Handler\Request\InitializeHandler; use Mcp\Server\Protocol; +use Mcp\Server\Server; use Mcp\Server\Session\SessionInterface; use Mcp\Server\Stateless\StatelessProtocol; use Mcp\Server\Subscription\InMemoryNotificationBus; @@ -231,7 +232,7 @@ public function testSetModernVersions(): void #[TestDox('setModernVersions() rejects a handshake-era revision, which the classifier would never route there')] public function testSetModernVersionsRejectsHandshakeRevision(): void { - $this->expectException(InvalidArgumentException::class); + $this->expectException(ServerInvalidArgumentException::class); $this->expectExceptionMessage(ProtocolVersion::V2025_11_25->value); Server::builder()->setModernVersions([ProtocolVersion::V2025_11_25]); @@ -247,7 +248,7 @@ private static function statelessProtocol(Server $server): ?StatelessProtocol #[TestDox('An extension identifier must be a valid _meta prefix')] public function testEnableExtensionRejectsUnprefixedIdentifier(): void { - $this->expectException(InvalidArgumentException::class); + $this->expectException(SchemaInvalidArgumentException::class); $this->expectExceptionMessage('has no prefix'); Server::builder()->enableExtension(new ThingExtension('things')); diff --git a/tests/Unit/Capability/Attribute/CompletionProviderFixture.php b/tests/Unit/Server/Capability/Attribute/CompletionProviderFixture.php similarity index 86% rename from tests/Unit/Capability/Attribute/CompletionProviderFixture.php rename to tests/Unit/Server/Capability/Attribute/CompletionProviderFixture.php index 1f4f649e..22860418 100644 --- a/tests/Unit/Capability/Attribute/CompletionProviderFixture.php +++ b/tests/Unit/Server/Capability/Attribute/CompletionProviderFixture.php @@ -9,9 +9,9 @@ * file that was distributed with this source code. */ -namespace Mcp\Tests\Unit\Capability\Attribute; +namespace Mcp\Tests\Unit\Server\Capability\Attribute; -use Mcp\Capability\Completion\ProviderInterface; +use Mcp\Server\Capability\Completion\ProviderInterface; class CompletionProviderFixture implements ProviderInterface { diff --git a/tests/Unit/Capability/Attribute/CompletionProviderTest.php b/tests/Unit/Server/Capability/Attribute/CompletionProviderTest.php similarity index 96% rename from tests/Unit/Capability/Attribute/CompletionProviderTest.php rename to tests/Unit/Server/Capability/Attribute/CompletionProviderTest.php index 19a78750..d830e6fc 100644 --- a/tests/Unit/Capability/Attribute/CompletionProviderTest.php +++ b/tests/Unit/Server/Capability/Attribute/CompletionProviderTest.php @@ -9,9 +9,9 @@ * file that was distributed with this source code. */ -namespace Mcp\Tests\Unit\Capability\Attribute; +namespace Mcp\Tests\Unit\Server\Capability\Attribute; -use Mcp\Capability\Attribute\CompletionProvider; +use Mcp\Server\Capability\Attribute\CompletionProvider; use Mcp\Tests\Unit\Fixtures\Enum\StatusEnum; use PHPUnit\Framework\TestCase; diff --git a/tests/Unit/Capability/Attribute/McpPromptTest.php b/tests/Unit/Server/Capability/Attribute/McpPromptTest.php similarity index 93% rename from tests/Unit/Capability/Attribute/McpPromptTest.php rename to tests/Unit/Server/Capability/Attribute/McpPromptTest.php index d74cbcfe..42f1bfd6 100644 --- a/tests/Unit/Capability/Attribute/McpPromptTest.php +++ b/tests/Unit/Server/Capability/Attribute/McpPromptTest.php @@ -9,9 +9,9 @@ * file that was distributed with this source code. */ -namespace Mcp\Tests\Unit\Capability\Attribute; +namespace Mcp\Tests\Unit\Server\Capability\Attribute; -use Mcp\Capability\Attribute\McpPrompt; +use Mcp\Server\Capability\Attribute\McpPrompt; use PHPUnit\Framework\TestCase; class McpPromptTest extends TestCase diff --git a/tests/Unit/Capability/Attribute/McpResourceTemplateTest.php b/tests/Unit/Server/Capability/Attribute/McpResourceTemplateTest.php similarity index 95% rename from tests/Unit/Capability/Attribute/McpResourceTemplateTest.php rename to tests/Unit/Server/Capability/Attribute/McpResourceTemplateTest.php index 3bbccb88..571a066f 100644 --- a/tests/Unit/Capability/Attribute/McpResourceTemplateTest.php +++ b/tests/Unit/Server/Capability/Attribute/McpResourceTemplateTest.php @@ -9,9 +9,9 @@ * file that was distributed with this source code. */ -namespace Mcp\Tests\Unit\Capability\Attribute; +namespace Mcp\Tests\Unit\Server\Capability\Attribute; -use Mcp\Capability\Attribute\McpResourceTemplate; +use Mcp\Server\Capability\Attribute\McpResourceTemplate; use PHPUnit\Framework\TestCase; class McpResourceTemplateTest extends TestCase diff --git a/tests/Unit/Capability/Attribute/McpResourceTest.php b/tests/Unit/Server/Capability/Attribute/McpResourceTest.php similarity index 95% rename from tests/Unit/Capability/Attribute/McpResourceTest.php rename to tests/Unit/Server/Capability/Attribute/McpResourceTest.php index 423a4122..32855af3 100644 --- a/tests/Unit/Capability/Attribute/McpResourceTest.php +++ b/tests/Unit/Server/Capability/Attribute/McpResourceTest.php @@ -9,9 +9,9 @@ * file that was distributed with this source code. */ -namespace Mcp\Tests\Unit\Capability\Attribute; +namespace Mcp\Tests\Unit\Server\Capability\Attribute; -use Mcp\Capability\Attribute\McpResource; +use Mcp\Server\Capability\Attribute\McpResource; use PHPUnit\Framework\TestCase; class McpResourceTest extends TestCase diff --git a/tests/Unit/Capability/Attribute/McpToolTest.php b/tests/Unit/Server/Capability/Attribute/McpToolTest.php similarity index 96% rename from tests/Unit/Capability/Attribute/McpToolTest.php rename to tests/Unit/Server/Capability/Attribute/McpToolTest.php index e6314581..63587bd0 100644 --- a/tests/Unit/Capability/Attribute/McpToolTest.php +++ b/tests/Unit/Server/Capability/Attribute/McpToolTest.php @@ -9,9 +9,9 @@ * file that was distributed with this source code. */ -namespace Mcp\Tests\Unit\Capability\Attribute; +namespace Mcp\Tests\Unit\Server\Capability\Attribute; -use Mcp\Capability\Attribute\McpTool; +use Mcp\Server\Capability\Attribute\McpTool; use PHPUnit\Framework\TestCase; class McpToolTest extends TestCase diff --git a/tests/Unit/Capability/Discovery/CachedDiscovererTest.php b/tests/Unit/Server/Capability/Discovery/CachedDiscovererTest.php similarity index 92% rename from tests/Unit/Capability/Discovery/CachedDiscovererTest.php rename to tests/Unit/Server/Capability/Discovery/CachedDiscovererTest.php index 75ffd88c..6a6442bc 100644 --- a/tests/Unit/Capability/Discovery/CachedDiscovererTest.php +++ b/tests/Unit/Server/Capability/Discovery/CachedDiscovererTest.php @@ -9,11 +9,11 @@ * file that was distributed with this source code. */ -namespace Mcp\Tests\Unit\Capability\Discovery; +namespace Mcp\Tests\Unit\Server\Capability\Discovery; -use Mcp\Capability\Discovery\CachedDiscoverer; -use Mcp\Capability\Discovery\Discoverer; -use Mcp\Capability\Discovery\DiscoveryState; +use Mcp\Server\Capability\Discovery\CachedDiscoverer; +use Mcp\Server\Capability\Discovery\Discoverer; +use Mcp\Server\Capability\Discovery\DiscoveryState; use PHPUnit\Framework\TestCase; use Psr\Log\NullLogger; use Psr\SimpleCache\CacheInterface; diff --git a/tests/Unit/Capability/Discovery/DiscovererToolTitleTest.php b/tests/Unit/Server/Capability/Discovery/DiscovererToolTitleTest.php similarity index 84% rename from tests/Unit/Capability/Discovery/DiscovererToolTitleTest.php rename to tests/Unit/Server/Capability/Discovery/DiscovererToolTitleTest.php index 93754256..a12617ed 100644 --- a/tests/Unit/Capability/Discovery/DiscovererToolTitleTest.php +++ b/tests/Unit/Server/Capability/Discovery/DiscovererToolTitleTest.php @@ -9,10 +9,10 @@ * file that was distributed with this source code. */ -namespace Mcp\Tests\Unit\Capability\Discovery; +namespace Mcp\Tests\Unit\Server\Capability\Discovery; -use Mcp\Capability\Discovery\Discoverer; -use Mcp\Capability\Registry\ToolReference; +use Mcp\Server\Capability\Discovery\Discoverer; +use Mcp\Server\Capability\Registry\ToolReference; use PHPUnit\Framework\TestCase; class DiscovererToolTitleTest extends TestCase diff --git a/tests/Unit/Capability/Discovery/DiscoveryStateTest.php b/tests/Unit/Server/Capability/Discovery/DiscoveryStateTest.php similarity index 94% rename from tests/Unit/Capability/Discovery/DiscoveryStateTest.php rename to tests/Unit/Server/Capability/Discovery/DiscoveryStateTest.php index e40c722d..48e18549 100644 --- a/tests/Unit/Capability/Discovery/DiscoveryStateTest.php +++ b/tests/Unit/Server/Capability/Discovery/DiscoveryStateTest.php @@ -9,17 +9,17 @@ * file that was distributed with this source code. */ -namespace Mcp\Tests\Unit\Capability\Discovery; +namespace Mcp\Tests\Unit\Server\Capability\Discovery; -use Mcp\Capability\Discovery\DiscoveryState; -use Mcp\Capability\Registry\PromptReference; -use Mcp\Capability\Registry\ResourceReference; -use Mcp\Capability\Registry\ResourceTemplateReference; -use Mcp\Capability\Registry\ToolReference; use Mcp\Schema\Prompt; use Mcp\Schema\ResourceDefinition; use Mcp\Schema\ResourceTemplate; use Mcp\Schema\Tool; +use Mcp\Server\Capability\Discovery\DiscoveryState; +use Mcp\Server\Capability\Registry\PromptReference; +use Mcp\Server\Capability\Registry\ResourceReference; +use Mcp\Server\Capability\Registry\ResourceTemplateReference; +use Mcp\Server\Capability\Registry\ToolReference; use PHPUnit\Framework\TestCase; class DiscoveryStateTest extends TestCase diff --git a/tests/Unit/Capability/Discovery/DiscoveryTest.php b/tests/Unit/Server/Capability/Discovery/DiscoveryTest.php similarity index 91% rename from tests/Unit/Capability/Discovery/DiscoveryTest.php rename to tests/Unit/Server/Capability/Discovery/DiscoveryTest.php index 5c716d7d..4ea9882c 100644 --- a/tests/Unit/Capability/Discovery/DiscoveryTest.php +++ b/tests/Unit/Server/Capability/Discovery/DiscoveryTest.php @@ -9,20 +9,20 @@ * file that was distributed with this source code. */ -namespace Mcp\Tests\Unit\Capability\Discovery; +namespace Mcp\Tests\Unit\Server\Capability\Discovery; -use Mcp\Capability\Completion\EnumCompletionProvider; -use Mcp\Capability\Completion\ListCompletionProvider; -use Mcp\Capability\Discovery\Discoverer; -use Mcp\Capability\Registry\ToolReference; use Mcp\Schema\Extension\Apps\McpApps; -use Mcp\Tests\Unit\Capability\Attribute\CompletionProviderFixture; -use Mcp\Tests\Unit\Capability\Discovery\Fixtures\AlternativeFileNameToolHandler; -use Mcp\Tests\Unit\Capability\Discovery\Fixtures\DiscoverableToolHandler; -use Mcp\Tests\Unit\Capability\Discovery\Fixtures\InvocablePromptFixture; -use Mcp\Tests\Unit\Capability\Discovery\Fixtures\InvocableResourceFixture; -use Mcp\Tests\Unit\Capability\Discovery\Fixtures\InvocableResourceTemplateFixture; -use Mcp\Tests\Unit\Capability\Discovery\Fixtures\InvocableToolFixture; +use Mcp\Server\Capability\Completion\EnumCompletionProvider; +use Mcp\Server\Capability\Completion\ListCompletionProvider; +use Mcp\Server\Capability\Discovery\Discoverer; +use Mcp\Server\Capability\Registry\ToolReference; +use Mcp\Tests\Unit\Server\Capability\Attribute\CompletionProviderFixture; +use Mcp\Tests\Unit\Server\Capability\Discovery\Fixtures\AlternativeFileNameToolHandler; +use Mcp\Tests\Unit\Server\Capability\Discovery\Fixtures\DiscoverableToolHandler; +use Mcp\Tests\Unit\Server\Capability\Discovery\Fixtures\InvocablePromptFixture; +use Mcp\Tests\Unit\Server\Capability\Discovery\Fixtures\InvocableResourceFixture; +use Mcp\Tests\Unit\Server\Capability\Discovery\Fixtures\InvocableResourceTemplateFixture; +use Mcp\Tests\Unit\Server\Capability\Discovery\Fixtures\InvocableToolFixture; use PHPUnit\Framework\TestCase; class DiscoveryTest extends TestCase diff --git a/tests/Unit/Capability/Discovery/DocBlockParserTest.php b/tests/Unit/Server/Capability/Discovery/DocBlockParserTest.php similarity index 98% rename from tests/Unit/Capability/Discovery/DocBlockParserTest.php rename to tests/Unit/Server/Capability/Discovery/DocBlockParserTest.php index a2a832ad..41fe21ce 100644 --- a/tests/Unit/Capability/Discovery/DocBlockParserTest.php +++ b/tests/Unit/Server/Capability/Discovery/DocBlockParserTest.php @@ -9,11 +9,11 @@ * file that was distributed with this source code. */ -namespace Mcp\Tests\Unit\Capability\Discovery; +namespace Mcp\Tests\Unit\Server\Capability\Discovery; use Composer\InstalledVersions; use Composer\Semver\VersionParser; -use Mcp\Capability\Discovery\DocBlockParser; +use Mcp\Server\Capability\Discovery\DocBlockParser; use phpDocumentor\Reflection\DocBlock; use phpDocumentor\Reflection\DocBlock\Tags\Deprecated; use phpDocumentor\Reflection\DocBlock\Tags\Param; diff --git a/tests/Unit/Capability/Discovery/DocBlockTestFixture.php b/tests/Unit/Server/Capability/Discovery/DocBlockTestFixture.php similarity index 97% rename from tests/Unit/Capability/Discovery/DocBlockTestFixture.php rename to tests/Unit/Server/Capability/Discovery/DocBlockTestFixture.php index 7a753ddf..2adaebca 100644 --- a/tests/Unit/Capability/Discovery/DocBlockTestFixture.php +++ b/tests/Unit/Server/Capability/Discovery/DocBlockTestFixture.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace Mcp\Tests\Unit\Capability\Discovery; +namespace Mcp\Tests\Unit\Server\Capability\Discovery; use Mcp\Tests\Capability\Discovery\Missing; diff --git a/tests/Unit/Capability/Discovery/Fixtures/AlternativeFileNameToolHandler.class.inc b/tests/Unit/Server/Capability/Discovery/Fixtures/AlternativeFileNameToolHandler.class.inc similarity index 78% rename from tests/Unit/Capability/Discovery/Fixtures/AlternativeFileNameToolHandler.class.inc rename to tests/Unit/Server/Capability/Discovery/Fixtures/AlternativeFileNameToolHandler.class.inc index 67c78eb0..c11d2e9b 100644 --- a/tests/Unit/Capability/Discovery/Fixtures/AlternativeFileNameToolHandler.class.inc +++ b/tests/Unit/Server/Capability/Discovery/Fixtures/AlternativeFileNameToolHandler.class.inc @@ -9,9 +9,9 @@ * file that was distributed with this source code. */ -namespace Mcp\Tests\Unit\Capability\Discovery\Fixtures; +namespace Mcp\Tests\Unit\Server\Capability\Discovery\Fixtures; -use Mcp\Capability\Attribute\McpTool; +use Mcp\Server\Capability\Attribute\McpTool; class AlternativeFileNameToolHandler { diff --git a/tests/Unit/Capability/Discovery/Fixtures/DiscoverablePromptHandler.php b/tests/Unit/Server/Capability/Discovery/Fixtures/DiscoverablePromptHandler.php similarity index 83% rename from tests/Unit/Capability/Discovery/Fixtures/DiscoverablePromptHandler.php rename to tests/Unit/Server/Capability/Discovery/Fixtures/DiscoverablePromptHandler.php index b4a8ac6d..1fa22b55 100644 --- a/tests/Unit/Capability/Discovery/Fixtures/DiscoverablePromptHandler.php +++ b/tests/Unit/Server/Capability/Discovery/Fixtures/DiscoverablePromptHandler.php @@ -9,11 +9,11 @@ * file that was distributed with this source code. */ -namespace Mcp\Tests\Unit\Capability\Discovery\Fixtures; +namespace Mcp\Tests\Unit\Server\Capability\Discovery\Fixtures; -use Mcp\Capability\Attribute\CompletionProvider; -use Mcp\Capability\Attribute\McpPrompt; -use Mcp\Tests\Unit\Capability\Attribute\CompletionProviderFixture; +use Mcp\Server\Capability\Attribute\CompletionProvider; +use Mcp\Server\Capability\Attribute\McpPrompt; +use Mcp\Tests\Unit\Server\Capability\Attribute\CompletionProviderFixture; class DiscoverablePromptHandler { diff --git a/tests/Unit/Capability/Discovery/Fixtures/DiscoverableResourceHandler.php b/tests/Unit/Server/Capability/Discovery/Fixtures/DiscoverableResourceHandler.php similarity index 90% rename from tests/Unit/Capability/Discovery/Fixtures/DiscoverableResourceHandler.php rename to tests/Unit/Server/Capability/Discovery/Fixtures/DiscoverableResourceHandler.php index 1dfd9368..b25172f9 100644 --- a/tests/Unit/Capability/Discovery/Fixtures/DiscoverableResourceHandler.php +++ b/tests/Unit/Server/Capability/Discovery/Fixtures/DiscoverableResourceHandler.php @@ -9,10 +9,10 @@ * file that was distributed with this source code. */ -namespace Mcp\Tests\Unit\Capability\Discovery\Fixtures; +namespace Mcp\Tests\Unit\Server\Capability\Discovery\Fixtures; -use Mcp\Capability\Attribute\McpResource; use Mcp\Schema\Annotations; +use Mcp\Server\Capability\Attribute\McpResource; class DiscoverableResourceHandler { diff --git a/tests/Unit/Capability/Discovery/Fixtures/DiscoverableTemplateHandler.php b/tests/Unit/Server/Capability/Discovery/Fixtures/DiscoverableTemplateHandler.php similarity index 84% rename from tests/Unit/Capability/Discovery/Fixtures/DiscoverableTemplateHandler.php rename to tests/Unit/Server/Capability/Discovery/Fixtures/DiscoverableTemplateHandler.php index f5d266b9..2b84d91a 100644 --- a/tests/Unit/Capability/Discovery/Fixtures/DiscoverableTemplateHandler.php +++ b/tests/Unit/Server/Capability/Discovery/Fixtures/DiscoverableTemplateHandler.php @@ -9,11 +9,11 @@ * file that was distributed with this source code. */ -namespace Mcp\Tests\Unit\Capability\Discovery\Fixtures; +namespace Mcp\Tests\Unit\Server\Capability\Discovery\Fixtures; -use Mcp\Capability\Attribute\CompletionProvider; -use Mcp\Capability\Attribute\McpResourceTemplate; -use Mcp\Tests\Unit\Capability\Attribute\CompletionProviderFixture; +use Mcp\Server\Capability\Attribute\CompletionProvider; +use Mcp\Server\Capability\Attribute\McpResourceTemplate; +use Mcp\Tests\Unit\Server\Capability\Attribute\CompletionProviderFixture; class DiscoverableTemplateHandler { diff --git a/tests/Unit/Capability/Discovery/Fixtures/DiscoverableToolHandler.php b/tests/Unit/Server/Capability/Discovery/Fixtures/DiscoverableToolHandler.php similarity index 94% rename from tests/Unit/Capability/Discovery/Fixtures/DiscoverableToolHandler.php rename to tests/Unit/Server/Capability/Discovery/Fixtures/DiscoverableToolHandler.php index f20cda58..f828541c 100644 --- a/tests/Unit/Capability/Discovery/Fixtures/DiscoverableToolHandler.php +++ b/tests/Unit/Server/Capability/Discovery/Fixtures/DiscoverableToolHandler.php @@ -9,10 +9,10 @@ * file that was distributed with this source code. */ -namespace Mcp\Tests\Unit\Capability\Discovery\Fixtures; +namespace Mcp\Tests\Unit\Server\Capability\Discovery\Fixtures; -use Mcp\Capability\Attribute\McpTool; use Mcp\Schema\ToolAnnotations; +use Mcp\Server\Capability\Attribute\McpTool; use Mcp\Tests\Unit\Fixtures\Enum\BackedStringEnum; class DiscoverableToolHandler diff --git a/tests/Unit/Capability/Discovery/Fixtures/DiscoverableUiHandler.php b/tests/Unit/Server/Capability/Discovery/Fixtures/DiscoverableUiHandler.php similarity index 90% rename from tests/Unit/Capability/Discovery/Fixtures/DiscoverableUiHandler.php rename to tests/Unit/Server/Capability/Discovery/Fixtures/DiscoverableUiHandler.php index f5d03ed3..99693f62 100644 --- a/tests/Unit/Capability/Discovery/Fixtures/DiscoverableUiHandler.php +++ b/tests/Unit/Server/Capability/Discovery/Fixtures/DiscoverableUiHandler.php @@ -9,16 +9,16 @@ * file that was distributed with this source code. */ -namespace Mcp\Tests\Unit\Capability\Discovery\Fixtures; +namespace Mcp\Tests\Unit\Server\Capability\Discovery\Fixtures; -use Mcp\Capability\Attribute\McpResource; -use Mcp\Capability\Attribute\McpTool; use Mcp\Schema\Content\TextResourceContents; use Mcp\Schema\Extension\Apps\McpApps; use Mcp\Schema\Extension\Apps\ToolVisibility; use Mcp\Schema\Extension\Apps\UiResourceContentMeta; use Mcp\Schema\Extension\Apps\UiResourceCsp; use Mcp\Schema\Extension\Apps\UiToolMeta; +use Mcp\Server\Capability\Attribute\McpResource; +use Mcp\Server\Capability\Attribute\McpTool; /** * An MCP App declared purely through attributes: a `ui://` resource flagged with the diff --git a/tests/Unit/Capability/Discovery/Fixtures/EnhancedCompletionHandler.php b/tests/Unit/Server/Capability/Discovery/Fixtures/EnhancedCompletionHandler.php similarity index 87% rename from tests/Unit/Capability/Discovery/Fixtures/EnhancedCompletionHandler.php rename to tests/Unit/Server/Capability/Discovery/Fixtures/EnhancedCompletionHandler.php index 5ac67ddb..f27467b8 100644 --- a/tests/Unit/Capability/Discovery/Fixtures/EnhancedCompletionHandler.php +++ b/tests/Unit/Server/Capability/Discovery/Fixtures/EnhancedCompletionHandler.php @@ -9,11 +9,11 @@ * file that was distributed with this source code. */ -namespace Mcp\Tests\Unit\Capability\Discovery\Fixtures; +namespace Mcp\Tests\Unit\Server\Capability\Discovery\Fixtures; -use Mcp\Capability\Attribute\CompletionProvider; -use Mcp\Capability\Attribute\McpPrompt; -use Mcp\Capability\Attribute\McpResourceTemplate; +use Mcp\Server\Capability\Attribute\CompletionProvider; +use Mcp\Server\Capability\Attribute\McpPrompt; +use Mcp\Server\Capability\Attribute\McpResourceTemplate; use Mcp\Tests\Unit\Fixtures\Enum\PriorityEnum; use Mcp\Tests\Unit\Fixtures\Enum\StatusEnum; diff --git a/tests/Unit/Capability/Discovery/Fixtures/InvocablePromptFixture.php b/tests/Unit/Server/Capability/Discovery/Fixtures/InvocablePromptFixture.php similarity index 82% rename from tests/Unit/Capability/Discovery/Fixtures/InvocablePromptFixture.php rename to tests/Unit/Server/Capability/Discovery/Fixtures/InvocablePromptFixture.php index ab94e742..ccdcd6fa 100644 --- a/tests/Unit/Capability/Discovery/Fixtures/InvocablePromptFixture.php +++ b/tests/Unit/Server/Capability/Discovery/Fixtures/InvocablePromptFixture.php @@ -9,9 +9,9 @@ * file that was distributed with this source code. */ -namespace Mcp\Tests\Unit\Capability\Discovery\Fixtures; +namespace Mcp\Tests\Unit\Server\Capability\Discovery\Fixtures; -use Mcp\Capability\Attribute\McpPrompt; +use Mcp\Server\Capability\Attribute\McpPrompt; #[McpPrompt(name: 'InvokableGreeterPrompt')] class InvocablePromptFixture diff --git a/tests/Unit/Capability/Discovery/Fixtures/InvocableResourceFixture.php b/tests/Unit/Server/Capability/Discovery/Fixtures/InvocableResourceFixture.php similarity index 81% rename from tests/Unit/Capability/Discovery/Fixtures/InvocableResourceFixture.php rename to tests/Unit/Server/Capability/Discovery/Fixtures/InvocableResourceFixture.php index 8af2d214..5f3519ee 100644 --- a/tests/Unit/Capability/Discovery/Fixtures/InvocableResourceFixture.php +++ b/tests/Unit/Server/Capability/Discovery/Fixtures/InvocableResourceFixture.php @@ -9,9 +9,9 @@ * file that was distributed with this source code. */ -namespace Mcp\Tests\Unit\Capability\Discovery\Fixtures; +namespace Mcp\Tests\Unit\Server\Capability\Discovery\Fixtures; -use Mcp\Capability\Attribute\McpResource; +use Mcp\Server\Capability\Attribute\McpResource; #[McpResource(uri: 'invokable://config/status', name: 'invokable_app_status')] class InvocableResourceFixture diff --git a/tests/Unit/Capability/Discovery/Fixtures/InvocableResourceTemplateFixture.php b/tests/Unit/Server/Capability/Discovery/Fixtures/InvocableResourceTemplateFixture.php similarity index 81% rename from tests/Unit/Capability/Discovery/Fixtures/InvocableResourceTemplateFixture.php rename to tests/Unit/Server/Capability/Discovery/Fixtures/InvocableResourceTemplateFixture.php index 9f95e2e8..4385b131 100644 --- a/tests/Unit/Capability/Discovery/Fixtures/InvocableResourceTemplateFixture.php +++ b/tests/Unit/Server/Capability/Discovery/Fixtures/InvocableResourceTemplateFixture.php @@ -9,9 +9,9 @@ * file that was distributed with this source code. */ -namespace Mcp\Tests\Unit\Capability\Discovery\Fixtures; +namespace Mcp\Tests\Unit\Server\Capability\Discovery\Fixtures; -use Mcp\Capability\Attribute\McpResourceTemplate; +use Mcp\Server\Capability\Attribute\McpResourceTemplate; #[McpResourceTemplate(uriTemplate: 'invokable://user-profile/{userId}')] class InvocableResourceTemplateFixture diff --git a/tests/Unit/Capability/Discovery/Fixtures/InvocableToolFixture.php b/tests/Unit/Server/Capability/Discovery/Fixtures/InvocableToolFixture.php similarity index 82% rename from tests/Unit/Capability/Discovery/Fixtures/InvocableToolFixture.php rename to tests/Unit/Server/Capability/Discovery/Fixtures/InvocableToolFixture.php index 7fa86568..d57f8db3 100644 --- a/tests/Unit/Capability/Discovery/Fixtures/InvocableToolFixture.php +++ b/tests/Unit/Server/Capability/Discovery/Fixtures/InvocableToolFixture.php @@ -9,9 +9,9 @@ * file that was distributed with this source code. */ -namespace Mcp\Tests\Unit\Capability\Discovery\Fixtures; +namespace Mcp\Tests\Unit\Server\Capability\Discovery\Fixtures; -use Mcp\Capability\Attribute\McpTool; +use Mcp\Server\Capability\Attribute\McpTool; #[McpTool(name: 'InvokableCalculator', description: 'An invokable calculator tool.')] class InvocableToolFixture diff --git a/tests/Unit/Capability/Discovery/Fixtures/NonDiscoverableClass.php b/tests/Unit/Server/Capability/Discovery/Fixtures/NonDiscoverableClass.php similarity index 89% rename from tests/Unit/Capability/Discovery/Fixtures/NonDiscoverableClass.php rename to tests/Unit/Server/Capability/Discovery/Fixtures/NonDiscoverableClass.php index eb42d0a7..fbb3ca87 100644 --- a/tests/Unit/Capability/Discovery/Fixtures/NonDiscoverableClass.php +++ b/tests/Unit/Server/Capability/Discovery/Fixtures/NonDiscoverableClass.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace Mcp\Tests\Unit\Capability\Discovery\Fixtures; +namespace Mcp\Tests\Unit\Server\Capability\Discovery\Fixtures; class NonDiscoverableClass { diff --git a/tests/Unit/Capability/Discovery/Fixtures/SubDir/HiddenTool.php b/tests/Unit/Server/Capability/Discovery/Fixtures/SubDir/HiddenTool.php similarity index 76% rename from tests/Unit/Capability/Discovery/Fixtures/SubDir/HiddenTool.php rename to tests/Unit/Server/Capability/Discovery/Fixtures/SubDir/HiddenTool.php index 8053aa6e..b5bf274f 100644 --- a/tests/Unit/Capability/Discovery/Fixtures/SubDir/HiddenTool.php +++ b/tests/Unit/Server/Capability/Discovery/Fixtures/SubDir/HiddenTool.php @@ -9,9 +9,9 @@ * file that was distributed with this source code. */ -namespace Mcp\Tests\Unit\Capability\Discovery\Fixtures\SubDir; +namespace Mcp\Tests\Unit\Server\Capability\Discovery\Fixtures\SubDir; -use Mcp\Capability\Attribute\McpTool; +use Mcp\Server\Capability\Attribute\McpTool; class HiddenTool { diff --git a/tests/Unit/Capability/Discovery/HandlerResolverTest.php b/tests/Unit/Server/Capability/Discovery/HandlerResolverTest.php similarity index 95% rename from tests/Unit/Capability/Discovery/HandlerResolverTest.php rename to tests/Unit/Server/Capability/Discovery/HandlerResolverTest.php index 9076a7e5..1c2eee10 100644 --- a/tests/Unit/Capability/Discovery/HandlerResolverTest.php +++ b/tests/Unit/Server/Capability/Discovery/HandlerResolverTest.php @@ -9,10 +9,10 @@ * file that was distributed with this source code. */ -namespace Mcp\Tests\Unit\Capability\Discovery; +namespace Mcp\Tests\Unit\Server\Capability\Discovery; -use Mcp\Capability\Discovery\HandlerResolver; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Server\Capability\Discovery\HandlerResolver; +use Mcp\Server\Exception\InvalidArgumentException; use PHPUnit\Framework\TestCase; class HandlerResolverTest extends TestCase @@ -110,7 +110,7 @@ public function testThrowsForNonExistentClassInStringHandler(): void public function testThrowsForNonInvokableClassStringHandler(): void { $this->expectException(InvalidArgumentException::class); - $this->expectExceptionMessage('Invokable handler class "Mcp\Tests\Unit\Capability\Discovery\NonInvokableClass" must have a public "__invoke" method.'); + $this->expectExceptionMessage('Invokable handler class "Mcp\Tests\Unit\Server\Capability\Discovery\NonInvokableClass" must have a public "__invoke" method.'); HandlerResolver::resolve(NonInvokableClass::class); } @@ -145,7 +145,7 @@ public function testThrowsForDestructorAsHandler(): void public function testThrowsForAbstractMethodHandler(): void { $this->expectException(InvalidArgumentException::class); - $this->expectExceptionMessage('Handler method "Mcp\Tests\Unit\Capability\Discovery\AbstractHandlerClass::abstractMethod" must not be abstract.'); + $this->expectExceptionMessage('Handler method "Mcp\Tests\Unit\Server\Capability\Discovery\AbstractHandlerClass::abstractMethod" must not be abstract.'); HandlerResolver::resolve([AbstractHandlerClass::class, 'abstractMethod']); } diff --git a/tests/Unit/Capability/Discovery/SchemaGeneratorFixture.php b/tests/Unit/Server/Capability/Discovery/SchemaGeneratorFixture.php similarity index 99% rename from tests/Unit/Capability/Discovery/SchemaGeneratorFixture.php rename to tests/Unit/Server/Capability/Discovery/SchemaGeneratorFixture.php index 613369b2..2e130af1 100644 --- a/tests/Unit/Capability/Discovery/SchemaGeneratorFixture.php +++ b/tests/Unit/Server/Capability/Discovery/SchemaGeneratorFixture.php @@ -9,10 +9,10 @@ * file that was distributed with this source code. */ -namespace Mcp\Tests\Unit\Capability\Discovery; +namespace Mcp\Tests\Unit\Server\Capability\Discovery; -use Mcp\Capability\Attribute\McpTool; -use Mcp\Capability\Attribute\Schema; +use Mcp\Server\Capability\Attribute\McpTool; +use Mcp\Server\Capability\Attribute\Schema; use Mcp\Server\ClientGateway; use Mcp\Server\RequestContext; use Mcp\Tests\Unit\Fixtures\Enum\BackedIntEnum; diff --git a/tests/Unit/Capability/Discovery/SchemaGeneratorTest.php b/tests/Unit/Server/Capability/Discovery/SchemaGeneratorTest.php similarity index 99% rename from tests/Unit/Capability/Discovery/SchemaGeneratorTest.php rename to tests/Unit/Server/Capability/Discovery/SchemaGeneratorTest.php index 32817f64..ab239747 100644 --- a/tests/Unit/Capability/Discovery/SchemaGeneratorTest.php +++ b/tests/Unit/Server/Capability/Discovery/SchemaGeneratorTest.php @@ -9,11 +9,11 @@ * file that was distributed with this source code. */ -namespace Mcp\Tests\Unit\Capability\Discovery; +namespace Mcp\Tests\Unit\Server\Capability\Discovery; -use Mcp\Capability\Discovery\DocBlockParser; -use Mcp\Capability\Discovery\SchemaGenerator; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Server\Capability\Discovery\DocBlockParser; +use Mcp\Server\Capability\Discovery\SchemaGenerator; +use Mcp\Server\Exception\InvalidArgumentException; use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\TestCase; diff --git a/tests/Unit/Capability/Discovery/SchemaGeneratorUnionTest.php b/tests/Unit/Server/Capability/Discovery/SchemaGeneratorUnionTest.php similarity index 96% rename from tests/Unit/Capability/Discovery/SchemaGeneratorUnionTest.php rename to tests/Unit/Server/Capability/Discovery/SchemaGeneratorUnionTest.php index 9a8a6cf0..6f7990bf 100644 --- a/tests/Unit/Capability/Discovery/SchemaGeneratorUnionTest.php +++ b/tests/Unit/Server/Capability/Discovery/SchemaGeneratorUnionTest.php @@ -9,11 +9,11 @@ * file that was distributed with this source code. */ -namespace Mcp\Tests\Unit\Capability\Discovery; +namespace Mcp\Tests\Unit\Server\Capability\Discovery; -use Mcp\Capability\Discovery\DocBlockParser; -use Mcp\Capability\Discovery\SchemaGenerator; -use Mcp\Capability\Discovery\SchemaValidator; +use Mcp\Server\Capability\Discovery\DocBlockParser; +use Mcp\Server\Capability\Discovery\SchemaGenerator; +use Mcp\Server\Capability\Discovery\SchemaValidator; use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\Attributes\TestDox; use PHPUnit\Framework\TestCase; diff --git a/tests/Unit/Capability/Discovery/SchemaValidatorTest.php b/tests/Unit/Server/Capability/Discovery/SchemaValidatorTest.php similarity index 99% rename from tests/Unit/Capability/Discovery/SchemaValidatorTest.php rename to tests/Unit/Server/Capability/Discovery/SchemaValidatorTest.php index 9464dcac..00db3a2c 100644 --- a/tests/Unit/Capability/Discovery/SchemaValidatorTest.php +++ b/tests/Unit/Server/Capability/Discovery/SchemaValidatorTest.php @@ -9,10 +9,10 @@ * file that was distributed with this source code. */ -namespace Mcp\Tests\Unit\Capability\Discovery; +namespace Mcp\Tests\Unit\Server\Capability\Discovery; -use Mcp\Capability\Attribute\Schema; -use Mcp\Capability\Discovery\SchemaValidator; +use Mcp\Server\Capability\Attribute\Schema; +use Mcp\Server\Capability\Discovery\SchemaValidator; use PHPUnit\Framework\TestCase; class SchemaValidatorTest extends TestCase diff --git a/tests/Unit/Capability/Discovery/UnionFixture.php b/tests/Unit/Server/Capability/Discovery/UnionFixture.php similarity index 94% rename from tests/Unit/Capability/Discovery/UnionFixture.php rename to tests/Unit/Server/Capability/Discovery/UnionFixture.php index b6d400d0..022bb319 100644 --- a/tests/Unit/Capability/Discovery/UnionFixture.php +++ b/tests/Unit/Server/Capability/Discovery/UnionFixture.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace Mcp\Tests\Unit\Capability\Discovery; +namespace Mcp\Tests\Unit\Server\Capability\Discovery; class UnionFixture { diff --git a/tests/Unit/Capability/Formatter/PromptResultFormatterTest.php b/tests/Unit/Server/Capability/Formatter/PromptResultFormatterTest.php similarity index 98% rename from tests/Unit/Capability/Formatter/PromptResultFormatterTest.php rename to tests/Unit/Server/Capability/Formatter/PromptResultFormatterTest.php index 52bb1767..75dcfdc7 100644 --- a/tests/Unit/Capability/Formatter/PromptResultFormatterTest.php +++ b/tests/Unit/Server/Capability/Formatter/PromptResultFormatterTest.php @@ -9,10 +9,8 @@ * file that was distributed with this source code. */ -namespace Mcp\Tests\Unit\Capability\Formatter; +namespace Mcp\Tests\Unit\Server\Capability\Formatter; -use Mcp\Capability\Formatter\PromptResultFormatter; -use Mcp\Exception\RuntimeException; use Mcp\Schema\Content\AudioContent; use Mcp\Schema\Content\EmbeddedResource; use Mcp\Schema\Content\ImageContent; @@ -20,6 +18,8 @@ use Mcp\Schema\Content\ResourceLink; use Mcp\Schema\Content\TextContent; use Mcp\Schema\Enum\Role; +use Mcp\Server\Capability\Formatter\PromptResultFormatter; +use Mcp\Server\Exception\RuntimeException; use PHPUnit\Framework\TestCase; class PromptResultFormatterTest extends TestCase diff --git a/tests/Unit/Capability/Formatter/ResourceResultFormatterTest.php b/tests/Unit/Server/Capability/Formatter/ResourceResultFormatterTest.php similarity index 91% rename from tests/Unit/Capability/Formatter/ResourceResultFormatterTest.php rename to tests/Unit/Server/Capability/Formatter/ResourceResultFormatterTest.php index e98e617d..515277de 100644 --- a/tests/Unit/Capability/Formatter/ResourceResultFormatterTest.php +++ b/tests/Unit/Server/Capability/Formatter/ResourceResultFormatterTest.php @@ -9,10 +9,10 @@ * file that was distributed with this source code. */ -namespace Mcp\Tests\Unit\Capability\Formatter; +namespace Mcp\Tests\Unit\Server\Capability\Formatter; -use Mcp\Capability\Formatter\ResourceResultFormatter; use Mcp\Schema\Content\TextResourceContents; +use Mcp\Server\Capability\Formatter\ResourceResultFormatter; use PHPUnit\Framework\TestCase; class ResourceResultFormatterTest extends TestCase diff --git a/tests/Unit/Capability/Formatter/ToolResultFormatterTest.php b/tests/Unit/Server/Capability/Formatter/ToolResultFormatterTest.php similarity index 94% rename from tests/Unit/Capability/Formatter/ToolResultFormatterTest.php rename to tests/Unit/Server/Capability/Formatter/ToolResultFormatterTest.php index 1c5ee7c1..eeaaa901 100644 --- a/tests/Unit/Capability/Formatter/ToolResultFormatterTest.php +++ b/tests/Unit/Server/Capability/Formatter/ToolResultFormatterTest.php @@ -9,10 +9,10 @@ * file that was distributed with this source code. */ -namespace Mcp\Tests\Unit\Capability\Formatter; +namespace Mcp\Tests\Unit\Server\Capability\Formatter; -use Mcp\Capability\Formatter\ToolResultFormatter; use Mcp\Schema\Content\TextContent; +use Mcp\Server\Capability\Formatter\ToolResultFormatter; use PHPUnit\Framework\TestCase; class ToolResultFormatterTest extends TestCase diff --git a/tests/Unit/Capability/Logger/ClientLoggerTest.php b/tests/Unit/Server/Capability/Logger/ClientLoggerTest.php similarity index 96% rename from tests/Unit/Capability/Logger/ClientLoggerTest.php rename to tests/Unit/Server/Capability/Logger/ClientLoggerTest.php index 6a443b71..61505ecf 100644 --- a/tests/Unit/Capability/Logger/ClientLoggerTest.php +++ b/tests/Unit/Server/Capability/Logger/ClientLoggerTest.php @@ -9,10 +9,10 @@ * file that was distributed with this source code. */ -namespace Mcp\Tests\Unit\Capability\Logger; +namespace Mcp\Tests\Unit\Server\Capability\Logger; -use Mcp\Capability\Logger\ClientLogger; use Mcp\Schema\Enum\LoggingLevel; +use Mcp\Server\Capability\Logger\ClientLogger; use Mcp\Server\ClientGateway; use Mcp\Server\Session\Session; use PHPUnit\Framework\TestCase; diff --git a/tests/Unit/Capability/Registry/Loader/ChainLoaderTest.php b/tests/Unit/Server/Capability/Registry/Loader/ChainLoaderTest.php similarity index 83% rename from tests/Unit/Capability/Registry/Loader/ChainLoaderTest.php rename to tests/Unit/Server/Capability/Registry/Loader/ChainLoaderTest.php index 5488818e..78351652 100644 --- a/tests/Unit/Capability/Registry/Loader/ChainLoaderTest.php +++ b/tests/Unit/Server/Capability/Registry/Loader/ChainLoaderTest.php @@ -9,12 +9,12 @@ * file that was distributed with this source code. */ -namespace Mcp\Tests\Unit\Capability\Registry\Loader; +namespace Mcp\Tests\Unit\Server\Capability\Registry\Loader; -use Mcp\Capability\Registry; -use Mcp\Capability\Registry\Loader\ChainLoader; -use Mcp\Tests\Unit\Capability\Registry\Loader\Stub\RecordingLoader; -use Mcp\Tests\Unit\Capability\Registry\Loader\Stub\ToolWriterLoader; +use Mcp\Server\Capability\Registry; +use Mcp\Server\Capability\Registry\Loader\ChainLoader; +use Mcp\Tests\Unit\Server\Capability\Registry\Loader\Stub\RecordingLoader; +use Mcp\Tests\Unit\Server\Capability\Registry\Loader\Stub\ToolWriterLoader; use PHPUnit\Framework\TestCase; class ChainLoaderTest extends TestCase diff --git a/tests/Unit/Capability/Registry/Loader/DiscoveryLoaderTest.php b/tests/Unit/Server/Capability/Registry/Loader/DiscoveryLoaderTest.php similarity index 93% rename from tests/Unit/Capability/Registry/Loader/DiscoveryLoaderTest.php rename to tests/Unit/Server/Capability/Registry/Loader/DiscoveryLoaderTest.php index dcb1d8d4..9ab9ca66 100644 --- a/tests/Unit/Capability/Registry/Loader/DiscoveryLoaderTest.php +++ b/tests/Unit/Server/Capability/Registry/Loader/DiscoveryLoaderTest.php @@ -9,25 +9,25 @@ * file that was distributed with this source code. */ -namespace Mcp\Tests\Unit\Capability\Registry\Loader; - -use Mcp\Capability\Completion\EnumCompletionProvider; -use Mcp\Capability\Completion\ListCompletionProvider; -use Mcp\Capability\Discovery\DiscoveryState; -use Mcp\Capability\Registry; -use Mcp\Capability\Registry\Loader\DiscoveryLoader; -use Mcp\Capability\Registry\PromptReference; -use Mcp\Capability\Registry\ResourceReference; -use Mcp\Capability\Registry\ResourceTemplateReference; -use Mcp\Capability\Registry\ToolReference; -use Mcp\Exception\PromptNotFoundException; -use Mcp\Exception\ResourceNotFoundException; -use Mcp\Exception\ToolNotFoundException; +namespace Mcp\Tests\Unit\Server\Capability\Registry\Loader; + use Mcp\Schema\Prompt; use Mcp\Schema\ResourceDefinition; use Mcp\Schema\ResourceTemplate; use Mcp\Schema\Tool; -use Mcp\Tests\Unit\Capability\Registry\Loader\Stub\MutableDiscoverer; +use Mcp\Server\Capability\Completion\EnumCompletionProvider; +use Mcp\Server\Capability\Completion\ListCompletionProvider; +use Mcp\Server\Capability\Discovery\DiscoveryState; +use Mcp\Server\Capability\Registry; +use Mcp\Server\Capability\Registry\Loader\DiscoveryLoader; +use Mcp\Server\Capability\Registry\PromptReference; +use Mcp\Server\Capability\Registry\ResourceReference; +use Mcp\Server\Capability\Registry\ResourceTemplateReference; +use Mcp\Server\Capability\Registry\ToolReference; +use Mcp\Server\Exception\PromptNotFoundException; +use Mcp\Server\Exception\ResourceNotFoundException; +use Mcp\Server\Exception\ToolNotFoundException; +use Mcp\Tests\Unit\Server\Capability\Registry\Loader\Stub\MutableDiscoverer; use PHPUnit\Framework\TestCase; class DiscoveryLoaderTest extends TestCase diff --git a/tests/Unit/Capability/Registry/Loader/ExplicitElementLoaderTest.php b/tests/Unit/Server/Capability/Registry/Loader/ExplicitElementLoaderTest.php similarity index 91% rename from tests/Unit/Capability/Registry/Loader/ExplicitElementLoaderTest.php rename to tests/Unit/Server/Capability/Registry/Loader/ExplicitElementLoaderTest.php index dad2de64..0d1e11d4 100644 --- a/tests/Unit/Capability/Registry/Loader/ExplicitElementLoaderTest.php +++ b/tests/Unit/Server/Capability/Registry/Loader/ExplicitElementLoaderTest.php @@ -9,23 +9,24 @@ * file that was distributed with this source code. */ -namespace Mcp\Tests\Unit\Capability\Registry\Loader; +namespace Mcp\Tests\Unit\Server\Capability\Registry\Loader; -use Mcp\Capability\Completion\ProviderInterface; -use Mcp\Capability\Registry; -use Mcp\Capability\Registry\ReferenceHandler; -use Mcp\Capability\RegistryInterface; -use Mcp\Exception\InvalidArgumentException; use Mcp\Schema\Prompt; use Mcp\Schema\ResourceDefinition; use Mcp\Schema\ResourceTemplate; use Mcp\Schema\Tool; -use Mcp\Server; +use Mcp\Server\Builder; +use Mcp\Server\Capability\Completion\ProviderInterface; +use Mcp\Server\Capability\Registry; +use Mcp\Server\Capability\Registry\ReferenceHandler; +use Mcp\Server\Capability\RegistryInterface; use Mcp\Server\ClientGateway; +use Mcp\Server\Exception\InvalidArgumentException; use Mcp\Server\Handler\PromptHandlerInterface; use Mcp\Server\Handler\ResourceHandlerInterface; use Mcp\Server\Handler\ResourceTemplateHandlerInterface; use Mcp\Server\Handler\ToolHandlerInterface; +use Mcp\Server\Server; use Mcp\Server\Session\SessionInterface; use PHPUnit\Framework\TestCase; use Symfony\Component\Uid\Uuid; @@ -55,7 +56,7 @@ public function execute(array $arguments, ClientGateway $gateway): mixed } }; - $registry = $this->buildAndGetRegistry(static fn (Server\Builder $b) => $b->add($tool, $handler)); + $registry = $this->buildAndGetRegistry(static fn (Builder $b) => $b->add($tool, $handler)); $reference = $registry->getTool('demo'); $this->assertSame('demo', $reference->tool->name); @@ -97,7 +98,7 @@ public function read(string $uri, ClientGateway $gateway): mixed } }; - $registry = $this->buildAndGetRegistry(static fn (Server\Builder $b) => $b->add($resource, $handler)); + $registry = $this->buildAndGetRegistry(static fn (Builder $b) => $b->add($resource, $handler)); $reference = $registry->getResource('config://demo', false); $this->assertSame('config://demo', $reference->resource->uri); @@ -141,7 +142,7 @@ public function read(string $uri, array $variables, ClientGateway $gateway): mix } }; - $registry = $this->buildAndGetRegistry(static fn (Server\Builder $b) => $b->add($template, $handler)); + $registry = $this->buildAndGetRegistry(static fn (Builder $b) => $b->add($template, $handler)); $reference = $registry->getResourceTemplate('config://{key}'); $this->assertSame('config://{key}', $reference->resourceTemplate->uriTemplate); @@ -184,7 +185,7 @@ public function get(array $arguments, ClientGateway $gateway): mixed } }; - $registry = $this->buildAndGetRegistry(static fn (Server\Builder $b) => $b->add($prompt, $handler)); + $registry = $this->buildAndGetRegistry(static fn (Builder $b) => $b->add($prompt, $handler)); $reference = $registry->getPrompt('demo_prompt'); $this->assertSame('demo_prompt', $reference->prompt->name); @@ -220,7 +221,7 @@ public function getCompletions(string $currentValue): array } }; - $registry = $this->buildAndGetRegistry(static fn (Server\Builder $b) => $b->add( + $registry = $this->buildAndGetRegistry(static fn (Builder $b) => $b->add( $prompt, $handler, ['name' => $provider], @@ -250,7 +251,7 @@ public function getCompletions(string $currentValue): array } }; - $registry = $this->buildAndGetRegistry(static fn (Server\Builder $b) => $b->add( + $registry = $this->buildAndGetRegistry(static fn (Builder $b) => $b->add( $template, $handler, ['key' => $provider], @@ -270,7 +271,7 @@ public function get(array $arguments, ClientGateway $gateway): mixed } }; - $registry = $this->buildAndGetRegistry(static fn (Server\Builder $b) => $b->add($prompt, $handler)); + $registry = $this->buildAndGetRegistry(static fn (Builder $b) => $b->add($prompt, $handler)); $this->assertSame([], $registry->getPrompt('no_completion')->completionProviders); } @@ -362,14 +363,14 @@ public function execute(array $arguments, ClientGateway $gateway): mixed } }; - $registry = $this->buildAndGetRegistry(static fn (Server\Builder $b) => $b->add($tool, $handler)); + $registry = $this->buildAndGetRegistry(static fn (Builder $b) => $b->add($tool, $handler)); $reference = $registry->getTool('closure_check'); $this->assertInstanceOf(\Closure::class, $reference->handler); } /** - * @param callable(Server\Builder): Server\Builder $configure + * @param callable(Builder): Builder $configure */ private function buildAndGetRegistry(callable $configure): RegistryInterface { diff --git a/tests/Unit/Capability/Registry/Loader/ReflectedElementLoaderResourceTitleTest.php b/tests/Unit/Server/Capability/Registry/Loader/ReflectedElementLoaderResourceTitleTest.php similarity index 92% rename from tests/Unit/Capability/Registry/Loader/ReflectedElementLoaderResourceTitleTest.php rename to tests/Unit/Server/Capability/Registry/Loader/ReflectedElementLoaderResourceTitleTest.php index 6dd09991..5503ce12 100644 --- a/tests/Unit/Capability/Registry/Loader/ReflectedElementLoaderResourceTitleTest.php +++ b/tests/Unit/Server/Capability/Registry/Loader/ReflectedElementLoaderResourceTitleTest.php @@ -9,10 +9,10 @@ * file that was distributed with this source code. */ -namespace Mcp\Tests\Unit\Capability\Registry\Loader; +namespace Mcp\Tests\Unit\Server\Capability\Registry\Loader; -use Mcp\Capability\Registry; -use Mcp\Capability\Registry\Loader\ReflectedElementLoader; +use Mcp\Server\Capability\Registry; +use Mcp\Server\Capability\Registry\Loader\ReflectedElementLoader; use PHPUnit\Framework\TestCase; class ReflectedElementLoaderResourceTitleTest extends TestCase diff --git a/tests/Unit/Capability/Registry/Loader/ReflectedElementLoaderToolTitleTest.php b/tests/Unit/Server/Capability/Registry/Loader/ReflectedElementLoaderToolTitleTest.php similarity index 88% rename from tests/Unit/Capability/Registry/Loader/ReflectedElementLoaderToolTitleTest.php rename to tests/Unit/Server/Capability/Registry/Loader/ReflectedElementLoaderToolTitleTest.php index 8537fcc8..6c97e57a 100644 --- a/tests/Unit/Capability/Registry/Loader/ReflectedElementLoaderToolTitleTest.php +++ b/tests/Unit/Server/Capability/Registry/Loader/ReflectedElementLoaderToolTitleTest.php @@ -9,10 +9,10 @@ * file that was distributed with this source code. */ -namespace Mcp\Tests\Unit\Capability\Registry\Loader; +namespace Mcp\Tests\Unit\Server\Capability\Registry\Loader; -use Mcp\Capability\Registry; -use Mcp\Capability\Registry\Loader\ReflectedElementLoader; +use Mcp\Server\Capability\Registry; +use Mcp\Server\Capability\Registry\Loader\ReflectedElementLoader; use PHPUnit\Framework\TestCase; class ReflectedElementLoaderToolTitleTest extends TestCase diff --git a/tests/Unit/Capability/Registry/Loader/Stub/MutableDiscoverer.php b/tests/Unit/Server/Capability/Registry/Loader/Stub/MutableDiscoverer.php similarity index 77% rename from tests/Unit/Capability/Registry/Loader/Stub/MutableDiscoverer.php rename to tests/Unit/Server/Capability/Registry/Loader/Stub/MutableDiscoverer.php index 0b5b298b..16812a32 100644 --- a/tests/Unit/Capability/Registry/Loader/Stub/MutableDiscoverer.php +++ b/tests/Unit/Server/Capability/Registry/Loader/Stub/MutableDiscoverer.php @@ -9,10 +9,10 @@ * file that was distributed with this source code. */ -namespace Mcp\Tests\Unit\Capability\Registry\Loader\Stub; +namespace Mcp\Tests\Unit\Server\Capability\Registry\Loader\Stub; -use Mcp\Capability\Discovery\DiscovererInterface; -use Mcp\Capability\Discovery\DiscoveryState; +use Mcp\Server\Capability\Discovery\DiscovererInterface; +use Mcp\Server\Capability\Discovery\DiscoveryState; final class MutableDiscoverer implements DiscovererInterface { diff --git a/tests/Unit/Capability/Registry/Loader/Stub/RecordingLoader.php b/tests/Unit/Server/Capability/Registry/Loader/Stub/RecordingLoader.php similarity index 77% rename from tests/Unit/Capability/Registry/Loader/Stub/RecordingLoader.php rename to tests/Unit/Server/Capability/Registry/Loader/Stub/RecordingLoader.php index a1eccae1..21fbeb4f 100644 --- a/tests/Unit/Capability/Registry/Loader/Stub/RecordingLoader.php +++ b/tests/Unit/Server/Capability/Registry/Loader/Stub/RecordingLoader.php @@ -9,10 +9,10 @@ * file that was distributed with this source code. */ -namespace Mcp\Tests\Unit\Capability\Registry\Loader\Stub; +namespace Mcp\Tests\Unit\Server\Capability\Registry\Loader\Stub; -use Mcp\Capability\Registry\Loader\LoaderInterface; -use Mcp\Capability\RegistryInterface; +use Mcp\Server\Capability\Registry\Loader\LoaderInterface; +use Mcp\Server\Capability\RegistryInterface; final class RecordingLoader implements LoaderInterface { diff --git a/tests/Unit/Capability/Registry/Loader/Stub/ToolWriterLoader.php b/tests/Unit/Server/Capability/Registry/Loader/Stub/ToolWriterLoader.php similarity index 83% rename from tests/Unit/Capability/Registry/Loader/Stub/ToolWriterLoader.php rename to tests/Unit/Server/Capability/Registry/Loader/Stub/ToolWriterLoader.php index d8ae3f13..ee204963 100644 --- a/tests/Unit/Capability/Registry/Loader/Stub/ToolWriterLoader.php +++ b/tests/Unit/Server/Capability/Registry/Loader/Stub/ToolWriterLoader.php @@ -9,11 +9,11 @@ * file that was distributed with this source code. */ -namespace Mcp\Tests\Unit\Capability\Registry\Loader\Stub; +namespace Mcp\Tests\Unit\Server\Capability\Registry\Loader\Stub; -use Mcp\Capability\Registry\Loader\LoaderInterface; -use Mcp\Capability\RegistryInterface; use Mcp\Schema\Tool; +use Mcp\Server\Capability\Registry\Loader\LoaderInterface; +use Mcp\Server\Capability\RegistryInterface; final class ToolWriterLoader implements LoaderInterface { diff --git a/tests/Unit/Capability/Registry/ReferenceHandlerTest.php b/tests/Unit/Server/Capability/Registry/ReferenceHandlerTest.php similarity index 97% rename from tests/Unit/Capability/Registry/ReferenceHandlerTest.php rename to tests/Unit/Server/Capability/Registry/ReferenceHandlerTest.php index 2952c811..940b7d60 100644 --- a/tests/Unit/Capability/Registry/ReferenceHandlerTest.php +++ b/tests/Unit/Server/Capability/Registry/ReferenceHandlerTest.php @@ -9,13 +9,13 @@ * file that was distributed with this source code. */ -namespace Mcp\Tests\Unit\Capability\Registry; +namespace Mcp\Tests\Unit\Server\Capability\Registry; -use Mcp\Capability\Registry\ElementReference; -use Mcp\Capability\Registry\ReferenceHandler; -use Mcp\Exception\InvalidArgumentException; -use Mcp\Exception\RegistryException; +use Mcp\Server\Capability\Registry\ElementReference; +use Mcp\Server\Capability\Registry\ReferenceHandler; use Mcp\Server\ClientGateway; +use Mcp\Server\Exception\InvalidArgumentException; +use Mcp\Server\Exception\RegistryException; use Mcp\Server\Handler\ResourceHandlerInterface; use Mcp\Server\Handler\ToolHandlerInterface; use Mcp\Server\Session\SessionInterface; diff --git a/tests/Unit/Capability/RegistryTest.php b/tests/Unit/Server/Capability/RegistryTest.php similarity index 98% rename from tests/Unit/Capability/RegistryTest.php rename to tests/Unit/Server/Capability/RegistryTest.php index 92782ab9..81850b93 100644 --- a/tests/Unit/Capability/RegistryTest.php +++ b/tests/Unit/Server/Capability/RegistryTest.php @@ -9,20 +9,8 @@ * file that was distributed with this source code. */ -namespace Mcp\Tests\Unit\Capability; - -use Mcp\Capability\Completion\EnumCompletionProvider; -use Mcp\Capability\Registry; -use Mcp\Capability\Registry\Loader\LoaderInterface; -use Mcp\Capability\Registry\PromptReference; -use Mcp\Capability\Registry\ResourceReference; -use Mcp\Capability\Registry\ResourceTemplateReference; -use Mcp\Capability\Registry\ToolReference; -use Mcp\Capability\RegistryInterface; -use Mcp\Event\ToolListChangedEvent; -use Mcp\Exception\PromptNotFoundException; -use Mcp\Exception\ResourceNotFoundException; -use Mcp\Exception\ToolNotFoundException; +namespace Mcp\Tests\Unit\Server\Capability; + use Mcp\Schema\Content\ResourceLink; use Mcp\Schema\Content\TextContent; use Mcp\Schema\Enum\ProtocolVersion; @@ -30,6 +18,18 @@ use Mcp\Schema\ResourceDefinition; use Mcp\Schema\ResourceTemplate; use Mcp\Schema\Tool; +use Mcp\Server\Capability\Completion\EnumCompletionProvider; +use Mcp\Server\Capability\Registry; +use Mcp\Server\Capability\Registry\Loader\LoaderInterface; +use Mcp\Server\Capability\Registry\PromptReference; +use Mcp\Server\Capability\Registry\ResourceReference; +use Mcp\Server\Capability\Registry\ResourceTemplateReference; +use Mcp\Server\Capability\Registry\ToolReference; +use Mcp\Server\Capability\RegistryInterface; +use Mcp\Server\Event\ToolListChangedEvent; +use Mcp\Server\Exception\PromptNotFoundException; +use Mcp\Server\Exception\ResourceNotFoundException; +use Mcp\Server\Exception\ToolNotFoundException; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Psr\EventDispatcher\EventDispatcherInterface; diff --git a/tests/Unit/Capability/Tool/NameValidatorTest.php b/tests/Unit/Server/Capability/Tool/NameValidatorTest.php similarity index 93% rename from tests/Unit/Capability/Tool/NameValidatorTest.php rename to tests/Unit/Server/Capability/Tool/NameValidatorTest.php index 269be890..964ceb71 100644 --- a/tests/Unit/Capability/Tool/NameValidatorTest.php +++ b/tests/Unit/Server/Capability/Tool/NameValidatorTest.php @@ -9,9 +9,9 @@ * file that was distributed with this source code. */ -namespace Mcp\Tests\Unit\Capability\Tool; +namespace Mcp\Tests\Unit\Server\Capability\Tool; -use Mcp\Capability\Tool\NameValidator; +use Mcp\Server\Capability\Tool\NameValidator; use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\TestCase; diff --git a/tests/Unit/Server/ClientGatewayTest.php b/tests/Unit/Server/ClientGatewayTest.php index 2b70fd6e..9ab560e3 100644 --- a/tests/Unit/Server/ClientGatewayTest.php +++ b/tests/Unit/Server/ClientGatewayTest.php @@ -11,8 +11,6 @@ namespace Mcp\Tests\Unit\Server; -use Mcp\Exception\ClientException; -use Mcp\Exception\InvalidArgumentException; use Mcp\Schema\ClientCapabilities; use Mcp\Schema\Elicitation\ElicitationSchema; use Mcp\Schema\Elicitation\StringSchemaDefinition; @@ -27,6 +25,8 @@ use Mcp\Schema\Result\ElicitResult; use Mcp\Schema\Result\ListRootsResult; use Mcp\Server\ClientGateway; +use Mcp\Server\Exception\ClientException; +use Mcp\Server\Exception\InvalidArgumentException; use Mcp\Server\Session\SessionInterface; use PHPUnit\Framework\TestCase; use Symfony\Component\Uid\Uuid; diff --git a/tests/Unit/Server/Handler/Request/CallToolHandlerTest.php b/tests/Unit/Server/Handler/Request/CallToolHandlerTest.php index 308c9809..50e6fca9 100644 --- a/tests/Unit/Server/Handler/Request/CallToolHandlerTest.php +++ b/tests/Unit/Server/Handler/Request/CallToolHandlerTest.php @@ -11,17 +11,17 @@ namespace Mcp\Tests\Unit\Server\Handler\Request; -use Mcp\Capability\Registry\ReferenceHandlerInterface; -use Mcp\Capability\Registry\ToolReference; -use Mcp\Capability\RegistryInterface; -use Mcp\Exception\ToolCallException; -use Mcp\Exception\ToolNotFoundException; use Mcp\Schema\Content\TextContent; use Mcp\Schema\JsonRpc\Error; use Mcp\Schema\JsonRpc\Response; use Mcp\Schema\Request\CallToolRequest; use Mcp\Schema\Result\CallToolResult; use Mcp\Schema\Tool; +use Mcp\Server\Capability\Registry\ReferenceHandlerInterface; +use Mcp\Server\Capability\Registry\ToolReference; +use Mcp\Server\Capability\RegistryInterface; +use Mcp\Server\Exception\ToolCallException; +use Mcp\Server\Exception\ToolNotFoundException; use Mcp\Server\Handler\Request\CallToolHandler; use Mcp\Server\Session\SessionInterface; use PHPUnit\Framework\MockObject\MockObject; diff --git a/tests/Unit/Server/Handler/Request/CompletionCompleteHandlerTest.php b/tests/Unit/Server/Handler/Request/CompletionCompleteHandlerTest.php index b35347a9..69f92374 100644 --- a/tests/Unit/Server/Handler/Request/CompletionCompleteHandlerTest.php +++ b/tests/Unit/Server/Handler/Request/CompletionCompleteHandlerTest.php @@ -11,18 +11,18 @@ namespace Mcp\Tests\Unit\Server\Handler\Request; -use Mcp\Capability\Completion\ProviderInterface; -use Mcp\Capability\Registry\ResourceReference; -use Mcp\Capability\Registry\ResourceTemplateReference; -use Mcp\Capability\RegistryInterface; use Mcp\Schema\JsonRpc\Error; use Mcp\Schema\JsonRpc\Response; use Mcp\Schema\Request\CompletionCompleteRequest; use Mcp\Schema\ResourceTemplate; use Mcp\Schema\Result\CompletionCompleteResult; +use Mcp\Server\Capability\Completion\ProviderInterface; +use Mcp\Server\Capability\Registry\ResourceReference; +use Mcp\Server\Capability\Registry\ResourceTemplateReference; +use Mcp\Server\Capability\RegistryInterface; use Mcp\Server\Handler\Request\CompletionCompleteHandler; use Mcp\Server\Session\SessionInterface; -use Mcp\Tests\Unit\Capability\Attribute\CompletionProviderFixture; +use Mcp\Tests\Unit\Server\Capability\Attribute\CompletionProviderFixture; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Psr\Log\LoggerInterface; diff --git a/tests/Unit/Server/Handler/Request/GetPromptHandlerTest.php b/tests/Unit/Server/Handler/Request/GetPromptHandlerTest.php index 501fe1af..46562ae3 100644 --- a/tests/Unit/Server/Handler/Request/GetPromptHandlerTest.php +++ b/tests/Unit/Server/Handler/Request/GetPromptHandlerTest.php @@ -11,11 +11,6 @@ namespace Mcp\Tests\Unit\Server\Handler\Request; -use Mcp\Capability\Registry\PromptReference; -use Mcp\Capability\Registry\ReferenceHandlerInterface; -use Mcp\Capability\RegistryInterface; -use Mcp\Exception\PromptGetException; -use Mcp\Exception\PromptNotFoundException; use Mcp\Schema\Content\PromptMessage; use Mcp\Schema\Content\TextContent; use Mcp\Schema\Enum\Role; @@ -23,6 +18,11 @@ use Mcp\Schema\JsonRpc\Response; use Mcp\Schema\Request\GetPromptRequest; use Mcp\Schema\Result\GetPromptResult; +use Mcp\Server\Capability\Registry\PromptReference; +use Mcp\Server\Capability\Registry\ReferenceHandlerInterface; +use Mcp\Server\Capability\RegistryInterface; +use Mcp\Server\Exception\PromptGetException; +use Mcp\Server\Exception\PromptNotFoundException; use Mcp\Server\Handler\Request\GetPromptHandler; use Mcp\Server\Session\SessionInterface; use PHPUnit\Framework\MockObject\MockObject; diff --git a/tests/Unit/Server/Handler/Request/ListPromptsHandlerTest.php b/tests/Unit/Server/Handler/Request/ListPromptsHandlerTest.php index e2fb610d..2cbec612 100644 --- a/tests/Unit/Server/Handler/Request/ListPromptsHandlerTest.php +++ b/tests/Unit/Server/Handler/Request/ListPromptsHandlerTest.php @@ -11,11 +11,11 @@ namespace Mcp\Tests\Unit\Server\Handler\Request; -use Mcp\Capability\Registry; -use Mcp\Exception\InvalidCursorException; use Mcp\Schema\Prompt; use Mcp\Schema\Request\ListPromptsRequest; use Mcp\Schema\Result\ListPromptsResult; +use Mcp\Server\Capability\Registry; +use Mcp\Server\Exception\InvalidCursorException; use Mcp\Server\Handler\Request\ListPromptsHandler; use Mcp\Server\Session\InMemorySessionStore; use Mcp\Server\Session\Session; diff --git a/tests/Unit/Server/Handler/Request/ListResourceTemplatesHandlerTest.php b/tests/Unit/Server/Handler/Request/ListResourceTemplatesHandlerTest.php index ede74cbc..397aa329 100644 --- a/tests/Unit/Server/Handler/Request/ListResourceTemplatesHandlerTest.php +++ b/tests/Unit/Server/Handler/Request/ListResourceTemplatesHandlerTest.php @@ -11,11 +11,11 @@ namespace Mcp\Tests\Unit\Server\Handler\Request; -use Mcp\Capability\Registry; -use Mcp\Exception\InvalidCursorException; use Mcp\Schema\Request\ListResourceTemplatesRequest; use Mcp\Schema\ResourceTemplate; use Mcp\Schema\Result\ListResourceTemplatesResult; +use Mcp\Server\Capability\Registry; +use Mcp\Server\Exception\InvalidCursorException; use Mcp\Server\Handler\Request\ListResourceTemplatesHandler; use Mcp\Server\Session\InMemorySessionStore; use Mcp\Server\Session\Session; diff --git a/tests/Unit/Server/Handler/Request/ListResourcesHandlerTest.php b/tests/Unit/Server/Handler/Request/ListResourcesHandlerTest.php index 3e385fef..bee581e0 100644 --- a/tests/Unit/Server/Handler/Request/ListResourcesHandlerTest.php +++ b/tests/Unit/Server/Handler/Request/ListResourcesHandlerTest.php @@ -11,11 +11,11 @@ namespace Mcp\Tests\Unit\Server\Handler\Request; -use Mcp\Capability\Registry; -use Mcp\Exception\InvalidCursorException; use Mcp\Schema\Request\ListResourcesRequest; use Mcp\Schema\ResourceDefinition; use Mcp\Schema\Result\ListResourcesResult; +use Mcp\Server\Capability\Registry; +use Mcp\Server\Exception\InvalidCursorException; use Mcp\Server\Handler\Request\ListResourcesHandler; use Mcp\Server\Session\InMemorySessionStore; use Mcp\Server\Session\Session; diff --git a/tests/Unit/Server/Handler/Request/ListToolsHandlerTest.php b/tests/Unit/Server/Handler/Request/ListToolsHandlerTest.php index b97185ad..ebc588e9 100644 --- a/tests/Unit/Server/Handler/Request/ListToolsHandlerTest.php +++ b/tests/Unit/Server/Handler/Request/ListToolsHandlerTest.php @@ -11,11 +11,11 @@ namespace Mcp\Tests\Unit\Server\Handler\Request; -use Mcp\Capability\Registry; -use Mcp\Exception\InvalidCursorException; use Mcp\Schema\Request\ListToolsRequest; use Mcp\Schema\Result\ListToolsResult; use Mcp\Schema\Tool; +use Mcp\Server\Capability\Registry; +use Mcp\Server\Exception\InvalidCursorException; use Mcp\Server\Handler\Request\ListToolsHandler; use Mcp\Server\Session\InMemorySessionStore; use Mcp\Server\Session\Session; diff --git a/tests/Unit/Server/Handler/Request/ReadResourceHandlerTest.php b/tests/Unit/Server/Handler/Request/ReadResourceHandlerTest.php index efdc9142..70a625f6 100644 --- a/tests/Unit/Server/Handler/Request/ReadResourceHandlerTest.php +++ b/tests/Unit/Server/Handler/Request/ReadResourceHandlerTest.php @@ -11,11 +11,6 @@ namespace Mcp\Tests\Unit\Server\Handler\Request; -use Mcp\Capability\Registry\ReferenceHandlerInterface; -use Mcp\Capability\Registry\ResourceReference; -use Mcp\Capability\RegistryInterface; -use Mcp\Exception\ResourceNotFoundException; -use Mcp\Exception\ResourceReadException; use Mcp\Schema\Content\BlobResourceContents; use Mcp\Schema\Content\TextResourceContents; use Mcp\Schema\JsonRpc\Error; @@ -23,6 +18,11 @@ use Mcp\Schema\Request\ReadResourceRequest; use Mcp\Schema\ResourceDefinition; use Mcp\Schema\Result\ReadResourceResult; +use Mcp\Server\Capability\Registry\ReferenceHandlerInterface; +use Mcp\Server\Capability\Registry\ResourceReference; +use Mcp\Server\Capability\RegistryInterface; +use Mcp\Server\Exception\ResourceNotFoundException; +use Mcp\Server\Exception\ResourceReadException; use Mcp\Server\Handler\Request\ReadResourceHandler; use Mcp\Server\Session\SessionInterface; use PHPUnit\Framework\MockObject\MockObject; diff --git a/tests/Unit/Server/Handler/Request/ResourceSubscribeHandlerTest.php b/tests/Unit/Server/Handler/Request/ResourceSubscribeHandlerTest.php index d16519ec..8d4fba1d 100644 --- a/tests/Unit/Server/Handler/Request/ResourceSubscribeHandlerTest.php +++ b/tests/Unit/Server/Handler/Request/ResourceSubscribeHandlerTest.php @@ -11,12 +11,12 @@ namespace Mcp\Tests\Unit\Server\Handler\Request; -use Mcp\Capability\RegistryInterface; -use Mcp\Exception\ResourceNotFoundException; use Mcp\Schema\JsonRpc\Error; use Mcp\Schema\JsonRpc\Response; use Mcp\Schema\Request\ResourceSubscribeRequest; use Mcp\Schema\Result\EmptyResult; +use Mcp\Server\Capability\RegistryInterface; +use Mcp\Server\Exception\ResourceNotFoundException; use Mcp\Server\Handler\Request\ResourceSubscribeHandler; use Mcp\Server\Resource\SubscriptionManagerInterface; use Mcp\Server\Session\SessionInterface; @@ -58,7 +58,7 @@ public function testHandleSuccessfulSubscribe(): void ->expects($this->once()) ->method('getResource') ->with($uri) - ->willReturn($this->createMock(\Mcp\Capability\Registry\ResourceReference::class)); + ->willReturn($this->createMock(\Mcp\Server\Capability\Registry\ResourceReference::class)); $this->subscriptionManager ->expects($this->once()) diff --git a/tests/Unit/Server/Handler/Request/ResourceSubscribeTest.php b/tests/Unit/Server/Handler/Request/ResourceSubscribeTest.php index b7d491b5..5145a7b3 100644 --- a/tests/Unit/Server/Handler/Request/ResourceSubscribeTest.php +++ b/tests/Unit/Server/Handler/Request/ResourceSubscribeTest.php @@ -11,15 +11,15 @@ namespace Mcp\Tests\Unit\Server\Handler\Request; -use Mcp\Capability\Registry\ResourceReference; -use Mcp\Capability\RegistryInterface; -use Mcp\Exception\InvalidArgumentException; -use Mcp\Exception\ResourceNotFoundException; +use Mcp\Schema\Exception\InvalidArgumentException; use Mcp\Schema\JsonRpc\Error; use Mcp\Schema\JsonRpc\Response; use Mcp\Schema\Request\ResourceSubscribeRequest; use Mcp\Schema\ResourceDefinition; use Mcp\Schema\Result\EmptyResult; +use Mcp\Server\Capability\Registry\ResourceReference; +use Mcp\Server\Capability\RegistryInterface; +use Mcp\Server\Exception\ResourceNotFoundException; use Mcp\Server\Handler\Request\ResourceSubscribeHandler; use Mcp\Server\Resource\SubscriptionManagerInterface; use Mcp\Server\Session\SessionInterface; diff --git a/tests/Unit/Server/Handler/Request/ResourceUnsubscribeHandlerTest.php b/tests/Unit/Server/Handler/Request/ResourceUnsubscribeHandlerTest.php index daa82f52..040e7703 100644 --- a/tests/Unit/Server/Handler/Request/ResourceUnsubscribeHandlerTest.php +++ b/tests/Unit/Server/Handler/Request/ResourceUnsubscribeHandlerTest.php @@ -11,12 +11,12 @@ namespace Mcp\Tests\Unit\Server\Handler\Request; -use Mcp\Capability\RegistryInterface; -use Mcp\Exception\ResourceNotFoundException; use Mcp\Schema\JsonRpc\Error; use Mcp\Schema\JsonRpc\Response; use Mcp\Schema\Request\ResourceUnsubscribeRequest; use Mcp\Schema\Result\EmptyResult; +use Mcp\Server\Capability\RegistryInterface; +use Mcp\Server\Exception\ResourceNotFoundException; use Mcp\Server\Handler\Request\ResourceUnsubscribeHandler; use Mcp\Server\Resource\SubscriptionManagerInterface; use Mcp\Server\Session\SessionInterface; @@ -58,7 +58,7 @@ public function testHandleSuccessfulUnsubscribe(): void ->expects($this->once()) ->method('getResource') ->with($uri) - ->willReturn($this->createMock(\Mcp\Capability\Registry\ResourceReference::class)); + ->willReturn($this->createMock(\Mcp\Server\Capability\Registry\ResourceReference::class)); $this->subscriptionManager ->expects($this->once()) diff --git a/tests/Unit/Server/Handler/Request/ResourceUnsubscribeTest.php b/tests/Unit/Server/Handler/Request/ResourceUnsubscribeTest.php index 5586d055..5a0c50b8 100644 --- a/tests/Unit/Server/Handler/Request/ResourceUnsubscribeTest.php +++ b/tests/Unit/Server/Handler/Request/ResourceUnsubscribeTest.php @@ -11,15 +11,15 @@ namespace Mcp\Tests\Unit\Server\Handler\Request; -use Mcp\Capability\Registry\ResourceReference; -use Mcp\Capability\RegistryInterface; -use Mcp\Exception\InvalidArgumentException; -use Mcp\Exception\ResourceNotFoundException; +use Mcp\Schema\Exception\InvalidArgumentException; use Mcp\Schema\JsonRpc\Error; use Mcp\Schema\JsonRpc\Response; use Mcp\Schema\Request\ResourceUnsubscribeRequest; use Mcp\Schema\ResourceDefinition; use Mcp\Schema\Result\EmptyResult; +use Mcp\Server\Capability\Registry\ResourceReference; +use Mcp\Server\Capability\RegistryInterface; +use Mcp\Server\Exception\ResourceNotFoundException; use Mcp\Server\Handler\Request\ResourceUnsubscribeHandler; use Mcp\Server\Resource\SubscriptionManagerInterface; use Mcp\Server\Session\SessionInterface; diff --git a/tests/Unit/Server/ProtocolTest.php b/tests/Unit/Server/ProtocolTest.php index 997c39d0..d23c5c65 100644 --- a/tests/Unit/Server/ProtocolTest.php +++ b/tests/Unit/Server/ProtocolTest.php @@ -11,17 +11,17 @@ namespace Mcp\Tests\Unit\Server; -use Mcp\Event\ErrorEvent; -use Mcp\Event\NotificationEvent; -use Mcp\Event\RequestEvent; -use Mcp\Event\ResponseEvent; -use Mcp\JsonRpc\MessageFactory; use Mcp\Schema\Enum\LoggingLevel; use Mcp\Schema\JsonRpc\Error; use Mcp\Schema\JsonRpc\Response; +use Mcp\Schema\MessageFactory; use Mcp\Schema\Notification\LoggingMessageNotification; use Mcp\Schema\Request\CallToolRequest; use Mcp\Schema\Request\PingRequest; +use Mcp\Server\Event\ErrorEvent; +use Mcp\Server\Event\NotificationEvent; +use Mcp\Server\Event\RequestEvent; +use Mcp\Server\Event\ResponseEvent; use Mcp\Server\Handler\Notification\NotificationHandlerInterface; use Mcp\Server\Handler\Request\RequestHandlerInterface; use Mcp\Server\Protocol; diff --git a/tests/Unit/ServerTest.php b/tests/Unit/Server/ServerTest.php similarity index 98% rename from tests/Unit/ServerTest.php rename to tests/Unit/Server/ServerTest.php index 373af4a3..5390b138 100644 --- a/tests/Unit/ServerTest.php +++ b/tests/Unit/Server/ServerTest.php @@ -9,11 +9,11 @@ * file that was distributed with this source code. */ -namespace Mcp\Tests\Unit; +namespace Mcp\Tests\Unit\Server; -use Mcp\Server; use Mcp\Server\Builder; use Mcp\Server\Protocol; +use Mcp\Server\Server; use Mcp\Server\Transport\TransportInterface; use PHPUnit\Framework\Attributes\TestDox; use PHPUnit\Framework\MockObject\MockObject; diff --git a/tests/Unit/Server/Session/FileSessionStoreTest.php b/tests/Unit/Server/Session/FileSessionStoreTest.php index a2b8729c..c9401e12 100644 --- a/tests/Unit/Server/Session/FileSessionStoreTest.php +++ b/tests/Unit/Server/Session/FileSessionStoreTest.php @@ -11,8 +11,8 @@ namespace Mcp\Tests\Unit\Server\Session; -use Mcp\Exception\ExceptionInterface; -use Mcp\Exception\RuntimeException; +use Mcp\Server\Exception\ExceptionInterface; +use Mcp\Server\Exception\RuntimeException; use Mcp\Server\Session\FileSessionStore; use PHPUnit\Framework\Attributes\TestDox; use PHPUnit\Framework\TestCase; diff --git a/tests/Unit/Server/Session/SessionManagerTest.php b/tests/Unit/Server/Session/SessionManagerTest.php index e145292b..c46e8ede 100644 --- a/tests/Unit/Server/Session/SessionManagerTest.php +++ b/tests/Unit/Server/Session/SessionManagerTest.php @@ -11,7 +11,7 @@ namespace Mcp\Tests\Unit\Server\Session; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Server\Exception\InvalidArgumentException; use Mcp\Server\Session\InMemorySessionStore; use Mcp\Server\Session\SessionManager; use PHPUnit\Framework\TestCase; diff --git a/tests/Unit/Server/Stateless/ElicitationReplayTest.php b/tests/Unit/Server/Stateless/ElicitationReplayTest.php index 83cc710f..668aae47 100644 --- a/tests/Unit/Server/Stateless/ElicitationReplayTest.php +++ b/tests/Unit/Server/Stateless/ElicitationReplayTest.php @@ -11,11 +11,11 @@ namespace Mcp\Tests\Unit\Server\Stateless; -use Mcp\Exception\LogicException; use Mcp\Schema\Elicitation\ElicitationSchema; use Mcp\Schema\Elicitation\StringSchemaDefinition; use Mcp\Schema\Enum\ElicitationMode; use Mcp\Schema\Request\ElicitRequest; +use Mcp\Server\Exception\LogicException; use Mcp\Server\Stateless\ElicitationReplay; use Mcp\Server\Stateless\InputContext; use Mcp\Server\Stateless\RequestStateCodec; diff --git a/tests/Unit/Server/Stateless/RequestStateCodecTest.php b/tests/Unit/Server/Stateless/RequestStateCodecTest.php index 6b84b8f9..165d8173 100644 --- a/tests/Unit/Server/Stateless/RequestStateCodecTest.php +++ b/tests/Unit/Server/Stateless/RequestStateCodecTest.php @@ -11,8 +11,8 @@ namespace Mcp\Tests\Unit\Server\Stateless; -use Mcp\Exception\InvalidArgumentException; -use Mcp\Exception\RequestStateException; +use Mcp\Server\Exception\InvalidArgumentException; +use Mcp\Server\Exception\RequestStateException; use Mcp\Server\Stateless\RequestStateCodec; use PHPUnit\Framework\Attributes\TestDox; use PHPUnit\Framework\TestCase; diff --git a/tests/Unit/Server/Stateless/StandardHeaderValidatorTest.php b/tests/Unit/Server/Stateless/StandardHeaderValidatorTest.php index 43b4cc0f..25aa12f8 100644 --- a/tests/Unit/Server/Stateless/StandardHeaderValidatorTest.php +++ b/tests/Unit/Server/Stateless/StandardHeaderValidatorTest.php @@ -11,9 +11,9 @@ namespace Mcp\Tests\Unit\Server\Stateless; -use Mcp\Capability\Registry; -use Mcp\Capability\RegistryInterface; use Mcp\Schema\Tool; +use Mcp\Server\Capability\Registry; +use Mcp\Server\Capability\RegistryInterface; use Mcp\Server\Stateless\StandardHeaderValidator; use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\Attributes\TestDox; diff --git a/tests/Unit/Server/Stateless/StatelessProtocolTest.php b/tests/Unit/Server/Stateless/StatelessProtocolTest.php index 62c7eb79..087bde3d 100644 --- a/tests/Unit/Server/Stateless/StatelessProtocolTest.php +++ b/tests/Unit/Server/Stateless/StatelessProtocolTest.php @@ -11,7 +11,6 @@ namespace Mcp\Tests\Unit\Server\Stateless; -use Mcp\Exception\MissingRequiredClientCapabilityException; use Mcp\Schema\ClientCapabilities; use Mcp\Schema\Content\TextResourceContents; use Mcp\Schema\Elicitation\ElicitationSchema; @@ -25,12 +24,13 @@ use Mcp\Schema\Notification\ToolListChangedNotification; use Mcp\Schema\Request\ElicitRequest; use Mcp\Schema\Request\ListRootsRequest; +use Mcp\Schema\RequestMeta; use Mcp\Schema\Result\InputRequiredResult; use Mcp\Schema\Result\ReadResourceResult; use Mcp\Schema\ServerCapabilities; -use Mcp\Server; +use Mcp\Server\Exception\MissingRequiredClientCapabilityException; use Mcp\Server\RequestContext; -use Mcp\Server\Stateless\RequestMeta; +use Mcp\Server\Server; use Mcp\Server\Stateless\StatelessProtocol; use Mcp\Server\Stateless\StatelessResult; use Mcp\Server\Subscription\InMemoryNotificationBus; diff --git a/tests/Unit/Server/Subscription/NotificationBusTest.php b/tests/Unit/Server/Subscription/NotificationBusTest.php index 7c16200d..21a969fd 100644 --- a/tests/Unit/Server/Subscription/NotificationBusTest.php +++ b/tests/Unit/Server/Subscription/NotificationBusTest.php @@ -11,11 +11,11 @@ namespace Mcp\Tests\Unit\Server\Subscription; -use Mcp\Event\ToolListChangedEvent; -use Mcp\Exception\InvalidArgumentException; use Mcp\Schema\Notification\PromptListChangedNotification; use Mcp\Schema\Notification\ResourceUpdatedNotification; use Mcp\Schema\Notification\ToolListChangedNotification; +use Mcp\Server\Event\ToolListChangedEvent; +use Mcp\Server\Exception\InvalidArgumentException; use Mcp\Server\Subscription\InMemoryNotificationBus; use Mcp\Server\Subscription\NotificationBusInterface; use Mcp\Server\Subscription\Psr16NotificationBus; diff --git a/tests/Unit/Server/Transport/DualEraRoutingTest.php b/tests/Unit/Server/Transport/DualEraRoutingTest.php index d73d94b4..ab6e18bf 100644 --- a/tests/Unit/Server/Transport/DualEraRoutingTest.php +++ b/tests/Unit/Server/Transport/DualEraRoutingTest.php @@ -12,8 +12,8 @@ namespace Mcp\Tests\Unit\Server\Transport; use Mcp\Schema\Enum\ProtocolVersion; -use Mcp\Server; -use Mcp\Server\Stateless\RequestMeta; +use Mcp\Schema\RequestMeta; +use Mcp\Server\Server; use Mcp\Server\Transport\StreamableHttpTransport; use Nyholm\Psr7\Factory\Psr17Factory; use PHPUnit\Framework\Attributes\TestDox; diff --git a/tests/Unit/Server/Transport/Http/Middleware/AuthorizationMiddlewareTest.php b/tests/Unit/Server/Transport/Http/Middleware/AuthorizationMiddlewareTest.php index bd05af13..452ddd87 100644 --- a/tests/Unit/Server/Transport/Http/Middleware/AuthorizationMiddlewareTest.php +++ b/tests/Unit/Server/Transport/Http/Middleware/AuthorizationMiddlewareTest.php @@ -11,7 +11,7 @@ namespace Mcp\Tests\Unit\Server\Transport\Http\Middleware; -use Mcp\Exception\RuntimeException; +use Mcp\Server\Exception\RuntimeException; use Mcp\Server\Transport\Http\Middleware\AuthorizationMiddleware; use Mcp\Server\Transport\Http\OAuth\AuthorizationResult; use Mcp\Server\Transport\Http\OAuth\AuthorizationTokenValidatorInterface; diff --git a/tests/Unit/Server/Transport/Http/Middleware/ClientRegistrationMiddlewareTest.php b/tests/Unit/Server/Transport/Http/Middleware/ClientRegistrationMiddlewareTest.php index 56364003..27611395 100644 --- a/tests/Unit/Server/Transport/Http/Middleware/ClientRegistrationMiddlewareTest.php +++ b/tests/Unit/Server/Transport/Http/Middleware/ClientRegistrationMiddlewareTest.php @@ -11,8 +11,8 @@ namespace Mcp\Tests\Unit\Server\Transport\Http\Middleware; -use Mcp\Exception\ClientRegistrationException; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Server\Exception\ClientRegistrationException; +use Mcp\Server\Exception\InvalidArgumentException; use Mcp\Server\Transport\Http\Middleware\ClientRegistrationMiddleware; use Mcp\Server\Transport\Http\OAuth\ClientRegistrarInterface; use Nyholm\Psr7\Factory\Psr17Factory; diff --git a/tests/Unit/Server/Transport/Http/Middleware/CorsMiddlewareTest.php b/tests/Unit/Server/Transport/Http/Middleware/CorsMiddlewareTest.php index c38353f8..c931ab8d 100644 --- a/tests/Unit/Server/Transport/Http/Middleware/CorsMiddlewareTest.php +++ b/tests/Unit/Server/Transport/Http/Middleware/CorsMiddlewareTest.php @@ -11,7 +11,7 @@ namespace Mcp\Tests\Unit\Server\Transport\Http\Middleware; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Server\Exception\InvalidArgumentException; use Mcp\Server\Transport\Http\Middleware\CorsMiddleware; use PHPUnit\Framework\Attributes\TestDox; use Psr\Http\Message\ServerRequestInterface; diff --git a/tests/Unit/Server/Transport/Http/Middleware/ProtectedResourceMetadataMiddlewareTest.php b/tests/Unit/Server/Transport/Http/Middleware/ProtectedResourceMetadataMiddlewareTest.php index 66e57e04..a2d0b321 100644 --- a/tests/Unit/Server/Transport/Http/Middleware/ProtectedResourceMetadataMiddlewareTest.php +++ b/tests/Unit/Server/Transport/Http/Middleware/ProtectedResourceMetadataMiddlewareTest.php @@ -11,7 +11,7 @@ namespace Mcp\Tests\Unit\Server\Transport\Http\Middleware; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Server\Exception\InvalidArgumentException; use Mcp\Server\Transport\Http\Middleware\ProtectedResourceMetadataMiddleware; use Mcp\Server\Transport\Http\OAuth\ProtectedResourceMetadata; use Nyholm\Psr7\Factory\Psr17Factory; diff --git a/tests/Unit/Server/Transport/Http/OAuth/JwksProviderTest.php b/tests/Unit/Server/Transport/Http/OAuth/JwksProviderTest.php index 78c1572e..ba54370a 100644 --- a/tests/Unit/Server/Transport/Http/OAuth/JwksProviderTest.php +++ b/tests/Unit/Server/Transport/Http/OAuth/JwksProviderTest.php @@ -11,7 +11,7 @@ namespace Mcp\Tests\Unit\Server\Transport\Http\OAuth; -use Mcp\Exception\RuntimeException; +use Mcp\Server\Exception\RuntimeException; use Mcp\Server\Transport\Http\OAuth\JwksProvider; use Mcp\Server\Transport\Http\OAuth\OidcDiscoveryInterface; use Nyholm\Psr7\Factory\Psr17Factory; diff --git a/tests/Unit/Server/Transport/Http/OAuth/JwtTokenValidatorTest.php b/tests/Unit/Server/Transport/Http/OAuth/JwtTokenValidatorTest.php index b6e518ac..8a8fabc3 100644 --- a/tests/Unit/Server/Transport/Http/OAuth/JwtTokenValidatorTest.php +++ b/tests/Unit/Server/Transport/Http/OAuth/JwtTokenValidatorTest.php @@ -12,7 +12,7 @@ namespace Mcp\Tests\Unit\Server\Transport\Http\OAuth; use Firebase\JWT\JWT; -use Mcp\Exception\RuntimeException; +use Mcp\Server\Exception\RuntimeException; use Mcp\Server\Transport\Http\OAuth\JwksProvider; use Mcp\Server\Transport\Http\OAuth\JwtTokenValidator; use Mcp\Server\Transport\Http\OAuth\OidcDiscoveryInterface; diff --git a/tests/Unit/Server/Transport/Http/OAuth/OidcDiscoveryTest.php b/tests/Unit/Server/Transport/Http/OAuth/OidcDiscoveryTest.php index 29c86d6f..cfd88ca5 100644 --- a/tests/Unit/Server/Transport/Http/OAuth/OidcDiscoveryTest.php +++ b/tests/Unit/Server/Transport/Http/OAuth/OidcDiscoveryTest.php @@ -11,7 +11,7 @@ namespace Mcp\Tests\Unit\Server\Transport\Http\OAuth; -use Mcp\Exception\RuntimeException; +use Mcp\Server\Exception\RuntimeException; use Mcp\Server\Transport\Http\OAuth\LenientOidcDiscoveryMetadataPolicy; use Mcp\Server\Transport\Http\OAuth\OidcDiscovery; use Nyholm\Psr7\Factory\Psr17Factory; diff --git a/tests/Unit/Server/Transport/Http/OAuth/ProtectedResourceMetadataTest.php b/tests/Unit/Server/Transport/Http/OAuth/ProtectedResourceMetadataTest.php index 5016c73a..0744b58d 100644 --- a/tests/Unit/Server/Transport/Http/OAuth/ProtectedResourceMetadataTest.php +++ b/tests/Unit/Server/Transport/Http/OAuth/ProtectedResourceMetadataTest.php @@ -11,7 +11,7 @@ namespace Mcp\Tests\Unit\Server\Transport\Http\OAuth; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Server\Exception\InvalidArgumentException; use Mcp\Server\Transport\Http\OAuth\ProtectedResourceMetadata; use PHPUnit\Framework\Attributes\TestDox; use PHPUnit\Framework\TestCase; diff --git a/tests/Unit/Server/Transport/StatelessHttpTransportTest.php b/tests/Unit/Server/Transport/StatelessHttpTransportTest.php index 08e96a40..1b70442a 100644 --- a/tests/Unit/Server/Transport/StatelessHttpTransportTest.php +++ b/tests/Unit/Server/Transport/StatelessHttpTransportTest.php @@ -12,8 +12,8 @@ namespace Mcp\Tests\Unit\Server\Transport; use Mcp\Schema\Enum\ProtocolVersion; -use Mcp\Server; -use Mcp\Server\Stateless\RequestMeta; +use Mcp\Schema\RequestMeta; +use Mcp\Server\Server; use Mcp\Server\Stateless\StatelessProtocol; use Mcp\Server\Transport\StatelessHttpTransport; use Mcp\Tests\Unit\Server\Transport\Fixture\ShortReadStream; diff --git a/tests/Unit/Server/Transport/StdioTransportTest.php b/tests/Unit/Server/Transport/StdioTransportTest.php index dbfcec2f..a469a35e 100644 --- a/tests/Unit/Server/Transport/StdioTransportTest.php +++ b/tests/Unit/Server/Transport/StdioTransportTest.php @@ -11,7 +11,7 @@ namespace Mcp\Tests\Unit\Server\Transport; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Server\Exception\InvalidArgumentException; use Mcp\Server\Transport\StdioTransport; use PHPUnit\Framework\Attributes\TestDox; use PHPUnit\Framework\TestCase; diff --git a/tests/Unit/Server/Transport/StreamableHttpTransportTest.php b/tests/Unit/Server/Transport/StreamableHttpTransportTest.php index 932f5c77..8a0b807d 100644 --- a/tests/Unit/Server/Transport/StreamableHttpTransportTest.php +++ b/tests/Unit/Server/Transport/StreamableHttpTransportTest.php @@ -11,7 +11,7 @@ namespace Mcp\Tests\Unit\Server\Transport; -use Mcp\Exception\InvalidArgumentException; +use Mcp\Server\Exception\InvalidArgumentException; use Mcp\Server\Transport\Http\Middleware\CorsMiddleware; use Mcp\Server\Transport\Http\Middleware\DnsRebindingProtectionMiddleware; use Mcp\Server\Transport\Http\Middleware\ProtocolVersionMiddleware; diff --git a/tests/Unit/Server/Wire/CachePolicyTest.php b/tests/Unit/Server/Wire/CachePolicyTest.php index 4a65aa50..7f9ad877 100644 --- a/tests/Unit/Server/Wire/CachePolicyTest.php +++ b/tests/Unit/Server/Wire/CachePolicyTest.php @@ -11,8 +11,8 @@ namespace Mcp\Tests\Unit\Server\Wire; -use Mcp\Exception\InvalidArgumentException; use Mcp\Schema\Enum\CacheScope; +use Mcp\Server\Exception\InvalidArgumentException; use Mcp\Server\Wire\CachePolicy; use Mcp\Server\Wire\Rev2026Codec; use PHPUnit\Framework\Attributes\TestDox; diff --git a/tests/Unit/Server/Wire/InboundClassifierTest.php b/tests/Unit/Server/Wire/InboundClassifierTest.php index 282fa0ab..9a3b6450 100644 --- a/tests/Unit/Server/Wire/InboundClassifierTest.php +++ b/tests/Unit/Server/Wire/InboundClassifierTest.php @@ -12,7 +12,7 @@ namespace Mcp\Tests\Unit\Server\Wire; use Mcp\Schema\Enum\ProtocolVersion; -use Mcp\Server\Stateless\RequestMeta; +use Mcp\Schema\RequestMeta; use Mcp\Server\Wire\InboundClassifier; use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\Attributes\TestDox;