Commit Graph

68 Commits

Author SHA1 Message Date
Pietro Zullo 7250b77c5b feat: Sampling (#170)
* Removed unused _setup_client

* Implement sampling in client and connectors

* Tests

* Nicer names in action

* Update previous tests

* Docstrings

* Fixed naming and created other primitives tests

* Supported features table

* docs
2025-07-12 15:00:34 -07:00
Pietro Zullo 44127f8101 remove double init in http connections (#161) 2025-07-06 20:56:11 -07:00
Pietro Zullo e6295ab1f3 fix: Renamed client to client session, fixed bug (#160)
* Renamed client to client session, fixed bug

* Fixed resource access typing
2025-07-06 17:53:26 -07:00
pietrozullo 4b8afc2fd5 Fixed and simplified state tracking tests 2025-06-23 11:43:41 -07:00
Luigi Pederzani 5e7ab23b89 Fix: search tools tuple unpacking error (#138) (#142)
* fix: resolve tuple unpacking error in search_tools when using server manager

Fixes #138 - ValueError: not enough values to unpack (expected 3, got 1)

**Problem:**
When using MCPAgent with use_server_manager=True, users encountered a tuple
unpacking error in search_tools.py. The issue occurred because:
1. ToolSearchEngine.search_tools() sometimes returned a string (when no results)
   and sometimes returned a list of tuples (when results found)
2. SearchToolsTool._arun() expected search_tools() to return a list of tuples
   to pass to format_search_results()
3. When search_tools() returned a string, format_search_results() tried to
   iterate over the string characters, causing the unpacking error

**Solution:**
- Modified ToolSearchEngine.search_tools() to consistently return formatted
  strings by calling a new _format_search_results() method
- Added _format_search_results() method to ToolSearchEngine class
- Updated SearchToolsTool._arun() to return the already-formatted results
  directly instead of calling format_search_results() again
- Updated CLAUDE.md to include virtual environment activation instructions

**Testing:**
- Successfully reproduced the original error
- Verified the fix resolves the issue
- All unit tests pass (113/113)
- Applied code formatting and linting

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* test: add comprehensive test suite for issue #138 tuple unpacking bug

- test_tool_search_engine_consistent_return_type_with_results: ensures search_tools
  returns string when results are found (not list of tuples as in the bug)
- test_tool_search_engine_consistent_return_type_no_results: ensures search_tools
  returns string when no results found
- test_tool_search_engine_not_indexed_scenario: tests the 'still preparing' scenario
- test_search_tools_tool_arun_with_string_result: tests SearchToolsTool._arun()
  correctly handles string results from search_tools
- test_search_tools_tool_integration_scenario: integration test simulating the
  exact scenario from issue #138 that was causing the tuple unpacking error
- test_format_search_results_method_exists: validates the new _format_search_results method
- test_server_manager_active_server_marking: tests active server marking functionality
- test_search_tools_input_validation: validates ToolSearchInput model

These tests ensure the tuple unpacking bug (ValueError: not enough values to unpack
expected 3, got 1) will not regress in the future and verify the fix works correctly.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* fix: resolve logger mock issues in search_tools tests

Added @patch decorators to mock the logger in tests that call _format_search_results
to avoid TypeError with logging level comparisons during testing.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* fix: Update documentation to use session-based API instead of deprecated client methods

- Replace all references to non-existent client.connect_all() with client.create_all_sessions()
- Replace all references to non-existent client.disconnect_all() with client.close_all_sessions()
- Replace all references to client.list_tools() with session.list_tools()
- Replace all references to client.call_tool() with session.call_tool()
- Update API documentation to reflect actual MCPClient implementation
- Fix code examples to use proper session-based architecture
- Ensure all documentation matches the real codebase API

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Improve docs

* remove unused

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-06-21 23:03:04 -07:00
Pietro Zullo 8a32d3c23c fix: pre commit run all files (#135)
* Set line lenght to 120

* Run pre commit all files
2025-06-18 10:12:58 +02:00
Luigi Pederzani 4f05c62aa6 Fix connection state tracking after SSE disconnection (#120) (#122)
* Refactor integration test to have multiple mcp servers

* fix: check correct attribute in client_session validation

* Minor

* Add custom streaming server integration test (not related to the issue)

* Add server

* Enhanced base connector connection check to fix connection status as True even after SSE connections were closed by the server.

* Fix test since now we are using the connector and not the client_session

* Add integration tests and servers for timeout and connection testing

* Removed wrapped call_tool from session and test connection from the base connector + fix tests

* Add fallback check or default assumption for stream object
2025-06-13 18:46:44 +02:00
Luigi Pederzani ed0972a97a Fix websocket error positional arguments, headers were missing (#123) 2025-06-13 15:18:41 +02:00
pietrozullo 2d766c326d Rename client to client session 2025-06-09 19:04:24 +02:00
leonpham-mbh 59b640ff37 feat: streamable http support (#106)
* Extend HTTP connector to support newer streamable http transport

* Fix timeout since they should be timedelta objects

* Refactor http connector to use streamable http by default

This will fallback to SSE if there are any issues with the test
ping send.

* Added transport integration tests

* Fail fast removed

* add fastmcp deps

* system install

* Fixed tests

* Remove python 3.12 from tests

---------

Co-authored-by: pietrozullo <pietro.zullo@gmail.com>
2025-06-04 22:13:03 +02:00
Pietro Zullo f13f9a8930 feat: remove client options for easier usage (#105)
* Remove clientoptions in favor of simpler, is sandbox argument and sandbox argument optional

* Tests and examples

* Remove tool from session

* Nice error message

* Update docs

* Update readme
2025-06-03 10:03:18 +02:00
Luigi Pederzani e8e958c565 Feature: Support for running MCP servers in a sandboxed cloud environment using E2B (#97)
* Add E2B optional dependency for sandboxed mcp servers

* Add types for sandbox options

* Add util to check if stdio server config

* Ignore B017

* Add sandbox connector to run MCP servers on e2b sandbox

* Add client options to set sandbox and sandbox options + use sandbox connector

* Add sandbox connector test + fix

* Add sandboxed stdio server example

* Add docs

* Set logger info

* Set debug in example

* Add install new optional dep
2025-05-19 14:50:38 +02:00
pietrozullo af945d7e8a Feature: support Resources & Prompts (#80)
* Add connector hooks to resources and propts

* Adapter implementation for resources and tools, treated them as tools

* Move unpacking responsibility to adapters

* Update unittests

* Separate unit and integration

* Fix initialization logic

* Fixed tests with capability check

* Removed tool reference from session
2025-05-15 16:29:55 +02:00
pietrozullo aff793446a Fixed test for no config client - now checks that client warns 2025-05-12 09:17:47 +02:00
pietrozullo 6979ff353e Remove appended sse to base_url 2025-04-07 16:03:33 +02:00
pietrozullo 5f809e178b Tests 2025-04-04 16:46:10 +02:00
pietrozullo 37b771f77f Tests init 2025-04-04 13:52:23 +02:00
pietrozullo a93753f53b test mock 2025-03-28 14:32:58 +01:00