Commit graph

291 commits

Author SHA1 Message Date
Kyrian Obikwelu
3dcd2f717a
refactor: rename ServerBuilder to Builder (#85)
Remove redundant "Server" prefix since class is already in Server namespace.
2025-09-28 17:59:48 +01:00
Kyrian Obikwelu
38441b8dc7
refactor: rename Server::make() to Server::builder() (#84) 2025-09-28 17:51:44 +01:00
Sule-Balogun Olanrewaju
095ea2af50
Address issue with pagination limit builder class class (#83) 2025-09-27 13:43:40 +02:00
Christopher Hertel
3ec4cf612a
Split testsuite for unit and inspector based tests (#82) 2025-09-25 22:27:41 +01:00
xentixar
7d599f4f64
refactor: integrate cache parameter into setDiscovery() method (#80)
* refactor: integrate cache parameter into setDiscovery() method

- Add cache as 4th parameter to setDiscovery()
- Rename $cache to $discoveryCache for clarity
- Remove separate setCache() method
- Update example to use new API

* docs: update discovery caching documentation to use new API

- Update examples to use cache parameter in setDiscovery() method
- Remove references to separate setCache() method calls
2025-09-25 16:41:11 +02:00
Christopher Hertel
e46b7c139d
Support for Symfony 8.0 (#79) 2025-09-25 08:53:09 +02:00
Christopher Hertel
8defd9b17f
Fix & clean up examples (#78) 2025-09-24 21:50:06 +02:00
Kyrian Obikwelu
32b8b2ea61
[Server] Fix: ensure JSON-RPC error responses include message IDs (#77)
* fix: ensure JSON-RPC error responses include message IDs

* fix: replace method_exists with instanceof for message ID extraction
2025-09-24 21:45:50 +02:00
Sule-Balogun Olanrewaju
325b4aaf9c
Add support for pagination on list requests (#55)
10 - Added the list resources handler with test class

10 - Update the ListPromptsHandler to use annotations

10 - Add the list resource handler, and it's test as well

10 - Added the registry logic

10 - Added the list tools handler logic

10 - Fix all php-cs-fixer related issues

10 - Resolved phpstan issues for ListPromptsHandlerTest

10 - Resolved phpstan issues for ListToolsHandlerTest

10 - Resolved phpstan issues for ListResourcesHandlerTest

10 - Resolved phpstan issues in registry class

10 - Resolved phpstan issues for the handler class

10 - Resolved php cs fixer issues

10 - Resolved all phpstan issues by generating the baseline again

10 - Remove the two loop operation and use foreach for optimization

10 - Removed unused code and resolved namespace

10 - Add signatures to interface and registry

10 - Add updated phpstan rule set

10 - Arranged according to property type

10 - Introduce reference page DTO, fix all failing test

10 - Resolve cs-fixer issues

10 - Resolve phpstan issues

10 - Resolve php cs fixer issues

10 - Created a reference directory for the Page DTO

10 - Remove manual loop for clean code readability

Co-authored-by: larry.sulebalogun <larry.sulebalogun@tillo.io>
2025-09-24 21:44:32 +02:00
xentixar
4db831778b
[Server] Implement discovery caching for improved performance (#39)
* feat: implement discovery caching with state-based approach

- Add DiscoveryState class to encapsulate discovered MCP capabilities
- Add exportDiscoveryState and importDiscoveryState methods to Registry
- Modify Discoverer to return DiscoveryState instead of void
- Create CachedDiscoverer decorator for caching discovery results
- Add importDiscoveryState method to ReferenceRegistryInterface
- Update ServerBuilder to use caching with withCache() method
- Update tests to work with new state-based approach
- Add example demonstrating cached discovery functionality
- Add PSR-16 SimpleCache and Symfony Cache dependencies

* docs: add comprehensive discovery caching documentation

- Add detailed documentation explaining discovery caching architecture
- Include usage examples for different cache implementations
- Document performance benefits and best practices
- Add troubleshooting guide and migration instructions
- Include complete API reference for all caching components
- Fix PHPStan issues by regenerating baseline
- Apply PHP CS Fixer formatting to all new files

* refactor: address reviewer feedback and clean up discovery caching

- Make DiscoveryState class final
- Cache DiscoveryState objects directly instead of arrays (no serialization needed)
- Rename exportDiscoveryState/importDiscoveryState to getDiscoveryState/setDiscoveryState
- Add getDiscoveryState method to ReferenceRegistryInterface
- Remove TTL parameter from CachedDiscoverer (no expiration by default)
- Remove unused methods from DiscoveryState (toArray, fromArray, merge)
- Simplify ServerBuilder to handle decoration internally
- Make Discoverer.applyDiscoveryState() internal (no longer public API)
- Simplify documentation to focus on user perspective
- Remove unnecessary development comments
- Update all tests to work with new architecture
- All tests pass, PHPStan clean, code formatting applied

* refactor: clean up comments and formatting in server.php example

* refactor: improve code formatting and consistency in discovery classes and example server

* Fix method names in cached discovery example

- Change withServerInfo() to setServerInfo()
- Change withDiscovery() to setDiscovery()
- Change withLogger() to setLogger()
- Fixes PHPStan static analysis errors

* refactor: update method names in ServerBuilder for consistency

- Change withCache() to setCache() in ServerBuilder
- Update example and documentation to reflect method name changes
- Ensure consistency across caching implementation in examples and documentation

* refactor: reorganize examples and fix PHPStan baseline

- Move cached discovery example from examples/10 to examples/09
- Update composer.json autoload-dev namespace mapping
- Fix PHPStan baseline by removing invalid entries for non-existent files
- Update server.php to follow proper example pattern with logging and lifecycle

* fix: correct formatting in server.php
2025-09-24 20:54:27 +02:00
Kyrian Obikwelu
9e168832ca
refactor: remove dead code and obsolete examples (#76)
- Remove ToolChain, ResourceChain, PromptChain classes
- Remove Collection/Identifier/Metadata interfaces (only used by old Chains)
- Remove ToolCollectionInterface (unused)
- Delete obsolete examples 09-standalone-cli and 10-simple-http-transport
- Fix STDERR handling in bootstrap.php for web environments
- Clean up CHANGELOG.md
2025-09-21 20:23:59 +02:00
Kyrian Obikwelu
719262b15d
feat(server): Rework transport architecture and add StreamableHttpTransport (#49)
* feat(server): Rework transport architecture and add StreamableHttpTransport

- `Server::connect()` no longer contains a processing loop.
- `TransportInterface` is updated with `setMessageHandler()` and `listen()`.
- `StdioTransport` is updated to implement the new interface.
- A new, minimal `StreamableHttpTransport` is added for stateless HTTP.

* refactor(server): use  event-driven message handling

* feat(server): Introduce a formal session management system

* fix: ensure session elements are preserved when building server (regression from #46)

* refactor: consolidate HTTP example to use shared dependencies

* feat(server): Enhance message handling with session support

- Updated `TransportInterface` to use `onMessage` for handling incoming messages with session IDs.
- Refactored `Server`, `Handler`, and transport classes to accommodate session management using `Uuid`.
- Introduced methods for creating sessions with auto-generated and specific UUIDs in `SessionFactory` and `SessionFactoryInterface`.

* feat(server): Integrate session management in message handling

- Added session support to the `Server` and `Handler` classes, allowing for session data to be managed during message processing.
- Updated `TransportInterface` to include session context in the `send` method.
- Refactored various request handlers to utilize session information, ensuring proper session handling for incoming requests.
- Introduced a file-based session store for persistent session data management

* feat: Update session builder method to use set* instead of with*

* feat: Fix test compatibility with new session management architecture

* chore: apply code style fixes

* fix: remove deprecated SSE transport and resolve PHPStan issues
2025-09-21 12:12:40 +02:00
Christopher Hertel
b1e54f1f86
Switch to set* and add* on ServerBuilder instead of with* (#71) 2025-09-15 08:30:41 +02:00
Pavel Buchnev
99bf56eef8
Registry Architecture Refactoring - Enhanced Separation of Concerns (#46)
* refactor: Separate Registry concerns following SOLID principles [WIP]

- Extract ReferenceProvider and ReferenceRegistryInterface interfaces
- Create DefaultToolExecutor with ReferenceHandlerInterface
- Remove execution responsibility from Registry class
- Enable custom handler and executor implementations

* refactor: implement SOLID principles with separated execution concerns

* Create DefaultResourceReader, DefaultPromptGetter
* Refactor JsonRpc Handler and RequestHandlers to use dedicated executors
* Update ServerBuilder to support custom executors via dependency injection

* chore: remove extra comments

* feat: introduce DispatchableRegistry for enhanced tool and resource management

* refactor: use proper interfaces

* refactor: implement HandlerInterface for improved abstraction and flexibility

* test: add unit tests for DispatchableRegistry and Registry classes

* refactor: cover with unit tests Resource reader, Prompt getter and Tool executor

* cs fix

* phpstan fix

* test: add unit tests for CallToolHandler, GetPromptHandler, PingHandler, and ReadResourceHandler

* refactor: revert Handler

* chore: remove style guide for tests

* refactor: remove "Default" prefix from classes

* refactor: remove DispatchableRegistry

* refactor: use package specific exception classes

* refactor: remove DispatchableRegistry

* refactor: add logger support to PromptGetter and ResourceReader classes

* Update src/Capability/Prompt/PromptGetter.php

Co-authored-by: Christopher Hertel <mail@christopher-hertel.de>

* refactor: Use FQN for Resource class to avoid cs-fixer misinterpreting it as `resource`

* refactor: rename ToolExecutor to ToolCaller and related classes for clarity and consistency

* refactor: add missed docblock

* refactor: rename ToolExecutor references to ToolCaller

* refactor: rename ToolCallerTest property and variable references

* cs fix

* ignore some phpstan errors

---------

Co-authored-by: Christopher Hertel <mail@christopher-hertel.de>
2025-09-14 20:44:18 +02:00
Aleksei Gagarin
bfc3b82d19
Add Makefile to export-ignore in .gitattributes (#56)
* Add Makefile to export-ignore in .gitattributes

* Update .gitattributes to export-ignore all phpstan configuration files
2025-09-09 22:32:02 +02:00
Igor Markin
20e789d402
Fix return type in abstract methods from self to static (#53)
* Change return type of abstract request methods

* Change return type of `fromParams` method to `static` in request classes

(cherry picked from commit 94799ab66ff60d4b2305aadb6b73aaa4c805221e)

* Make request classes final and update `getParams` return types for improved type safety

(cherry picked from commit d6be496f89cc0e6d30f519792d0dc902685c4178)
2025-09-09 18:22:29 +02:00
Oskar Stark
4b667327e7
Remove --no-scripts option from composer install (#30) 2025-09-07 01:47:53 +02:00
Adebayo120
f457802371
Updated README.md to clarify grammar in "Important" section (#41) 2025-09-06 22:34:51 +02:00
Sapayth Hossain
952cd2420b
Update README for clarity and consistency (#38)
Improved capitalization and wording in the roadmap and credits sections for better readability and consistency.
2025-09-06 21:21:32 +02:00
Oskar Stark
9590e9c158
Rename workflow file from .yml to .yaml (#35) 2025-09-04 23:58:30 +02:00
Oskar Stark
a94d348f72
Remove suggest section in composer.json (#34)
* Sort suggest section in composer.json alphabetically

* Remove suggest section from composer.json
2025-09-04 23:50:15 +02:00
Oskar Stark
a7ddc11844
Add missing ConfigurationException and update PHPStan baseline (#31)
- Add ConfigurationException class in src/Exception/ConfigurationException.php
- Update ServerBuilder to use the new ConfigurationException
- Regenerate PHPStan baseline to account for the new exception class,
  reducing errors from 160+ to 124
2025-09-04 23:43:12 +02:00
Christopher Hertel
7eaca45860
Remove outdated docs (#32) 2025-09-04 23:40:40 +02:00
Kyrian Obikwelu
5bda030630
fix: correct namespace and import paths in README Quick Start example (#23) 2025-09-04 23:39:30 +02:00
Oskar Stark
580ce38d26
[CI] Validate composer.json file before install (#29) 2025-09-04 23:33:43 +02:00
Oskar Stark
af5690d4c3
Require Symfony 7.3 instead of unmaintained versions (#26) 2025-09-04 23:29:59 +02:00
Oskar Stark
57ccb5bcf7
Remove unused nyholm/nsa dependency (#28) 2025-09-04 23:29:37 +02:00
Oskar Stark
a5f9d5647d
Fix typos in documentation and configuration files (#25)
- Fix grammar in doc/index.rst: "There two types" → "There are two types"
- Fix grammar in doc/index.rst: "if non of" → "if none of"
- Fix grammar in phpstan.dist.neon: "This errors" → "These errors"
- Fix grammar in examples/09-standalone-cli/README.md: "test add" → "test by adding"
- Fix sentence structure in examples/README.md for better readability

Signed-off-by: Oskar Stark <oskarstark@googlemail.com>
2025-09-04 23:25:49 +02:00
Oskar Stark
87d5592830
Update actions/checkout from v4 to v5 (#24) 2025-09-04 23:25:29 +02:00
Oskar Stark
a027ae4de3
Remove unused development dependencies (#33)
Remove symfony/dependency-injection and symfony/event-dispatcher
from require-dev as they are not used in the codebase. The project
uses psr/event-dispatcher interface instead of symfony's implementation.
2025-09-04 23:24:34 +02:00
Oskar Stark
226bc96ae0
Fix JSON formatting (#22)
* Fix JSON formatting and clean up PHP code snippet

* Update README.md
2025-09-04 23:11:04 +02:00
Christopher Hertel
4fef07d0f3
Add note about minimum stability to README (#21)
* Add note about minimum stability to README

* Remove unnecessary blank line.
2025-09-04 16:15:58 +02:00
Roman Pronskiy
8985be6af3
Add roadmap to readme (#20)
* Update README.md

Add roadmap
Add a basic example
Fix default NullLogger() in ServerBuilder

* Update README.md

Update intro
Add roadmap
Add a basic example
Fix default NullLogger() in ServerBuilder
Add Credits

* Update src/Server/ServerBuilder.php

Co-authored-by: Christopher Hertel <mail@christopher-hertel.de>

* Fix code review comments

---------

Co-authored-by: Christopher Hertel <mail@christopher-hertel.de>
2025-09-04 15:49:16 +02:00
Christopher Hertel
4812b563a1 Fix manual registration of capabilities via ServerBuilder 2025-09-03 16:03:42 +02:00
Christopher Hertel
91323d36a0
Add WIP note to readme 2025-08-29 11:34:00 +02:00
Christopher Hertel
2ef051a355
Adopt server examples 2025-08-29 11:19:51 +02:00
Christopher Hertel
da0d5a87a0
Introduce Capability Registry & Discovery 2025-08-29 11:18:33 +02:00
Christopher Hertel
09707b4798
Adopt Schema component in server handlers 2025-08-29 11:12:23 +02:00
Christopher Hertel
6025f890f9
Introduce schema component 2025-08-29 11:11:20 +02:00
Christopher Hertel
ee0dffe369
Kick off the SDK based on Symfony's MCP SDK 2025-08-29 11:09:16 +02:00
Christopher Hertel
0044ffb365
Add README 2025-07-25 11:30:23 +02:00