-
Notifications
You must be signed in to change notification settings - Fork 209
feat: add plugins cli, external plugin support, plugin template #722
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
554a13c
to
69fea1a
Compare
2e76243
to
94819a1
Compare
Signed-off-by: Teryl Taylor <terylt@ibm.com>
Signed-off-by: Teryl Taylor <terylt@ibm.com>
Signed-off-by: Teryl Taylor <terylt@ibm.com>
Signed-off-by: Teryl Taylor <terylt@ibm.com>
Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com>
Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com>
Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com>
Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com>
Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com>
Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com>
Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com>
Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com>
Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com>
Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com>
Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com>
Signed-off-by: Teryl Taylor <terylt@ibm.com>
Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com>
Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com>
Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com>
Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com>
Signed-off-by: Teryl Taylor <terylt@ibm.com>
Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com>
Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com>
Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com>
Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com>
Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com>
Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com>
Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com>
Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com>
Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com>
Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com>
Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com>
Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com>
Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com>
Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com>
Review in progress, don't touch ;-) |
Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
f33af46
to
cf7df00
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
PR #722 Review: Plugin CLI and External Plugin Support
TODO:
- Move copier to install-dev not install
Overview
This PR implements comprehensive plugin system enhancements for the MCP Context Forge Gateway, adding a CLI tool (mcpplugins
) and external plugin support with MCP server integration.
Status: ✅ APPROVED & UPDATED
- Rebase: ✅ Successfully rebased against main (64 commits processed)
- Tests: ✅ All tests passing (2109 passed, 15 skipped, 79% coverage)
- Quality: ✅ Fixed all linting tools - now passing (Bandit, Pylint 10/10, Flake8)
- Dependencies: ✅ New dependencies installed and working
- Force Push: ✅ Updated araujof:feat/720-plugins-cli with fixes (commit: cf7df00)
Changes Summary
🆕 New Features Added
1. mcpplugins CLI Tool (mcpgateway/plugins/tools/cli.py
)
- Bootstrap command: Creates new plugin projects from templates using Copier
- Template support: Both native and external plugin templates
- Git integration: Auto-detects author name/email from git config
- Rich markup support: Configurable via environment variables
- Entry point: Available as
mcpplugins
console script
2. External Plugin Framework (mcpgateway/plugins/framework/external/
)
- MCP Client Integration: Connects to external MCP servers as plugins
- Multi-transport Support: stdio and streamable HTTP transports
- Plugin Server Runtime: Based on
chuk-mcp-runtime
for robust MCP handling - Hook System: Pre/post processing hooks for tools, prompts, and resources
3. Plugin Templates (plugin_templates/
)
- External Plugin Template: Full project scaffold with:
- Containerfile for deployment
- Makefile for development workflow
- Test framework setup
- Configuration templates
- Documentation stubs
- Native Plugin Template: Lightweight template for internal plugins
4. Documentation & Configuration
- Plugin lifecycle documentation (
docs/docs/using/plugins/lifecycle.md
) - Environment variable configuration for CLI behavior
- Copier template configuration at repository root
🔧 Key Technical Components
External Plugin Architecture
ExternalPlugin
class: Manages connections to remote MCP servers- Transport abstraction: Supports stdio and HTTP streaming protocols
- Session management: Uses
AsyncExitStack
for proper resource cleanup - Error handling: Comprehensive error conversion and logging
CLI Architecture
- Typer-based: Modern CLI framework with rich help and completion
- Template-driven: Uses Copier for project scaffolding
- Environment-aware: Configurable markup and completion behavior
- Git-integrated: Auto-detects user configuration
📈 Code Quality Metrics
- Files Changed: 126 files modified/added
- New Files: 69 new files added
- Test Coverage: 79% overall coverage maintained
- Tests Status: 2109 tests passing, 15 skipped
- Dependencies: All new dependencies properly integrated
🧪 Testing Coverage
New test suites added for:
- CLI functionality (
tests/unit/mcpgateway/plugins/tools/test_cli.py
) - External plugin runtime (
tests/unit/mcpgateway/plugins/framework/external/
) - Plugin framework components
- Hook system integration
🔒 Security Considerations
- Subprocess Safety: Uses secure subprocess invocation patterns
- Template Security: Templates use Jinja2 with proper escaping
- MCP Protocol: Leverages established MCP security model
- No Shell Injection: Avoids
shell=True
in subprocess calls
🚀 Deployment Impact
- Breaking Changes: None - purely additive features
- Dependencies: New optional dependencies added to pyproject.toml
- Entry Points: New
mcpplugins
console script available - Configuration: New optional environment variables
📋 Quality Assurance
✅ Completed Checks
- Rebase: Successfully rebased 64 commits against main
- Dependencies: Installed
copier
,chuk-mcp-runtime
,typer
- Tests: All 2124 tests collected and executed successfully
- Coverage: Maintained 79% code coverage
- Linting: Pre-commit hooks applied formatting fixes
- Security: Fixed all Bandit security issues (5 → 0)
- Code Quality: Fixed all Pylint issues (achieved perfect 10/10 score)
- Style: Fixed all Flake8 style/documentation issues
🛠️ Review Fixes Applied
During the review process, the following issues were identified and fixed:
Security Fixes (Bandit):
- Added explicit
check=False
to subprocess.run calls in CLI - Added proper
#nosec
comments with security justifications - Fixed subprocess security warnings for git command execution
Code Quality Fixes (Pylint):
- Fixed method signatures in plugin framework (replaced
elif
withif
after return) - Corrected Pydantic model validator parameter naming
- Fixed cyclic import by using direct imports instead of package-level imports
- Renamed global variables to follow UPPER_CASE naming conventions
- Updated test files to match renamed variables
Style Fixes (Flake8):
- Corrected Pydantic model validator docstrings (removed excess/missing parameters)
- Fixed method parameter naming for model validators
- Added appropriate pylint disable comments for Pydantic-specific patterns
🔧 Technical Details of Fixes
Files Modified During Review:
mcpgateway/plugins/tools/cli.py
: Security fixes for subprocess callsmcpgateway/plugins/framework/models.py
: Pydantic validator signatures and docsmcpgateway/plugins/framework/manager.py
: Control flow improvementsmcpgateway/plugins/framework/utils.py
: Control flow improvementsmcpgateway/plugins/framework/loader/plugin.py
: Python 3 inheritance cleanupmcpgateway/plugins/framework/external/mcp/client.py
: Parentheses cleanupmcpgateway/plugins/framework/external/mcp/server/runtime.py
: Global variable namingmcpgateway/plugins/framework/external/mcp/server/server.py
: Import path fixestests/unit/mcpgateway/plugins/framework/external/mcp/server/test_runtime.py
: Variable name updates
Key Patterns Fixed:
- Subprocess Security:
subprocess.run(cmd, check=False)
with#nosec
justifications - Control Flow:
elif
→if
afterreturn
/raise
statements - Pydantic Validators: Proper
self
parameter usage with#pylint: disable=bad-classmethod-argument
- Import Cycles: Direct imports instead of package-level imports
- Global Constants:
snake_case
→UPPER_CASE
naming
✅ Final Quality Metrics
- Bandit: 0 security issues (was 5)
- Pylint: 10.00/10 perfect score (was failing with 14 issues)
- Flake8: 0 style issues (was 4 issues)
- Tests: All framework and CLI tests passing
- Functionality: Full preservation of all features
⚠️ Notes
- Some tests are skipped due to external dependencies (expected)
- New dependencies require installation for full functionality
- All fixes maintain backward compatibility
Recommendation
✅ APPROVED FOR MERGE - This PR successfully implements a comprehensive plugin system with:
🎯 Original Features
- Well-architected external plugin support
- Professional CLI tooling (
mcpplugins
) - Comprehensive testing (2109 tests passing)
- Proper documentation and lifecycle guides
- No breaking changes
- Clean integration with existing codebase
Post-PR #722 FixesCritical Dependency Issues
CLI Implementation
Error Handling
Documentation
Performance
Testing Gaps
Developer Experience
Security
Architecture Improvements
|
) * feat: add support for external plugins Signed-off-by: Teryl Taylor <terylt@ibm.com> * feat(plugins): add external mcp server and associated test cases. Signed-off-by: Teryl Taylor <terylt@ibm.com> * fix(lint): fixed yamllint issues Signed-off-by: Teryl Taylor <terylt@ibm.com> * fix(lint): fixed flake8 issue. Signed-off-by: Teryl Taylor <terylt@ibm.com> * feat: define plugins cli and implement bootstrap command Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * fix: implement install and package CLI commands Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * fix: remote avoid insecure shell=True in subprocess invocation Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * feat: add external plugin template Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * feat: move copier config to repository root Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * feat: update copier template Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * feat: get default author from git config Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * feat: update copier settings Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * fix: copier config syntax Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * feat: add external plugin template modules Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * fix: template syntax Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * fix: template syntax Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * fix: make template Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * feat: fix template issue Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * fix: toml template Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * fix: plugin mcp server initialization Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * feat: init module for plugin framework Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * feat: add chuck runtime and container wrapping Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * fix: makefile template Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * fix: plugins config path Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * feat: add .env.template Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * feat: add tools and resources support Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * fix: lint yaml Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * chore: cleanups Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * feat: update manifest.in Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * chore: linting Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * fix: plugin config variable Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * fix(tests): fixed doctests for plugins. Signed-off-by: Teryl Taylor <terylt@ibm.com> * refactor: external plugin server and plugin external API Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * docs(plugins): removed subpackages from examples Signed-off-by: Teryl Taylor <terylt@ibm.com> * docs: update plugin docs to use public framework API Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * fix(plugin): added resource payloads to base plugin. Signed-off-by: Teryl Taylor <terylt@ibm.com> * feat: udpate test templates Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * feat: update test templates Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * feat: update plugin template Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * feat: update plugin template Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * feat: update tempalte makefile Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * feat: add template for native plugin Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * feat: add readme for native template Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * feat: force boostrap to be a subcommnand Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * tests(plugin): added http streamable and error tests. Signed-off-by: Teryl Taylor <terylt@ibm.com> * tests: add tests for plugins CLI Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * fix: deprecation warning Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * tests: add CLI tests Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * tests: update plugin cli Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * tests(plugins): added client hook tests for external plugins. Signed-off-by: Teryl Taylor <terylt@ibm.com> * chore: update template readmes Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * fix: lint docstrings in cli Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * chore: fix lint errors in docstrings Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * chore: fix lint errors Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * tests: add external plugin server tests Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * chore: cleanup Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * chore: add missing docstrings Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * chore: add missing docstrings Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * tests: fix cli dryrun test Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * chore: fix lint issues Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * tests: fix teardown of client http tests Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * tests: skipping flaky tests Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * docs: plugin lifecycle tools Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * docs: add missing plugin lifecycle doc Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * Review, rebase and lint Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> --------- Signed-off-by: Teryl Taylor <terylt@ibm.com> Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> Co-authored-by: Teryl Taylor <terylt@ibm.com> Co-authored-by: Mihai Criveti <crivetimihai@gmail.com>
…g Implementation (#786) * db.py update Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com> * edit-tool Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com> * edit-tool Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com> * edit-tool Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com> * edit-tool Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com> * edit-tool Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com> * edit-tool Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com> * doc test Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com> * pytest Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com> * pytest Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com> * revert alembic with main version Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com> * 138 view realtime logs in UI and export logs (CSV, JSON) (#747) * Add logging UI Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Add logging UI Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Add logging UI Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Add logging UI readme Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Update logging flake8 Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Update logging flake8 Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * test coverage Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * test coverage Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Fix download Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Fix test Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> --------- Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * 749 reverse proxy (#750) * Fix download Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Reverse proxy Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Reverse proxy Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Reverse proxy Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * doctest improvements Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> --------- Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * (fix) Added missing prompts/get (#748) Signed-off-by: Ian Molloy <molloyim@us.ibm.com> * Adds RPC endpoints and updates RPC response and error handling (#746) * Fix rpc endpoints Signed-off-by: Madhav Kandukuri <madhav165@gmail.com> * Remove commented code Signed-off-by: Madhav Kandukuri <madhav165@gmail.com> * remove duplicate code in session registry Signed-off-by: Madhav Kandukuri <madhav165@gmail.com> * Linting fixes Signed-off-by: Madhav Kandukuri <madhav165@gmail.com> * Fix tests Signed-off-by: Madhav Kandukuri <madhav165@gmail.com> --------- Signed-off-by: Madhav Kandukuri <madhav165@gmail.com> * 753 fix tool invocation invalid method (#754) * Fix tool invocation 'Invalid method' error with backward compatibility (#753) - Add backward compatibility for direct tool invocation (pre-PR #746 format) - Support both old format (method=tool_name) and new format (method=tools/call) - Add comprehensive test coverage for RPC tool invocation scenarios - Ensure graceful fallback to gateway forwarding when method is not a tool The RPC endpoint now handles tool invocations in both formats: 1. New format: method='tools/call' with name and arguments in params 2. Old format: method='tool_name' with params as arguments (backward compat) This maintains compatibility with existing clients while supporting the new standardized RPC method structure introduced in PR #746. Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Fix flake8 E722: Replace bare except with Exception Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * lint Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> --------- Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * fix: suppress bandit security warnings with appropriate nosec comments (#755) - Added nosec B105 for ENV_TOKEN as it's an environment variable name, not a hardcoded secret - Added nosec B110 for intentional exception swallowing in cleanup/error handling paths - Both cases are legitimate uses where errors should be silently ignored to prevent cascading failures Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Add agents file Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * pylint (#759) Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Remove redundant title in readme. (#757) Signed-off-by: Vinod Muthusamy <770084+vinodmut@users.noreply.github.com> Co-authored-by: Vinod Muthusamy <770084+vinodmut@users.noreply.github.com> * Update documentation with fixed image tag Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * 256 fuzz testing (#760) * Implement comprehensive fuzz testing automation (#256) - Add property-based testing with Hypothesis for JSON-RPC, JSONPath, and schema validation - Add coverage-guided fuzzing with Atheris for deep code path exploration - Add API endpoint fuzzing with Schemathesis for contract validation - Add security-focused testing for vulnerability discovery (SQL injection, XSS, etc.) - Add complete Makefile automation with fuzz-all, fuzz-quick, fuzz-extended targets - Add optional [fuzz] dependency group in pyproject.toml for clean installation - Add comprehensive reporting with JSON/Markdown outputs and executive summaries - Add complete developer documentation with examples and troubleshooting guides - Exclude fuzz tests from main test suite to prevent auth failures - Found multiple real bugs in JSON-RPC validation during development Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Update fuzz testing Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Update fuzz testing Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> --------- Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * 344 cors security headers (#761) * Update CORS Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Update CORS Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Update CORS ADRs Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Update CORS Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Update CORS Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Fix compose Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Update helm chart Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Update CORS docs Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Update test Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> --------- Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * feat: Bulk Import Tools modal wiring #737 (#739) * feat: Bulk Import Tools modal wiring and backend implementation - Add modal UI in admin.html with bulk import button and dialog - Implement modal open/close/ESC functionality in admin.js - Add POST /admin/tools/import endpoint with rate limiting - Support both JSON textarea and file upload inputs - Validate JSON structure and enforce 200 tool limit - Return detailed success/failure information per tool - Include loading states and comprehensive error handling Refs #737 Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * fix: Remove duplicate admin_import_tools function and fix HTML formatting - Remove duplicate admin_import_tools function definition - Fix HTML placeholder attribute to use double quotes - Add missing closing div tag - Fix flake8 blank line issues Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * feat: Complete bulk import backend with file upload support and enhanced docs - Add file upload support to admin_import_tools endpoint - Fix response format to match frontend expectations - Add UI usage documentation with modal instructions - Update API docs to show all three input methods - Enhance bulk import guide with UI and API examples Backend improvements: - Support tools_file form field for JSON file uploads - Proper file content parsing with error handling - Response includes imported/failed counts and details - Frontend-compatible response format for UI display Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Bulk import Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * fix: Remove conflicting inline script and fix bulk import functionality - Remove conflicting inline JavaScript that was preventing form submission - Fix indentation in setupBulkImportModal function - Ensure bulk import modal uses proper admin.js implementation - Restore proper form submission handling for bulk import This fixes the issue where bulk import appeared to do nothing. Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * fix: Integrate bulk import setup with main initialization - Add setupBulkImportModal() to main initialization sequence - Remove duplicate DOMContentLoaded listener - Ensure bulk import doesn't interfere with other tab functionality Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * fix: JavaScript formatting issues in bulk import modal - Fix multiline querySelector formatting - Fix multiline Error constructor formatting - Ensure prettier compliance for web linting Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * debug: Temporarily disable bulk import setup to test tabs Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * fix: Remove duplicate setupFormValidation call and delay bulk import setup - Remove duplicate setupFormValidation() call that could cause conflicts - Use setTimeout to delay bulk import modal setup after other initialization - Add better null safety to form element queries - This should fix tab switching issues Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * fix: Restore proper initialization sequence for tab functionality - Remove setTimeout delay for bulk import setup - Keep bulk import setup in main initialization but with error handling - Ensure tab navigation isn't affected by bulk import modal setup Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * fix: Correct HTML structure and restore tab navigation - Move bulk import modal to correct location after tools panel - Remove extra closing div that was breaking HTML structure - Ensure proper page-level modal placement - Restore tab navigation functionality for all tabs This fixes the broken Global Resources, Prompts, Gateways, Roots, and Metrics tabs. Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * feat: Add configurable bulk import settings Configuration additions: - MCPGATEWAY_BULK_IMPORT_MAX_TOOLS (default: 200) - MCPGATEWAY_BULK_IMPORT_RATE_LIMIT (default: 10) Implementation: - config.py: Add new settings with defaults - admin.py: Use configurable rate limit and batch size - .env.example: Document all bulk import environment variables - admin.html: Use dynamic max tools value in UI text - CLAUDE.md: Document configuration options for developers - docs: Update bulk import guide with configuration details This makes bulk import fully configurable for different deployment scenarios. Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Update docs Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> --------- Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> Co-authored-by: Mihai Criveti <crivetimihai@gmail.com> * Implemented configuration export (#764) Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * 185 186 import export (#769) * Import export Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Import export Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Import export Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Import export Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Import export Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Import export Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Import export Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Import export Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Import export testing Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> --------- Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * fix: local network address translation in discovery module (#767) Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * Well known (#770) Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Update docs with jsonrpc tutorial (#772) Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * 137 metadata timestamps (#776) * Metadata / creation dates Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Metadata / creation dates Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Metadata / creation dates Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Security headers CSP Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Display metadata for resources Signed-off-by: Madhav Kandukuri <madhav165@gmail.com> * eslint fix Signed-off-by: Madhav Kandukuri <madhav165@gmail.com> --------- Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> Co-authored-by: Madhav Kandukuri <madhav165@gmail.com> * feat #262: MCP Langchain Agent (#781) * feat: Add bulk import UI modal for tools Signed-off-by: Vicky <vicky.kuo.contact@gmail.com> * feat: Add Langchain agent with OpenAI & A2A endpoints (refs #262) Signed-off-by: Vicky <vicky.kuo.contact@gmail.com> * lint: prettier fix at ~L8090 (insert newline) Signed-off-by: Vicky <vicky.kuo.contact@gmail.com> --------- Signed-off-by: Vicky <vicky.kuo.contact@gmail.com> Co-authored-by: Vicky <vicky.kuo.contact@gmail.com> * Cleanup pr Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Cleanup pr Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Issue 587/rest tool error (#778) * added params extraction from url logic Signed-off-by: Veeresh K <veeruveeresh1522@gmail.com> * added params extraction from url logic Signed-off-by: Veeresh K <veeruveeresh1522@gmail.com> * Rebase and lint / test Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> --------- Signed-off-by: Veeresh K <veeruveeresh1522@gmail.com> Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> Co-authored-by: Mihai Criveti <crivetimihai@gmail.com> * edit column header (#777) Signed-off-by: Shoumi <shoumimukherjee@gmail.com> * Test case update (#775) * session_registry test case updates Signed-off-by: Mohan Lakshmaiah <mohalaks@in.ibm.com> * test case update for routers/reverse_proxy Signed-off-by: Mohan Lakshmaiah <mohalaks@in.ibm.com> * test case update to mcpgateway/reverse_proxy.py Signed-off-by: Mohan Lakshmaiah <mohalaks@in.ibm.com> * Fix formatting issues from pre-commit hooks Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> --------- Signed-off-by: Mohan Lakshmaiah <mohalaks@in.ibm.com> Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> Co-authored-by: Mohan Lakshmaiah <mohalaks@in.ibm.com> Co-authored-by: Mihai Criveti <crivetimihai@gmail.com> * feat: add plugins cli, external plugin support, plugin template (#722) * feat: add support for external plugins Signed-off-by: Teryl Taylor <terylt@ibm.com> * feat(plugins): add external mcp server and associated test cases. Signed-off-by: Teryl Taylor <terylt@ibm.com> * fix(lint): fixed yamllint issues Signed-off-by: Teryl Taylor <terylt@ibm.com> * fix(lint): fixed flake8 issue. Signed-off-by: Teryl Taylor <terylt@ibm.com> * feat: define plugins cli and implement bootstrap command Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * fix: implement install and package CLI commands Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * fix: remote avoid insecure shell=True in subprocess invocation Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * feat: add external plugin template Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * feat: move copier config to repository root Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * feat: update copier template Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * feat: get default author from git config Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * feat: update copier settings Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * fix: copier config syntax Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * feat: add external plugin template modules Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * fix: template syntax Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * fix: template syntax Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * fix: make template Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * feat: fix template issue Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * fix: toml template Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * fix: plugin mcp server initialization Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * feat: init module for plugin framework Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * feat: add chuck runtime and container wrapping Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * fix: makefile template Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * fix: plugins config path Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * feat: add .env.template Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * feat: add tools and resources support Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * fix: lint yaml Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * chore: cleanups Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * feat: update manifest.in Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * chore: linting Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * fix: plugin config variable Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * fix(tests): fixed doctests for plugins. Signed-off-by: Teryl Taylor <terylt@ibm.com> * refactor: external plugin server and plugin external API Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * docs(plugins): removed subpackages from examples Signed-off-by: Teryl Taylor <terylt@ibm.com> * docs: update plugin docs to use public framework API Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * fix(plugin): added resource payloads to base plugin. Signed-off-by: Teryl Taylor <terylt@ibm.com> * feat: udpate test templates Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * feat: update test templates Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * feat: update plugin template Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * feat: update plugin template Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * feat: update tempalte makefile Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * feat: add template for native plugin Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * feat: add readme for native template Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * feat: force boostrap to be a subcommnand Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * tests(plugin): added http streamable and error tests. Signed-off-by: Teryl Taylor <terylt@ibm.com> * tests: add tests for plugins CLI Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * fix: deprecation warning Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * tests: add CLI tests Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * tests: update plugin cli Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * tests(plugins): added client hook tests for external plugins. Signed-off-by: Teryl Taylor <terylt@ibm.com> * chore: update template readmes Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * fix: lint docstrings in cli Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * chore: fix lint errors in docstrings Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * chore: fix lint errors Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * tests: add external plugin server tests Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * chore: cleanup Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * chore: add missing docstrings Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * chore: add missing docstrings Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * tests: fix cli dryrun test Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * chore: fix lint issues Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * tests: fix teardown of client http tests Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * tests: skipping flaky tests Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * docs: plugin lifecycle tools Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * docs: add missing plugin lifecycle doc Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * Review, rebase and lint Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> --------- Signed-off-by: Teryl Taylor <terylt@ibm.com> Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> Co-authored-by: Teryl Taylor <terylt@ibm.com> Co-authored-by: Mihai Criveti <crivetimihai@gmail.com> * feat: Experimental Oauth 2.0 support in gateway (#768) * Oauth 2.1 design Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com> * oauth 2.0 design Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com> * Support for oauth auth type in gateway Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com> * Decrypt client secret Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com> * authorization code flow, token storage, tool fetching, tool calling with Oauth2.0 Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com> * test fixes Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com> * 256 fuzz testing (#760) * Implement comprehensive fuzz testing automation (#256) - Add property-based testing with Hypothesis for JSON-RPC, JSONPath, and schema validation - Add coverage-guided fuzzing with Atheris for deep code path exploration - Add API endpoint fuzzing with Schemathesis for contract validation - Add security-focused testing for vulnerability discovery (SQL injection, XSS, etc.) - Add complete Makefile automation with fuzz-all, fuzz-quick, fuzz-extended targets - Add optional [fuzz] dependency group in pyproject.toml for clean installation - Add comprehensive reporting with JSON/Markdown outputs and executive summaries - Add complete developer documentation with examples and troubleshooting guides - Exclude fuzz tests from main test suite to prevent auth failures - Found multiple real bugs in JSON-RPC validation during development Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Update fuzz testing Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Update fuzz testing Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> --------- Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * 344 cors security headers (#761) * Update CORS Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Update CORS Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Update CORS ADRs Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Update CORS Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Update CORS Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Fix compose Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Update helm chart Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Update CORS docs Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Update test Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> --------- Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com> * feat: Bulk Import Tools modal wiring #737 (#739) * feat: Bulk Import Tools modal wiring and backend implementation - Add modal UI in admin.html with bulk import button and dialog - Implement modal open/close/ESC functionality in admin.js - Add POST /admin/tools/import endpoint with rate limiting - Support both JSON textarea and file upload inputs - Validate JSON structure and enforce 200 tool limit - Return detailed success/failure information per tool - Include loading states and comprehensive error handling Refs #737 Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * fix: Remove duplicate admin_import_tools function and fix HTML formatting - Remove duplicate admin_import_tools function definition - Fix HTML placeholder attribute to use double quotes - Add missing closing div tag - Fix flake8 blank line issues Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * feat: Complete bulk import backend with file upload support and enhanced docs - Add file upload support to admin_import_tools endpoint - Fix response format to match frontend expectations - Add UI usage documentation with modal instructions - Update API docs to show all three input methods - Enhance bulk import guide with UI and API examples Backend improvements: - Support tools_file form field for JSON file uploads - Proper file content parsing with error handling - Response includes imported/failed counts and details - Frontend-compatible response format for UI display Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Bulk import Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * fix: Remove conflicting inline script and fix bulk import functionality - Remove conflicting inline JavaScript that was preventing form submission - Fix indentation in setupBulkImportModal function - Ensure bulk import modal uses proper admin.js implementation - Restore proper form submission handling for bulk import This fixes the issue where bulk import appeared to do nothing. Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * fix: Integrate bulk import setup with main initialization - Add setupBulkImportModal() to main initialization sequence - Remove duplicate DOMContentLoaded listener - Ensure bulk import doesn't interfere with other tab functionality Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * fix: JavaScript formatting issues in bulk import modal - Fix multiline querySelector formatting - Fix multiline Error constructor formatting - Ensure prettier compliance for web linting Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * debug: Temporarily disable bulk import setup to test tabs Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * fix: Remove duplicate setupFormValidation call and delay bulk import setup - Remove duplicate setupFormValidation() call that could cause conflicts - Use setTimeout to delay bulk import modal setup after other initialization - Add better null safety to form element queries - This should fix tab switching issues Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * fix: Restore proper initialization sequence for tab functionality - Remove setTimeout delay for bulk import setup - Keep bulk import setup in main initialization but with error handling - Ensure tab navigation isn't affected by bulk import modal setup Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * fix: Correct HTML structure and restore tab navigation - Move bulk import modal to correct location after tools panel - Remove extra closing div that was breaking HTML structure - Ensure proper page-level modal placement - Restore tab navigation functionality for all tabs This fixes the broken Global Resources, Prompts, Gateways, Roots, and Metrics tabs. Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * feat: Add configurable bulk import settings Configuration additions: - MCPGATEWAY_BULK_IMPORT_MAX_TOOLS (default: 200) - MCPGATEWAY_BULK_IMPORT_RATE_LIMIT (default: 10) Implementation: - config.py: Add new settings with defaults - admin.py: Use configurable rate limit and batch size - .env.example: Document all bulk import environment variables - admin.html: Use dynamic max tools value in UI text - CLAUDE.md: Document configuration options for developers - docs: Update bulk import guide with configuration details This makes bulk import fully configurable for different deployment scenarios. Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Update docs Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> --------- Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> Co-authored-by: Mihai Criveti <crivetimihai@gmail.com> Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com> * Implemented configuration export (#764) Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com> * cleanup Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com> * cleanup Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com> * fixes Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com> * ruff fixes Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com> * fix flake8 errors Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com> * fix eslint errors Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com> * aiohttp added in the main dependencies section of pyproject.toml Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com> * Review, rebase and lint Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Fix Alembic multiple heads issue Create merge migration to resolve parallel migration chains: - Main branch migrations (34492f99a0c4) - OAuth branch migrations (add_oauth_tokens_table) This resolves CI/CD test failures caused by Alembic not knowing which migration head to follow during 'alembic upgrade head'. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Fix Alembic migration chain - remove merge migration hack - Remove unnecessary merge migration file (813b45a70b53) - Fix OAuth config migration to follow proper chain (f8c9d3e2a1b4 → 34492f99a0c4) - OAuth tokens migration already correctly follows (add_oauth_tokens_table → f8c9d3e2a1b4) - Now single migration head without parallel branches This eliminates the 'Multiple heads are present' error in CI/CD tests by ensuring migrations follow a linear chain instead of creating parallel migration branches that need artificial merge migrations. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Review, rebase and lint Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> --------- Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com> Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> Co-authored-by: Shamsul Arefin <shamsul.arefin@iqvia.com> Co-authored-by: Mihai Criveti <crivetimihai@gmail.com> Co-authored-by: VK <90204593+vk-playground@users.noreply.github.com> Co-authored-by: Claude <noreply@anthropic.com> * Fix pre-commit hooks Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * 744 annotations (#784) * Fix annotations edit Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Fix annotations edit Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> --------- Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * fix: plugins template (#783) * feat: update context forge target in template's project dependencies Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * fix: exclude jinja files from reformatting tabs Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * fix: plugins cli defaults Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * fix: revert formatted Makefile template Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * feat: add optional packages Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * docs: update plugin template docs Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * docs: update template readme Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> --------- Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> * edit-tool Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com> * edit-tool Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com> * doc test Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com> * edit-tool Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com> * web lint Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com> * flake8 fix Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com> * pytest fix Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com> * revert with main Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com> * flake fix Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com> * revert with main Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com> * alembic Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com> * alembic change Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com> * flake8 fix Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com> * remove addtional line Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com> * alembic Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com> * Rebase and fix Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> --------- Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com> Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> Signed-off-by: Ian Molloy <molloyim@us.ibm.com> Signed-off-by: Madhav Kandukuri <madhav165@gmail.com> Signed-off-by: Vinod Muthusamy <770084+vinodmut@users.noreply.github.com> Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com> Signed-off-by: Vicky <vicky.kuo.contact@gmail.com> Signed-off-by: Veeresh K <veeruveeresh1522@gmail.com> Signed-off-by: Shoumi <shoumimukherjee@gmail.com> Signed-off-by: Mohan Lakshmaiah <mohalaks@in.ibm.com> Signed-off-by: Teryl Taylor <terylt@ibm.com> Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com> Co-authored-by: RAKHI DUTTA <rakdutta@in.ibm.com> Co-authored-by: Mihai Criveti <crivetimihai@gmail.com> Co-authored-by: Ian Molloy <i.m.molloy@gmail.com> Co-authored-by: Madhav Kandukuri <madhav165@users.noreply.github.com> Co-authored-by: Vinod Muthusamy <vinodmut@users.noreply.github.com> Co-authored-by: Vinod Muthusamy <770084+vinodmut@users.noreply.github.com> Co-authored-by: VK <90204593+vk-playground@users.noreply.github.com> Co-authored-by: Frederico Araujo <araujof@users.noreply.github.com> Co-authored-by: Madhav Kandukuri <madhav165@gmail.com> Co-authored-by: Vicky <vicky.kuo.contact@gmail.com> Co-authored-by: Veeresh K <42322782+nmveeresh@users.noreply.github.com> Co-authored-by: Shoumi M <55126549+shoummu1@users.noreply.github.com> Co-authored-by: Mohan Lakshmaiah <mohan.economist@gmail.com> Co-authored-by: Mohan Lakshmaiah <mohalaks@in.ibm.com> Co-authored-by: Teryl Taylor <terylt@ibm.com> Co-authored-by: Shamsul Arefin <shams@rijuk.com> Co-authored-by: Shamsul Arefin <shamsul.arefin@iqvia.com> Co-authored-by: Claude <noreply@anthropic.com>
What issue(s) are addressed by this PR?
Closes #720 #773
Add MCP Plugins CLI and External Plugin Support
Implementation Summary
This pull request extends the Context Forge's plugin system, enabling developers to extend the gateway's functionality through external plugins deployed as standalone services. The implementation introduces a new
mcpplugins
CLI tool that streamlines plugin development, deployment, and integration workflows.The external plugin integration leverages the Model Context Protocol's standardized interface to enable seamless communication between the Context Forge gateway and external plugin services, promoting modularity and extensibility.
Changes Made
New CLI Tool
mcpplugins
command-line interface for managing plugin lifecycle operationsPlugin Template System
MCP Client/Server Implementation
Breaking Changes: None - this is a purely additive feature that maintains backward compatibility with existing Context Forge deployments.
Migration Notes: Existing installations will automatically gain access to the new plugin system without requiring configuration changes. The
mcpplugins
CLI will be available after package installation.