You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat(server): add FastAPI-style dependency injection system
ROOT CAUSE:
MCPServer lacked a built-in mechanism for injecting user-defined dependencies
(database connections, auth services, configs, etc.) into tool handlers.
Developers had to rely on global variables or lifespan context, making testing
difficult and limiting code organization.
CHANGES:
1. Created Depends() class for declaring dependencies in tool parameters
2. Implemented DependencyResolver for automatic dependency graph resolution
3. Added find_dependency_parameters() to detect Depends() in function signatures
4. Extended Tool class to support dependency_kwarg_names field
5. Modified Tool.from_function() to skip Depends() parameters from arg_model
6. Modified Tool.run() to resolve and inject dependencies before execution
7. Added dependency_overrides to ToolManager and PromptManager
8. Implemented MCPServer.override_dependency() for testing
9. Exported Depends class from mcp.server public API
IMPACT:
- Tools can now declare dependencies via Depends(get_dependency)
- Nested dependencies (dependencies of dependencies) are automatically resolved
- Dependencies can be overridden for easy testing
- Backward compatible - existing tools without Depends() work unchanged
- Per-request caching prevents redundant dependency instantiation
TECHNICAL NOTES:
- Fixed dict reference bug: dependency_overrides or {} created new dict on empty
- Used "is not None" check instead of "or {}" to preserve dict reference
- Both sync and async dependency functions are supported
- Caching is opt-in via use_cache parameter (default: True)
FILES MODIFIED:
- src/mcp/server/__init__.py
- src/mcp/server/mcpserver/utilities/dependencies.py (new)
- src/mcp/server/mcpserver/utilities/dependency_resolver.py (new)
- src/mcp/server/mcpserver/tools/base.py
- src/mcp/server/mcpserver/tools/tool_manager.py
- src/mcp/server/mcpserver/prompts/base.py
- src/mcp/server/mcpserver/prompts/manager.py
- src/mcp/server/mcpserver/server.py
- tests/server/mcpserver/utilities/test_dependencies.py (new)
- tests/server/mcpserver/test_dependency_injection.py (new)
- docs/dependency_injection.md (new)
Refs: #1254
0 commit comments