Skip to content

Conversation

crivetimihai
Copy link
Member

Export/Import Configuration Management System - Pull Request

Closes #185 #186

This PR implements a comprehensive configuration export and import system for MCP Gateway, enabling complete backup, disaster recovery, environment promotion, and configuration management workflows.


🎯 Overview

This implementation provides enterprise-grade configuration management through multiple interfaces (CLI, REST API, Admin UI) while maintaining security, data integrity, and operational efficiency.

🎪 Demo

# Complete system backup
mcpgateway export --out backup-$(date +%F).json

# Cross-environment migration with key rotation
mcpgateway import staging-config.json --rekey-secret $PROD_SECRET --dry-run
mcpgateway import staging-config.json --rekey-secret $PROD_SECRET

# Admin UI: Navigate to /admin → "Export/Import" tab for visual management

FULLY IMPLEMENTED USER STORIES

All user stories from the original specification (todo/export.md) have been 100% completed:

🙋‍♂️ User Story 1: Complete CLI Export ✅

  • Implementation: mcpgateway export --out config-YYYYMMDD.json
  • Features: All entity types, filtering, encryption, dependency resolution
  • Status: FULLY FUNCTIONAL

🙋‍♂️ User Story 2: Comprehensive CLI Import ✅

  • Implementation: mcpgateway import file.json --dry-run --conflict-strategy=update
  • Features: Conflict resolution, validation, key rotation, selective import
  • Status: FULLY FUNCTIONAL

🙋‍♂️ User Story 3: Admin UI Export Interface ✅

  • Implementation: Visual export with entity selection and filtering
  • Location: /admin → "Export/Import" tab
  • Status: FULLY FUNCTIONAL

🙋‍♂️ User Story 4: Admin UI Import Wizard ✅

  • Implementation: Drag-and-drop import with conflict resolution
  • Features: Progress tracking, validation, conflict preview
  • Status: FULLY FUNCTIONAL

🙋‍♂️ User Story 5: Security and Encryption ✅

  • Implementation: AES-256-GCM encryption with key rotation
  • Features: Cross-environment support, secure credential handling
  • Status: FULLY FUNCTIONAL

🙋‍♂️ User Story 6: Partial and Filtered Export/Import ✅

  • Implementation: Type/tag filtering and selective imports
  • Features: Granular control over exported/imported entities
  • Status: FULLY FUNCTIONAL

🙋‍♂️ User Story 7: API-Based Export/Import ✅

  • Implementation: Complete REST API with job tracking
  • Features: Async processing, progress monitoring, CI/CD integration
  • Status: FULLY FUNCTIONAL

🏗 ARCHITECTURAL IMPLEMENTATION

Core Services

📦 Export Service (mcpgateway/services/export_service.py)

  • Purpose: Entity collection, data transformation, encryption
  • Key Features:
    • Collects all locally configured entities (excludes federated MCP tools)
    • Applies filtering by type, tags, and active/inactive status
    • Encrypts authentication data using existing encode_auth utilities
    • Resolves dependencies between entities
    • Validates export data against schema

📥 Import Service (mcpgateway/services/import_service.py)

  • Purpose: Import validation, conflict resolution, progress tracking
  • Key Features:
    • Validates import data structure and schema compliance
    • Handles 4 conflict resolution strategies (skip, update, rename, fail)
    • Supports dry-run validation without changes
    • Cross-environment key rotation with --rekey-secret
    • Real-time progress tracking and status reporting
    • Processes entities in dependency order

🖥 CLI Interface (mcpgateway/cli_export_import.py)

  • Purpose: Command-line interface for export/import operations
  • Key Features:
    • Extends existing mcpgateway CLI with export/import subcommands
    • Comprehensive filtering options and conflict resolution
    • Authentication via environment variables or config
    • User-friendly progress reporting and error handling

🔌 API ENDPOINTS IMPLEMENTED

Export Endpoints

Method Endpoint Description
GET /export Full configuration export with filtering
POST /export/selective Export specific entities by ID/name
GET /admin/export/configuration Admin UI export with file download
POST /admin/export/selective Admin UI selective export

Import Endpoints

Method Endpoint Description
POST /import Import configuration with conflict resolution
GET /import/status/{id} Get import operation status
GET /import/status List all import operations
POST /import/cleanup Clean up completed import statuses
POST /admin/import/configuration Admin UI import with progress tracking
GET /admin/import/status/{id} Admin UI import status
GET /admin/import/status Admin UI import list

🎨 ADMIN UI IMPLEMENTATION

Visual Components Added

Navigation

  • New Tab: "Export/Import" added to main navigation
  • Location: Between "Logs" and "Version Info" tabs
  • Proper Integration: Full tab switching and content loading

Export Section

  • Entity Selection: Checkboxes for all entity types (Tools, Gateways, Servers, Prompts, Resources, Roots)
  • Filtering Options: Tag-based filtering, include inactive entities, include dependencies
  • Export Actions: "Export All Configuration" and "Export Selected Types" buttons
  • Progress Indication: Animated progress bar during export operations
  • File Download: Automatic download with timestamped filenames

Import Section

  • Drag-and-Drop Upload: Visual file drop zone with hover effects
  • File Validation: JSON structure validation and preview
  • Conflict Resolution: Dropdown for strategy selection (skip, update, rename, fail)
  • Import Options: Dry-run checkbox, rekey-secret input for cross-environment imports
  • Progress Tracking: Real-time progress bars with entity counts (total, created, updated, failed)
  • Results Display: Formatted error and warning messages
  • Recent Operations: History of import operations with status and details

JavaScript Implementation

  • Secure Code: Uses existing escapeHtml() function for XSS protection
  • Event Handling: Proper event listeners for all interactions
  • API Integration: Fetch calls to backend export/import endpoints
  • Error Handling: Comprehensive error handling with user feedback
  • Toast Notifications: Success/error notifications for user actions
  • Progress Animation: Visual feedback during long operations

📊 EXPORT FILE SCHEMA

Complete implementation of the standardized export format:

{
  "version": "2025-03-26",
  "exported_at": "2025-01-15T10:30:00Z", 
  "exported_by": "admin",
  "source_gateway": "https://gateway.example.com:4444",
  "encryption_method": "AES-256-GCM",
  "entities": {
    "tools": [
      {
        "name": "weather_api",
        "url": "https://api.weather.com/v1/current",
        "integration_type": "REST",
        "auth_type": "bearer",
        "auth_value": "<encrypted-base64>",
        "tags": ["weather", "api"],
        "is_active": true
      }
    ],
    "gateways": [...],
    "servers": [...],
    "prompts": [...],
    "resources": [...],
    "roots": [...]
  },
  "metadata": {
    "entity_counts": {"tools": 15, "gateways": 3, "servers": 5},
    "dependencies": {"servers_to_tools": {...}},
    "export_options": {
      "include_inactive": false,
      "include_dependencies": true,
      "selected_types": ["tools", "gateways", "servers"],
      "filter_tags": ["production"]
    }
  }
}

🔐 SECURITY IMPLEMENTATION

Authentication Data Encryption

  • Method: AES-256-GCM using existing encode_auth/decode_auth utilities
  • Key Management: Uses AUTH_ENCRYPTION_SECRET environment variable
  • Cross-Environment: Support for key rotation via --rekey-secret parameter
  • Transport Security: Auth data remains encrypted in export files

Input Validation

  • Schema Validation: Complete JSON schema validation for import data
  • Field Validation: Required field checking per entity type
  • Security Checks: XSS prevention and input sanitization
  • Error Handling: Detailed error messages without information disclosure

Access Control

  • Authentication Required: All endpoints require JWT or basic auth
  • Authorization: Uses existing require_auth dependency injection
  • Admin UI: Integrates with existing authentication system

🧪 COMPREHENSIVE TEST COVERAGE

Unit Tests (24 tests total)

Export Service Tests (9 tests)

  • test_export_configuration_basic - Basic export functionality
  • test_export_configuration_with_filters - Filtering options
  • test_export_selective - Selective export by entity IDs
  • test_export_tools_filters_mcp - MCP tool filtering (local only)
  • test_export_validation_error - Error handling
  • test_validate_export_data_success - Schema validation
  • test_validate_export_data_missing_fields - Validation errors
  • test_validate_export_data_invalid_entities - Structure validation
  • test_extract_dependencies - Dependency resolution

Import Service Tests (15 tests)

  • test_validate_import_data_success - Schema validation
  • test_validate_import_data_missing_version - Version validation
  • test_validate_import_data_invalid_entities - Structure validation
  • test_validate_import_data_unknown_entity_type - Entity type validation
  • test_validate_entity_fields_missing_required - Required field validation
  • test_import_configuration_success - Successful import
  • test_import_configuration_dry_run - Dry-run functionality
  • test_import_configuration_conflict_skip - Skip conflict strategy
  • test_import_configuration_conflict_update - Update conflict strategy
  • test_import_configuration_conflict_fail - Fail conflict strategy
  • test_import_configuration_selective - Selective import
  • test_rekey_auth_data - Authentication re-encryption
  • test_import_status_tracking - Progress tracking
  • test_convert_schema_methods - Schema conversion
  • test_get_entity_identifier - Entity identification

Test Results

  • 24/24 tests passing
  • Comprehensive coverage of all core functionality
  • Mocked dependencies for isolated testing
  • Error scenario testing for robustness

📚 DOCUMENTATION SUITE

User Documentation

  • Main Guide: docs/docs/manage/export-import.md (17KB) - Comprehensive usage guide
  • Tutorial: docs/docs/manage/export-import-tutorial.md (10KB) - Step-by-step getting started
  • Quick Reference: docs/docs/manage/export-import-reference.md (5KB) - Command cheat sheets

Technical Documentation

  • Architecture: docs/docs/architecture/export-import-architecture.md (14KB) - System design
  • Updated Indexes: Added links to manage and architecture index pages

Documentation Features

  • Complete Examples: Real-world usage scenarios and workflows
  • Troubleshooting Guides: Common issues and solutions
  • API Reference: Detailed endpoint documentation
  • Security Guidelines: Best practices for production use
  • Automation Examples: CI/CD integration scripts

🔧 FILES MODIFIED/CREATED

Core Services

  • Created: mcpgateway/services/export_service.py (217 lines)
  • Created: mcpgateway/services/import_service.py (479 lines)

CLI Interface

  • Created: mcpgateway/cli_export_import.py (178 lines)
  • Modified: mcpgateway/cli.py - Added export/import command routing

API Endpoints

  • Modified: mcpgateway/main.py - Added export/import REST endpoints
  • Modified: mcpgateway/admin.py - Added Admin UI endpoints

User Interface

  • Modified: mcpgateway/templates/admin.html - Added Export/Import tab and panels
  • Modified: mcpgateway/static/admin.js - Added JavaScript functionality

Testing

  • Created: tests/unit/mcpgateway/services/test_export_service.py (9 tests)
  • Created: tests/unit/mcpgateway/services/test_import_service.py (15 tests)

Documentation

  • Created: docs/docs/manage/export-import.md (17KB)
  • Created: docs/docs/manage/export-import-tutorial.md (10KB)
  • Created: docs/docs/manage/export-import-reference.md (5KB)
  • Created: docs/docs/architecture/export-import-architecture.md (14KB)
  • Modified: docs/docs/manage/index.md - Added documentation links
  • Modified: docs/docs/architecture/index.md - Added architecture reference

Configuration

  • Modified: MANIFEST.in - Added new files to distribution

🚀 FEATURE IMPLEMENTATION DETAILS

Export Features

  • Complete Configuration Export: All locally configured entities
  • Filtering Options: By entity type (--types tools,gateways), tags (--tags production), status (--include-inactive)
  • Dependency Resolution: Automatic inclusion of dependent entities
  • Security: AES-256-GCM encrypted authentication data
  • Multiple Interfaces: CLI, REST API, Admin UI
  • Local Entity Focus: Excludes dynamic content from federated sources

Import Features

  • Schema Validation: Complete JSON structure validation
  • Conflict Resolution: 4 strategies (skip, update, rename, fail)
  • Dry-Run Capability: Validation without changes (--dry-run)
  • Cross-Environment Support: Key rotation (--rekey-secret)
  • Selective Import: Entity-specific imports (--include "tools:api_tool")
  • Progress Tracking: Real-time status with error/warning reporting
  • Dependency Ordering: Processes entities in correct order

Admin UI Features

  • Visual Entity Selection: Checkboxes for all entity types
  • Drag-and-Drop Import: File upload with validation and preview
  • Real-Time Progress: Animated progress bars and status displays
  • Conflict Resolution Interface: Visual strategy selection
  • Export Preview: Entity counts and dependency visualization
  • Recent Operations: History of import operations with details
  • Toast Notifications: User feedback for all operations

📊 SUPPORTED ENTITY TYPES

Entity Type Identifier Export Coverage Import Support
Tools name ✅ Local REST tools only ✅ Full CRUD with conflict resolution
Gateways name ✅ Peer connections with auth ✅ Full CRUD with auth re-encryption
Servers name ✅ Virtual server compositions ✅ Full CRUD with tool associations
Prompts name ✅ Template definitions ✅ Full CRUD with schema conversion
Resources uri ✅ Local resource metadata ✅ Full CRUD with content handling
Roots uri ✅ Filesystem and HTTP roots ✅ Full CRUD with URI validation

🔄 CONFLICT RESOLUTION STRATEGIES

Strategy Behavior Implementation
Skip Skip existing entities Status tracking, warning messages
Update Overwrite existing entities Find existing by name/URI, call update service
Rename Add timestamp suffix Create with modified name
Fail Stop on conflicts Raise ImportConflictError, track failures

🎛 CLI COMMAND REFERENCE

Export Commands

# Complete system backup
mcpgateway export --out backup-$(date +%F).json

# Filtered exports
mcpgateway export --types tools,gateways --tags production --out prod-config.json
mcpgateway export --exclude-types servers --include-inactive --out all-configs.json

# Verbose output with details
mcpgateway export --verbose --out detailed-backup.json

Import Commands

# Standard import with conflict resolution
mcpgateway import backup.json --conflict-strategy update

# Dry-run validation
mcpgateway import backup.json --dry-run

# Cross-environment migration
mcpgateway import staging-config.json --rekey-secret $PROD_SECRET

# Selective import
mcpgateway import backup.json --include "tools:weather_api;servers:ai_server"

🔒 SECURITY FEATURES

Encryption Implementation

  • Algorithm: AES-256-GCM (using existing crypto utilities)
  • Key Management: Environment-based secrets (AUTH_ENCRYPTION_SECRET)
  • Key Rotation: Support for cross-environment migration
  • Data Protection: Auth values encrypted at rest and in transit

Input Validation

  • Schema Validation: JSON schema compliance checking
  • Field Validation: Required field verification per entity type
  • XSS Prevention: HTML escaping in UI components
  • Type Safety: Pydantic schema validation throughout

Access Control

  • Authentication: JWT token or basic auth required
  • Authorization: Integration with existing auth system
  • Audit Logging: All operations logged with user attribution

📈 PERFORMANCE OPTIMIZATIONS

Export Performance

  • Parallel Collection: Async entity collection from services
  • Early Filtering: Reduce data processing overhead
  • Streaming Support: Large exports handled efficiently
  • Caching Integration: Uses existing resource cache where applicable

Import Performance

  • Dependency Ordering: Optimal processing sequence to minimize retries
  • Batch Processing: Entities processed in efficient batches
  • Progress Tracking: Lightweight status updates don't block processing
  • Error Isolation: Failed entities don't stop processing of others

🧪 QUALITY ASSURANCE

Code Quality Metrics

  • Pylint Score: 10.00/10 ⭐
  • Flake8: All issues resolved (except line length)
  • Type Coverage: Complete type hints throughout
  • Documentation: Full docstring coverage with Args/Returns/Raises

Testing Coverage

  • Unit Tests: 24 tests covering all core functionality
  • Integration: API endpoint testing
  • Error Scenarios: Comprehensive error handling validation
  • Mock Testing: Isolated service testing with proper mocks

Validation

  • Static Analysis: Passes all linting and security scans
  • Package Verification: MANIFEST.in updated, distributions build correctly
  • Syntax Validation: JavaScript and Python syntax verified
  • Cross-Platform: Works on all supported platforms

🎯 USAGE EXAMPLES

Complete Backup Workflow

# Daily automated backup
mcpgateway export --out "backups/daily-$(date +%F).json"

# Verify backup integrity
jq '.metadata.entity_counts' "backups/daily-$(date +%F).json"

Environment Promotion

# Export production-ready configs from staging
mcpgateway export --tags production --out staging-to-prod.json

# Import to production with validation
mcpgateway import staging-to-prod.json --rekey-secret $PROD_SECRET --dry-run
mcpgateway import staging-to-prod.json --rekey-secret $PROD_SECRET

Selective Configuration Management

# Export only critical tools
mcpgateway export --types tools --tags critical --out critical-tools.json

# Import specific tools to new environment
mcpgateway import backup.json --include "tools:weather_api,translate_service"

Admin UI Workflow

  1. Navigate to http://localhost:4444/admin
  2. Click "Export/Import" tab
  3. Export: Select entity types → Configure filters → Click "Export All"
  4. Import: Drag JSON file → Choose conflict strategy → Click "Validate" → Click "Execute"

🔧 TECHNICAL INTEGRATION

Service Layer Integration

  • Uses Existing Services: Integrates with ToolService, GatewayService, etc.
  • Maintains Patterns: Follows existing error handling and validation patterns
  • Async Compatibility: Fully async/await throughout for performance
  • Database Integration: Uses existing SQLAlchemy ORM and session management

Authentication Integration

  • Existing Auth System: Uses current JWT/basic auth infrastructure
  • Encryption Utilities: Leverages existing encode_auth/decode_auth
  • Session Management: Integrates with existing session handling

Error Handling

  • Consistent Patterns: Follows existing HTTPException patterns
  • Structured Logging: Uses existing logging service
  • User-Friendly Messages: Clear error messages without exposing internals

🎁 ADDITIONAL ENHANCEMENTS

Beyond the original specification, this implementation includes:

Enhanced CLI Experience

  • Smart Defaults: Automatic filename generation with timestamps
  • Verbose Mode: Detailed operation information
  • Progress Reporting: Real-time feedback for long operations
  • Error Recovery: Helpful error messages with suggested fixes

Advanced API Features

  • Async Processing: Non-blocking import operations with job tracking
  • Status Endpoints: Real-time progress monitoring
  • Cleanup Operations: Maintenance endpoints for completed imports
  • Content-Disposition: Proper file download headers

Production-Ready Features

  • Comprehensive Logging: Structured logs for all operations
  • Health Monitoring: Integration with existing health check system
  • Performance Monitoring: Metrics tracking for operations
  • Documentation: Complete user and technical documentation

🎊 VALIDATION & VERIFICATION

Manual Testing Performed

  • CLI Export: All filtering options and output formats
  • CLI Import: All conflict strategies and dry-run validation
  • API Endpoints: All REST endpoints with various parameters
  • Admin UI: Complete export/import workflow
  • Cross-Environment: Key rotation and migration scenarios
  • Error Handling: Invalid data, auth errors, network failures

Automated Testing

  • Unit Tests: 24 tests with 100% pass rate
  • Linting: Pylint 10.00/10, Flake8 compliant, ESLint passing
  • Security Scanning: No vulnerabilities detected
  • Package Building: Clean distribution builds

Performance Testing

  • Large Configurations: Tested with hundreds of entities
  • Cross-Environment: Validated key rotation functionality
  • Concurrent Operations: Multiple imports/exports handling
  • Memory Usage: No memory leaks or excessive resource usage

🚀 READY FOR PRODUCTION

This implementation provides a complete, enterprise-grade configuration management solution that:

  • Meets All Requirements from the original specification
  • Exceeds Quality Standards with perfect code quality scores
  • Provides Multiple Interfaces for different user preferences
  • Maintains Security with proper encryption and validation
  • Includes Comprehensive Documentation for immediate adoption
  • Offers Production Features like monitoring and health checks

Immediate Benefits

  • Disaster Recovery: Complete system backup and restore capability
  • Environment Management: Easy promotion between dev/staging/production
  • Configuration Versioning: Track and restore configuration changes
  • Team Collaboration: Share and synchronize gateway configurations
  • Operational Efficiency: Automated backup and deployment workflows

🎯 CLOSES ISSUES

Both issues have been fully implemented along with all related import functionality, Admin UI, documentation, and comprehensive testing as specified in the original requirements.


image

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
@crivetimihai crivetimihai marked this pull request as ready for review August 17, 2025 22:21
Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
@crivetimihai crivetimihai merged commit fece0aa into main Aug 17, 2025
37 checks passed
@crivetimihai crivetimihai deleted the 185-186-import-export branch August 17, 2025 22:38
rakdutta pushed a commit to rakdutta/mcp-context-forge that referenced this pull request Aug 19, 2025
* 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>
crivetimihai added a commit that referenced this pull request Aug 20, 2025
…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>
vk-playground pushed a commit to vk-playground/mcp-context-forge that referenced this pull request Sep 14, 2025
* 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>
vk-playground added a commit to vk-playground/mcp-context-forge that referenced this pull request Sep 14, 2025
…g Implementation (IBM#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) (IBM#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 (IBM#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 (IBM#748)

Signed-off-by: Ian Molloy <molloyim@us.ibm.com>

* Adds RPC endpoints and updates RPC response and error handling (IBM#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 (IBM#754)

* Fix tool invocation 'Invalid method' error with backward compatibility (IBM#753)

- Add backward compatibility for direct tool invocation (pre-PR IBM#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 IBM#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 (IBM#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 (IBM#759)

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* Remove redundant title in readme. (IBM#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 (IBM#760)

* Implement comprehensive fuzz testing automation (IBM#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 (IBM#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 IBM#737 (IBM#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 IBM#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 (IBM#764)

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* 185 186 import export (IBM#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 (IBM#767)

Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com>

* Well known (IBM#770)

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* Update docs with jsonrpc tutorial (IBM#772)

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* 137 metadata timestamps (IBM#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 IBM#262: MCP Langchain Agent (IBM#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 IBM#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 (IBM#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 (IBM#777)

Signed-off-by: Shoumi <shoumimukherjee@gmail.com>

* Test case update (IBM#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 (IBM#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 (IBM#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 (IBM#760)

* Implement comprehensive fuzz testing automation (IBM#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 (IBM#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 IBM#737 (IBM#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 IBM#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 (IBM#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 (IBM#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 (IBM#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>
vk-playground pushed a commit to vk-playground/mcp-context-forge that referenced this pull request Sep 14, 2025
* 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>
vk-playground added a commit to vk-playground/mcp-context-forge that referenced this pull request Sep 14, 2025
…g Implementation (IBM#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) (IBM#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 (IBM#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 (IBM#748)

Signed-off-by: Ian Molloy <molloyim@us.ibm.com>

* Adds RPC endpoints and updates RPC response and error handling (IBM#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 (IBM#754)

* Fix tool invocation 'Invalid method' error with backward compatibility (IBM#753)

- Add backward compatibility for direct tool invocation (pre-PR IBM#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 IBM#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 (IBM#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 (IBM#759)

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* Remove redundant title in readme. (IBM#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 (IBM#760)

* Implement comprehensive fuzz testing automation (IBM#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 (IBM#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 IBM#737 (IBM#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 IBM#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 (IBM#764)

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* 185 186 import export (IBM#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 (IBM#767)

Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com>

* Well known (IBM#770)

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* Update docs with jsonrpc tutorial (IBM#772)

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* 137 metadata timestamps (IBM#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 IBM#262: MCP Langchain Agent (IBM#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 IBM#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 (IBM#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 (IBM#777)

Signed-off-by: Shoumi <shoumimukherjee@gmail.com>

* Test case update (IBM#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 (IBM#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 (IBM#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 (IBM#760)

* Implement comprehensive fuzz testing automation (IBM#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 (IBM#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 IBM#737 (IBM#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 IBM#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 (IBM#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 (IBM#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 (IBM#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>
vk-playground pushed a commit to vk-playground/mcp-context-forge that referenced this pull request Sep 16, 2025
* 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>
vk-playground added a commit to vk-playground/mcp-context-forge that referenced this pull request Sep 16, 2025
…g Implementation (IBM#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) (IBM#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 (IBM#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 (IBM#748)

Signed-off-by: Ian Molloy <molloyim@us.ibm.com>

* Adds RPC endpoints and updates RPC response and error handling (IBM#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 (IBM#754)

* Fix tool invocation 'Invalid method' error with backward compatibility (IBM#753)

- Add backward compatibility for direct tool invocation (pre-PR IBM#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 IBM#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 (IBM#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 (IBM#759)

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* Remove redundant title in readme. (IBM#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 (IBM#760)

* Implement comprehensive fuzz testing automation (IBM#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 (IBM#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 IBM#737 (IBM#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 IBM#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 (IBM#764)

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* 185 186 import export (IBM#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 (IBM#767)

Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com>

* Well known (IBM#770)

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* Update docs with jsonrpc tutorial (IBM#772)

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* 137 metadata timestamps (IBM#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 IBM#262: MCP Langchain Agent (IBM#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 IBM#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 (IBM#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 (IBM#777)

Signed-off-by: Shoumi <shoumimukherjee@gmail.com>

* Test case update (IBM#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 (IBM#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 (IBM#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 (IBM#760)

* Implement comprehensive fuzz testing automation (IBM#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 (IBM#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 IBM#737 (IBM#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 IBM#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 (IBM#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 (IBM#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 (IBM#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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant