Skip to content

Conversation

@shams858
Copy link
Contributor

🚀 Add OAuth 2.0 Authorization-Code flow to MCP Gateway (Experimental)

This PR introduces OAuth 2.0 support (Authorization-Code & Client-Credentials) across the Gateway, Admin UI and Tool-invocation paths.


✨ What’s new

1 OAuth Manager

  • Async wrapper around aiohttp that:
    • Generates authorization URLs (GET /oauth/authorize/{gateway_id})
    • Exchanges authorization codes for tokens
    • Refreshes / retries with exponential back-off
  • Pluggable decryptor for encrypted client_secrets (future KMS integration).

2 Token Storage

  • oauth_tokens table (Alembic migration add_oauth_tokens_table.py)
    Stores access_token, optional refresh_token, expires_at, user_id, gateway_id.
CREATE TABLE oauth_tokens (
    id           TEXT PRIMARY KEY,
    gateway_id   TEXT NOT NULL,
    user_id      TEXT NOT NULL,
    access_token TEXT NOT NULL,
    refresh_token TEXT,
    expires_at   TIMESTAMP,
    created_at   TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE INDEX ix_oauth_tokens_gateway_user ON oauth_tokens (gateway_id, user_id);

3 Gateway Service + Routers

  • New /oauth/callback & /oauth/fetch-tools/{gateway_id} endpoints.
  • GatewayService.fetch_tools_after_oauth() pulls tools/resources/prompts once the user finishes the consent screen.
  • Admin UI surface (template / admin.js) to start / monitor OAuth.

4 Tool Service integration

Tools tagged with auth_type="oauth" automatically:

  1. Look up a valid token in TokenStorageService
  2. Refresh (if refresh_token present & near expiry)
  3. Inject Authorization: Bearer <token> header.

5 Unit tests

  • new tests covering:
    • happy-path for both flows
    • retry / refresh logic
    • DB migration up/down
  • Existing suites adapted (mocks for async context-managers).

6 Docs

  • docs/architecture/oauth-authorization-code-ui-design.md – sequence diagram, UI wireframe, curl examples.

🖼️ High-level flow

sequenceDiagram
    participant U as Browser
    participant A as Admin UI
    participant G as Gateway API
    participant GH as GitHub OAuth

    U->>A: Click "Authorize"
    A->>G: GET /oauth/authorize/{gateway}
    G->>GH: Redirect (client_id, redirect_uri, state)
    GH-->>U: Consent Screen
    U-->>GH: Approve
    GH->>G: 302  /oauth/callback?code&state
    G->>GH: POST /access_token (code,…)
    GH-->>G: access_token
    G->>DB:  INSERT oauth_tokens
    G-->>A: 200 OK (tools fetched)
Loading

🔧 Migration / Deployment

  1. Run Alembic
    alembic upgrade head
  2. Env vars (optional)
    OAUTH_REQUEST_TIMEOUT=30
    OAUTH_MAX_RETRIES=3
    
  3. Configure Gateways (example):
    {
      "name": "Github",
      "url": "https://api.githubcopilot.com/mcp/",
      "transport": "STREAMABLEHTTP",
      "auth_type": "oauth",
      "oauth_config": {
        "grant_type": "authorization_code",
        "client_id": "xxxx",
        "client_secret": "Z0FBQUFB...",
        "authorization_url": "https://github.com/login/oauth/authorize",
        "token_url": "https://github.com/login/oauth/access_token",
        "redirect_uri": "http://<gateway>/oauth/callback",
        "scopes": ["repo","user","email"],
        "token_management": { "store_tokens": true, "auto_refresh": true }
      }
    }

⚠️ Limitations & Next steps

  • Refresh-token support is provider-dependent – refresh flow untested.
  • Multi-user separation is basic (user_id extracted from token response or fallback). Full RBAC still TODO.
  • Implement PKCE according to OAuth 2.1 standard and other authorization flow standards according to MCP specification.
  • Only tools are saved, prompts and resources saving implementation is pending.
  • Admin UI improvement needed.
  • Health-check for OAuth gateways is skipped until first successful consent.
  • Linter surfaces many # type: ignore fixes we will address post-merge.
  • Remove code duplication.
  • Increase Unit test coverage.
  • Rigorous testing of the end to end flow.
  • Gateway status check.

Add Gateway with Oauth

image

Redirect, User Consent, Authorize and Fetch and Save tools

image

List Tools

image

Tool Test/Invoke

image ---

List Gateway with auth_type == oauth

image

Initial attempt to address this feature #605.

Thanks for reviewing!

Shamsul Arefin and others added 17 commits August 18, 2025 16:52
Signed-off-by: Shamsul Arefin <[email protected]>
Signed-off-by: Shamsul Arefin <[email protected]>
Signed-off-by: Shamsul Arefin <[email protected]>
Signed-off-by: Shamsul Arefin <[email protected]>
* 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 <[email protected]>

* Update fuzz testing

Signed-off-by: Mihai Criveti <[email protected]>

* Update fuzz testing

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Mihai Criveti <[email protected]>
* Update CORS

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS ADRs

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS

Signed-off-by: Mihai Criveti <[email protected]>

* Fix compose

Signed-off-by: Mihai Criveti <[email protected]>

* Update helm chart

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS docs

Signed-off-by: Mihai Criveti <[email protected]>

* Update test

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Mihai Criveti <[email protected]>
Signed-off-by: Shamsul Arefin <[email protected]>
* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* Bulk import

Signed-off-by: Mihai Criveti <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* debug: Temporarily disable bulk import setup to test tabs

Signed-off-by: Mihai Criveti <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* Update docs

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Mihai Criveti <[email protected]>
Co-authored-by: Mihai Criveti <[email protected]>
Signed-off-by: Shamsul Arefin <[email protected]>
Signed-off-by: Mihai Criveti <[email protected]>
Signed-off-by: Shamsul Arefin <[email protected]>
Signed-off-by: Shamsul Arefin <[email protected]>
Signed-off-by: Shamsul Arefin <[email protected]>
Signed-off-by: Shamsul Arefin <[email protected]>
Signed-off-by: Shamsul Arefin <[email protected]>
Signed-off-by: Shamsul Arefin <[email protected]>
Signed-off-by: Shamsul Arefin <[email protected]>
@shams858 shams858 force-pushed the oauth-2-1-support-in-gateway branch from e3c6924 to 3695fe6 Compare August 18, 2025 11:56
@crivetimihai
Copy link
Member

This is awesome! Will rebase, fix merge conflicts, test and push upstream. Review in progress.

crivetimihai and others added 5 commits August 19, 2025 01:15
Signed-off-by: Mihai Criveti <[email protected]>
Resolves conflicts by combining:
- OAuth 2.0 functionality from oauth branch
- Latest main branch features including metadata capture
- Maintains all pylint fixes and code quality improvements

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

Co-Authored-By: Claude <[email protected]>
Signed-off-by: Mihai Criveti <[email protected]>
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 <[email protected]>
Signed-off-by: Mihai Criveti <[email protected]>
- 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 <[email protected]>
Signed-off-by: Mihai Criveti <[email protected]>
Signed-off-by: Mihai Criveti <[email protected]>
Copy link
Member

@crivetimihai crivetimihai left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR 768 Review: OAuth 2.0 Support in MCP Gateway

✅ Review Summary

APPROVED - This PR successfully implements OAuth 2.0 support addressing the core requirements from Issue #605. The implementation provides a solid foundation for OAuth-based per-user access to remote MCP servers.

Remaining tasks tracked in #782, closes #605

Issue Requirements vs Implementation

Requirement Status Implementation
Connect to remote MCP servers without local setup COMPLETE SSE/HTTP transport with OAuth authentication
OAuth support for per-user credentials COMPLETE Authorization Code + Client Credentials flows
Multiple user credentials (not shared PAT) COMPLETE Per-user token storage with encryption
GitHub MCP server compatibility COMPLETE OAuth configuration supports GitHub's flow

Architecture Review

Strengths

  • Clean OAuth abstraction with OAuthManager handling both grant types
  • Secure token storage with encryption using AUTH_ENCRYPTION_SECRET
  • Database schema properly designed with foreign keys and indexes
  • UI integration with Admin UI forms and authorization flows
  • Error handling with clear user guidance for OAuth setup
  • Security best practices including CSRF protection via state parameters

Code Quality

  • Comprehensive testing with unit tests for OAuth flows
  • Type hints and proper documentation throughout
  • Database migrations properly structured
  • Following project conventions for error handling and logging

🔧 Issues Fixed During Review

1. Code Quality & Linting

  • Pylint issues (9.98/10 → 10.00/10)
    • Fixed import-outside-toplevel violations
    • Removed unnecessary else clauses after returns
    • Added pylint disable comments for unavoidable cases
    • Fixed import order (standard before third-party)
    • Fixed implicit string concatenation

2. Database Migration Issues

  • Multiple Alembic heads causing CI/CD failures
    • Root cause: OAuth migrations created parallel migration chains
    • Fixed: Updated f8c9d3e2a1b4 to follow 34492f99a0c4 instead of eb17fd368f9d
    • Removed: Unnecessary merge migration hack (813b45a70b53)
    • Result: Clean linear migration chain without parallel branches

3. Branch Integration

  • Merge conflicts with main branch
    • Fixed: Merged latest main branch features including metadata capture
    • Preserved: All OAuth functionality during merge
    • Combined: OAuth features + export/import + security headers + metadata tracking

📋 Remaining TODOs for Future Enhancements

High Priority

  • Implement refresh token flow - Currently placeholder in token_storage_service.py:208
  • Enhance user identification - Better user ID extraction from token responses
  • Add token management UI - Admin interface for viewing/revoking user tokens
  • Resource & prompt fetching - OAuth implementation focuses on tools, expand to other entities

Medium Priority

  • PKCE support - OAuth 2.1 standard for enhanced security
  • Token cleanup job - Automated cleanup of expired tokens
  • Multi-user token selection - UI for choosing which user's tokens to use
  • OAuth provider templates - Pre-configured settings for GitHub, Google, etc.

Low Priority

  • OAuth token introspection - Validate tokens with OAuth provider
  • Scope management - Fine-grained permission control
  • OAuth audit logging - Track OAuth operations for compliance
  • Performance optimization - Token caching and connection pooling

🧪 Quality Metrics

Test Coverage

  • Unit Tests: ✅ 2116 passed, 15 skipped
  • OAuth Manager: ✅ 7 test methods covering happy/error paths
  • Integration Tests: ✅ All passing
  • Doctests: ✅ 489 passed, 6 skipped

Code Quality Scores

  • Pylint: ✅ 10.00/10 (perfect score)
  • Flake8: ✅ No violations
  • Bandit: ✅ Security checks passed
  • Coverage: ✅ 76% overall coverage
  • Verify: ✅ Package build/distribution checks passed

🎯 Implementation Highlights

Core Components Added

mcpgateway/
├── services/
│   ├── oauth_manager.py          # OAuth 2.0 flow management
│   └── token_storage_service.py  # Encrypted token storage
├── routers/
│   └── oauth_router.py          # OAuth endpoints (/oauth/*)  
├── utils/
│   └── oauth_encryption.py     # Token encryption utilities
├── alembic/versions/
│   ├── f8c9d3e2a1b4_*.py      # OAuth config column
│   └── add_oauth_tokens_table.py # OAuth tokens table
└── db.py                        # OAuthToken ORM model

Key Features

  • Authorization Code Flow: User consent with redirect to OAuth provider
  • Client Credentials Flow: Machine-to-machine authentication
  • Token Encryption: All sensitive tokens encrypted at rest
  • Admin UI Integration: OAuth configuration in gateway creation
  • Tool Integration: Automatic OAuth token injection for MCP tool calls

🔄 CI/CD Status

Before Fixes

  • ❌ Multiple Alembic heads error
  • ❌ Pylint violations (9.98/10)
  • ❌ Import/code style issues

After Fixes

  • ✅ Single Alembic migration head
  • ✅ Perfect Pylint score (10.00/10)
  • ✅ All quality checks passing
  • ✅ Clean merge with main branch

📝 Recommendation

APPROVE AND MERGE - This PR provides excellent OAuth 2.0 foundation that fully addresses Issue #605 requirements. The implementation follows security best practices, maintains high code quality, and integrates well with the existing architecture.

The remaining TODOs are enhancements rather than blockers, and can be addressed in future iterations.

@crivetimihai crivetimihai merged commit b83c7fa into IBM:main Aug 19, 2025
35 of 36 checks passed
@crivetimihai
Copy link
Member

@shams858 thanks, merging - remaining tasks tracked in #782

@madhav165 please test as well.

@madhav165
Copy link
Collaborator

Worked as shown in the PR.

rakdutta pushed a commit to rakdutta/mcp-context-forge that referenced this pull request Aug 19, 2025
* Oauth 2.1 design

Signed-off-by: Shamsul Arefin <[email protected]>

* oauth 2.0 design

Signed-off-by: Shamsul Arefin <[email protected]>

* Support for oauth auth type in gateway

Signed-off-by: Shamsul Arefin <[email protected]>

* Decrypt client secret

Signed-off-by: Shamsul Arefin <[email protected]>

* authorization code flow, token storage, tool fetching, tool calling with Oauth2.0

Signed-off-by: Shamsul Arefin <[email protected]>

* test fixes

Signed-off-by: Shamsul Arefin <[email protected]>

* 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 <[email protected]>

* Update fuzz testing

Signed-off-by: Mihai Criveti <[email protected]>

* Update fuzz testing

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Mihai Criveti <[email protected]>

* 344 cors security headers (IBM#761)

* Update CORS

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS ADRs

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS

Signed-off-by: Mihai Criveti <[email protected]>

* Fix compose

Signed-off-by: Mihai Criveti <[email protected]>

* Update helm chart

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS docs

Signed-off-by: Mihai Criveti <[email protected]>

* Update test

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Mihai Criveti <[email protected]>
Signed-off-by: Shamsul Arefin <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* Bulk import

Signed-off-by: Mihai Criveti <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* debug: Temporarily disable bulk import setup to test tabs

Signed-off-by: Mihai Criveti <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* Update docs

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Mihai Criveti <[email protected]>
Co-authored-by: Mihai Criveti <[email protected]>
Signed-off-by: Shamsul Arefin <[email protected]>

* Implemented configuration export (IBM#764)

Signed-off-by: Mihai Criveti <[email protected]>
Signed-off-by: Shamsul Arefin <[email protected]>

* cleanup

Signed-off-by: Shamsul Arefin <[email protected]>

* cleanup

Signed-off-by: Shamsul Arefin <[email protected]>

* fixes

Signed-off-by: Shamsul Arefin <[email protected]>

* ruff fixes

Signed-off-by: Shamsul Arefin <[email protected]>

* fix flake8 errors

Signed-off-by: Shamsul Arefin <[email protected]>

* fix eslint errors

Signed-off-by: Shamsul Arefin <[email protected]>

* aiohttp added in the main dependencies section of pyproject.toml

Signed-off-by: Shamsul Arefin <[email protected]>

* Review, rebase and lint

Signed-off-by: Mihai Criveti <[email protected]>

* 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 <[email protected]>
Signed-off-by: Mihai Criveti <[email protected]>

* 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 <[email protected]>
Signed-off-by: Mihai Criveti <[email protected]>

* Review, rebase and lint

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Shamsul Arefin <[email protected]>
Signed-off-by: Mihai Criveti <[email protected]>
Co-authored-by: Shamsul Arefin <[email protected]>
Co-authored-by: Mihai Criveti <[email protected]>
Co-authored-by: VK <[email protected]>
Co-authored-by: Claude <[email protected]>
@sbweeden
Copy link

I know this PR is merged and closed, but how should I correctly report/suggest additional remaining TODO's?

In particular I noticed that in the admin UI when I edit an existing MCP server configuration, none of the existing OAuth configuration is visible or editable.

madhav165 pushed a commit that referenced this pull request Aug 20, 2025
* Oauth 2.1 design

Signed-off-by: Shamsul Arefin <[email protected]>

* oauth 2.0 design

Signed-off-by: Shamsul Arefin <[email protected]>

* Support for oauth auth type in gateway

Signed-off-by: Shamsul Arefin <[email protected]>

* Decrypt client secret

Signed-off-by: Shamsul Arefin <[email protected]>

* authorization code flow, token storage, tool fetching, tool calling with Oauth2.0

Signed-off-by: Shamsul Arefin <[email protected]>

* test fixes

Signed-off-by: Shamsul Arefin <[email protected]>

* 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 <[email protected]>

* Update fuzz testing

Signed-off-by: Mihai Criveti <[email protected]>

* Update fuzz testing

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Mihai Criveti <[email protected]>

* 344 cors security headers (#761)

* Update CORS

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS ADRs

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS

Signed-off-by: Mihai Criveti <[email protected]>

* Fix compose

Signed-off-by: Mihai Criveti <[email protected]>

* Update helm chart

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS docs

Signed-off-by: Mihai Criveti <[email protected]>

* Update test

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Mihai Criveti <[email protected]>
Signed-off-by: Shamsul Arefin <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* Bulk import

Signed-off-by: Mihai Criveti <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* debug: Temporarily disable bulk import setup to test tabs

Signed-off-by: Mihai Criveti <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* Update docs

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Mihai Criveti <[email protected]>
Co-authored-by: Mihai Criveti <[email protected]>
Signed-off-by: Shamsul Arefin <[email protected]>

* Implemented configuration export (#764)

Signed-off-by: Mihai Criveti <[email protected]>
Signed-off-by: Shamsul Arefin <[email protected]>

* cleanup

Signed-off-by: Shamsul Arefin <[email protected]>

* cleanup

Signed-off-by: Shamsul Arefin <[email protected]>

* fixes

Signed-off-by: Shamsul Arefin <[email protected]>

* ruff fixes

Signed-off-by: Shamsul Arefin <[email protected]>

* fix flake8 errors

Signed-off-by: Shamsul Arefin <[email protected]>

* fix eslint errors

Signed-off-by: Shamsul Arefin <[email protected]>

* aiohttp added in the main dependencies section of pyproject.toml

Signed-off-by: Shamsul Arefin <[email protected]>

* Review, rebase and lint

Signed-off-by: Mihai Criveti <[email protected]>

* 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 <[email protected]>
Signed-off-by: Mihai Criveti <[email protected]>

* 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 <[email protected]>
Signed-off-by: Mihai Criveti <[email protected]>

* Review, rebase and lint

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Shamsul Arefin <[email protected]>
Signed-off-by: Mihai Criveti <[email protected]>
Co-authored-by: Shamsul Arefin <[email protected]>
Co-authored-by: Mihai Criveti <[email protected]>
Co-authored-by: VK <[email protected]>
Co-authored-by: Claude <[email protected]>
crivetimihai added a commit that referenced this pull request Aug 20, 2025
…g Implementation (#786)

* db.py update

Signed-off-by: RAKHI DUTTA <[email protected]>

* edit-tool

Signed-off-by: RAKHI DUTTA <[email protected]>

* edit-tool

Signed-off-by: RAKHI DUTTA <[email protected]>

* edit-tool

Signed-off-by: RAKHI DUTTA <[email protected]>

* edit-tool

Signed-off-by: RAKHI DUTTA <[email protected]>

* edit-tool

Signed-off-by: RAKHI DUTTA <[email protected]>

* edit-tool

Signed-off-by: RAKHI DUTTA <[email protected]>

* doc test

Signed-off-by: RAKHI DUTTA <[email protected]>

* pytest

Signed-off-by: RAKHI DUTTA <[email protected]>

* pytest

Signed-off-by: RAKHI DUTTA <[email protected]>

* revert alembic with main version

Signed-off-by: RAKHI DUTTA <[email protected]>

* 138 view realtime logs in UI and export logs (CSV, JSON) (#747)

* Add logging UI

Signed-off-by: Mihai Criveti <[email protected]>

* Add logging UI

Signed-off-by: Mihai Criveti <[email protected]>

* Add logging UI

Signed-off-by: Mihai Criveti <[email protected]>

* Add logging UI readme

Signed-off-by: Mihai Criveti <[email protected]>

* Update logging flake8

Signed-off-by: Mihai Criveti <[email protected]>

* Update logging flake8

Signed-off-by: Mihai Criveti <[email protected]>

* test coverage

Signed-off-by: Mihai Criveti <[email protected]>

* test coverage

Signed-off-by: Mihai Criveti <[email protected]>

* Fix download

Signed-off-by: Mihai Criveti <[email protected]>

* Fix test

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Mihai Criveti <[email protected]>

* 749 reverse proxy (#750)

* Fix download

Signed-off-by: Mihai Criveti <[email protected]>

* Reverse proxy

Signed-off-by: Mihai Criveti <[email protected]>

* Reverse proxy

Signed-off-by: Mihai Criveti <[email protected]>

* Reverse proxy

Signed-off-by: Mihai Criveti <[email protected]>

* doctest improvements

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Mihai Criveti <[email protected]>

* (fix) Added missing prompts/get (#748)

Signed-off-by: Ian Molloy <[email protected]>

* Adds RPC endpoints and updates RPC response and error handling (#746)

* Fix rpc endpoints
Signed-off-by: Madhav Kandukuri <[email protected]>

* Remove commented code
Signed-off-by: Madhav Kandukuri <[email protected]>

* remove duplicate code in session registry

Signed-off-by: Madhav Kandukuri <[email protected]>

* Linting fixes
Signed-off-by: Madhav Kandukuri <[email protected]>

* Fix tests
Signed-off-by: Madhav Kandukuri <[email protected]>

---------

Signed-off-by: Madhav Kandukuri <[email protected]>

* 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 <[email protected]>

* Fix flake8 E722: Replace bare except with Exception

Signed-off-by: Mihai Criveti <[email protected]>

* lint

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Mihai Criveti <[email protected]>

* 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 <[email protected]>

* Add agents file

Signed-off-by: Mihai Criveti <[email protected]>

* pylint (#759)

Signed-off-by: Mihai Criveti <[email protected]>

* Remove redundant title in readme. (#757)

Signed-off-by: Vinod Muthusamy <[email protected]>
Co-authored-by: Vinod Muthusamy <[email protected]>

* Update documentation with fixed image tag

Signed-off-by: Mihai Criveti <[email protected]>

* 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 <[email protected]>

* Update fuzz testing

Signed-off-by: Mihai Criveti <[email protected]>

* Update fuzz testing

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Mihai Criveti <[email protected]>

* 344 cors security headers (#761)

* Update CORS

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS ADRs

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS

Signed-off-by: Mihai Criveti <[email protected]>

* Fix compose

Signed-off-by: Mihai Criveti <[email protected]>

* Update helm chart

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS docs

Signed-off-by: Mihai Criveti <[email protected]>

* Update test

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Mihai Criveti <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* Bulk import

Signed-off-by: Mihai Criveti <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* debug: Temporarily disable bulk import setup to test tabs

Signed-off-by: Mihai Criveti <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* Update docs

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Mihai Criveti <[email protected]>
Co-authored-by: Mihai Criveti <[email protected]>

* Implemented configuration export (#764)

Signed-off-by: Mihai Criveti <[email protected]>

* 185 186 import export (#769)

* Import export

Signed-off-by: Mihai Criveti <[email protected]>

* Import export

Signed-off-by: Mihai Criveti <[email protected]>

* Import export

Signed-off-by: Mihai Criveti <[email protected]>

* Import export

Signed-off-by: Mihai Criveti <[email protected]>

* Import export

Signed-off-by: Mihai Criveti <[email protected]>

* Import export

Signed-off-by: Mihai Criveti <[email protected]>

* Import export

Signed-off-by: Mihai Criveti <[email protected]>

* Import export

Signed-off-by: Mihai Criveti <[email protected]>

* Import export testing

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Mihai Criveti <[email protected]>

* fix: local network address translation in discovery module (#767)

Signed-off-by: Frederico Araujo <[email protected]>

* Well known (#770)

Signed-off-by: Mihai Criveti <[email protected]>

* Update docs with jsonrpc tutorial (#772)

Signed-off-by: Mihai Criveti <[email protected]>

* 137 metadata timestamps (#776)

* Metadata / creation dates

Signed-off-by: Mihai Criveti <[email protected]>

* Metadata / creation dates

Signed-off-by: Mihai Criveti <[email protected]>

* Metadata / creation dates

Signed-off-by: Mihai Criveti <[email protected]>

* Security headers CSP

Signed-off-by: Mihai Criveti <[email protected]>

* Display metadata for resources
Signed-off-by: Madhav Kandukuri <[email protected]>

* eslint fix
Signed-off-by: Madhav Kandukuri <[email protected]>

---------

Signed-off-by: Mihai Criveti <[email protected]>
Co-authored-by: Madhav Kandukuri <[email protected]>

* feat #262: MCP Langchain Agent (#781)

* feat: Add bulk import UI modal for tools

Signed-off-by: Vicky <[email protected]>

* feat: Add Langchain agent with OpenAI & A2A endpoints (refs #262)

Signed-off-by: Vicky <[email protected]>

* lint: prettier fix at ~L8090 (insert newline)

Signed-off-by: Vicky <[email protected]>

---------

Signed-off-by: Vicky <[email protected]>
Co-authored-by: Vicky <[email protected]>

* Cleanup pr

Signed-off-by: Mihai Criveti <[email protected]>

* Cleanup pr

Signed-off-by: Mihai Criveti <[email protected]>

* Issue 587/rest tool error (#778)

* added params extraction from url logic

Signed-off-by: Veeresh K <[email protected]>

* added params extraction from url logic

Signed-off-by: Veeresh K <[email protected]>

* Rebase and lint / test

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Veeresh K <[email protected]>
Signed-off-by: Mihai Criveti <[email protected]>
Co-authored-by: Mihai Criveti <[email protected]>

* edit column header (#777)

Signed-off-by: Shoumi <[email protected]>

* Test case update (#775)

* session_registry test case updates

Signed-off-by: Mohan Lakshmaiah <[email protected]>

* test case update for routers/reverse_proxy

Signed-off-by: Mohan Lakshmaiah <[email protected]>

* test case update to mcpgateway/reverse_proxy.py

Signed-off-by: Mohan Lakshmaiah <[email protected]>

* Fix formatting issues from pre-commit hooks

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Mohan Lakshmaiah <[email protected]>
Signed-off-by: Mihai Criveti <[email protected]>
Co-authored-by: Mohan Lakshmaiah <[email protected]>
Co-authored-by: Mihai Criveti <[email protected]>

* feat: add plugins cli, external plugin support, plugin template (#722)

* feat: add support for external plugins

Signed-off-by: Teryl Taylor <[email protected]>

* feat(plugins): add external mcp server and associated test cases.

Signed-off-by: Teryl Taylor <[email protected]>

* fix(lint): fixed yamllint issues

Signed-off-by: Teryl Taylor <[email protected]>

* fix(lint): fixed flake8 issue.

Signed-off-by: Teryl Taylor <[email protected]>

* feat: define plugins cli and implement bootstrap command

Signed-off-by: Frederico Araujo <[email protected]>

* fix: implement install and package CLI commands

Signed-off-by: Frederico Araujo <[email protected]>

* fix: remote avoid insecure shell=True in subprocess invocation

Signed-off-by: Frederico Araujo <[email protected]>

* feat: add external plugin template

Signed-off-by: Frederico Araujo <[email protected]>

* feat: move copier config to repository root

Signed-off-by: Frederico Araujo <[email protected]>

* feat: update copier template

Signed-off-by: Frederico Araujo <[email protected]>

* feat: get default author from git config

Signed-off-by: Frederico Araujo <[email protected]>

* feat: update copier settings

Signed-off-by: Frederico Araujo <[email protected]>

* fix: copier config syntax

Signed-off-by: Frederico Araujo <[email protected]>

* feat: add external plugin template modules

Signed-off-by: Frederico Araujo <[email protected]>

* fix: template syntax

Signed-off-by: Frederico Araujo <[email protected]>

* fix: template syntax

Signed-off-by: Frederico Araujo <[email protected]>

* fix: make template

Signed-off-by: Frederico Araujo <[email protected]>

* feat: fix template issue

Signed-off-by: Frederico Araujo <[email protected]>

* fix: toml template

Signed-off-by: Frederico Araujo <[email protected]>

* fix: plugin mcp server initialization

Signed-off-by: Frederico Araujo <[email protected]>

* feat: init module for plugin framework

Signed-off-by: Frederico Araujo <[email protected]>

* feat: add chuck runtime and container wrapping

Signed-off-by: Frederico Araujo <[email protected]>

* fix: makefile template

Signed-off-by: Frederico Araujo <[email protected]>

* fix: plugins config path

Signed-off-by: Frederico Araujo <[email protected]>

* feat: add .env.template

Signed-off-by: Frederico Araujo <[email protected]>

* feat: add tools and resources support

Signed-off-by: Frederico Araujo <[email protected]>

* fix: lint yaml

Signed-off-by: Frederico Araujo <[email protected]>

* chore: cleanups

Signed-off-by: Frederico Araujo <[email protected]>

* feat: update manifest.in

Signed-off-by: Frederico Araujo <[email protected]>

* chore: linting

Signed-off-by: Frederico Araujo <[email protected]>

* fix: plugin config variable

Signed-off-by: Frederico Araujo <[email protected]>

* fix(tests): fixed doctests for plugins.

Signed-off-by: Teryl Taylor <[email protected]>

* refactor: external plugin server and plugin external API

Signed-off-by: Frederico Araujo <[email protected]>

* docs(plugins): removed subpackages from examples

Signed-off-by: Teryl Taylor <[email protected]>

* docs: update plugin docs to use public framework API

Signed-off-by: Frederico Araujo <[email protected]>

* fix(plugin): added resource payloads to base plugin.

Signed-off-by: Teryl Taylor <[email protected]>

* feat: udpate test templates

Signed-off-by: Frederico Araujo <[email protected]>

* feat: update test templates

Signed-off-by: Frederico Araujo <[email protected]>

* feat: update plugin template

Signed-off-by: Frederico Araujo <[email protected]>

* feat: update plugin template

Signed-off-by: Frederico Araujo <[email protected]>

* feat: update tempalte makefile

Signed-off-by: Frederico Araujo <[email protected]>

* feat: add template for native plugin

Signed-off-by: Frederico Araujo <[email protected]>

* feat: add readme for native template

Signed-off-by: Frederico Araujo <[email protected]>

* feat: force boostrap to be a subcommnand

Signed-off-by: Frederico Araujo <[email protected]>

* tests(plugin): added http streamable and error tests.

Signed-off-by: Teryl Taylor <[email protected]>

* tests: add tests for plugins CLI

Signed-off-by: Frederico Araujo <[email protected]>

* fix: deprecation warning

Signed-off-by: Frederico Araujo <[email protected]>

* tests: add CLI tests

Signed-off-by: Frederico Araujo <[email protected]>

* tests: update plugin cli

Signed-off-by: Frederico Araujo <[email protected]>

* tests(plugins): added client hook tests for external plugins.

Signed-off-by: Teryl Taylor <[email protected]>

* chore: update template readmes

Signed-off-by: Frederico Araujo <[email protected]>

* fix: lint docstrings in cli

Signed-off-by: Frederico Araujo <[email protected]>

* chore: fix lint errors in docstrings

Signed-off-by: Frederico Araujo <[email protected]>

* chore: fix lint errors

Signed-off-by: Frederico Araujo <[email protected]>

* tests: add external plugin server tests

Signed-off-by: Frederico Araujo <[email protected]>

* chore: cleanup

Signed-off-by: Frederico Araujo <[email protected]>

* chore: add missing docstrings

Signed-off-by: Frederico Araujo <[email protected]>

* chore: add missing docstrings

Signed-off-by: Frederico Araujo <[email protected]>

* tests: fix cli dryrun test

Signed-off-by: Frederico Araujo <[email protected]>

* chore: fix lint issues

Signed-off-by: Frederico Araujo <[email protected]>

* tests: fix teardown of client http tests

Signed-off-by: Frederico Araujo <[email protected]>

* tests: skipping flaky tests

Signed-off-by: Frederico Araujo <[email protected]>

* docs: plugin lifecycle tools

Signed-off-by: Frederico Araujo <[email protected]>

* docs: add missing plugin lifecycle doc

Signed-off-by: Frederico Araujo <[email protected]>

* Review, rebase and lint

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Teryl Taylor <[email protected]>
Signed-off-by: Frederico Araujo <[email protected]>
Signed-off-by: Mihai Criveti <[email protected]>
Co-authored-by: Teryl Taylor <[email protected]>
Co-authored-by: Mihai Criveti <[email protected]>

* feat: Experimental Oauth 2.0 support in gateway (#768)

* Oauth 2.1 design

Signed-off-by: Shamsul Arefin <[email protected]>

* oauth 2.0 design

Signed-off-by: Shamsul Arefin <[email protected]>

* Support for oauth auth type in gateway

Signed-off-by: Shamsul Arefin <[email protected]>

* Decrypt client secret

Signed-off-by: Shamsul Arefin <[email protected]>

* authorization code flow, token storage, tool fetching, tool calling with Oauth2.0

Signed-off-by: Shamsul Arefin <[email protected]>

* test fixes

Signed-off-by: Shamsul Arefin <[email protected]>

* 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 <[email protected]>

* Update fuzz testing

Signed-off-by: Mihai Criveti <[email protected]>

* Update fuzz testing

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Mihai Criveti <[email protected]>

* 344 cors security headers (#761)

* Update CORS

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS ADRs

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS

Signed-off-by: Mihai Criveti <[email protected]>

* Fix compose

Signed-off-by: Mihai Criveti <[email protected]>

* Update helm chart

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS docs

Signed-off-by: Mihai Criveti <[email protected]>

* Update test

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Mihai Criveti <[email protected]>
Signed-off-by: Shamsul Arefin <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* Bulk import

Signed-off-by: Mihai Criveti <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* debug: Temporarily disable bulk import setup to test tabs

Signed-off-by: Mihai Criveti <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* Update docs

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Mihai Criveti <[email protected]>
Co-authored-by: Mihai Criveti <[email protected]>
Signed-off-by: Shamsul Arefin <[email protected]>

* Implemented configuration export (#764)

Signed-off-by: Mihai Criveti <[email protected]>
Signed-off-by: Shamsul Arefin <[email protected]>

* cleanup

Signed-off-by: Shamsul Arefin <[email protected]>

* cleanup

Signed-off-by: Shamsul Arefin <[email protected]>

* fixes

Signed-off-by: Shamsul Arefin <[email protected]>

* ruff fixes

Signed-off-by: Shamsul Arefin <[email protected]>

* fix flake8 errors

Signed-off-by: Shamsul Arefin <[email protected]>

* fix eslint errors

Signed-off-by: Shamsul Arefin <[email protected]>

* aiohttp added in the main dependencies section of pyproject.toml

Signed-off-by: Shamsul Arefin <[email protected]>

* Review, rebase and lint

Signed-off-by: Mihai Criveti <[email protected]>

* 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 <[email protected]>
Signed-off-by: Mihai Criveti <[email protected]>

* 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 <[email protected]>
Signed-off-by: Mihai Criveti <[email protected]>

* Review, rebase and lint

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Shamsul Arefin <[email protected]>
Signed-off-by: Mihai Criveti <[email protected]>
Co-authored-by: Shamsul Arefin <[email protected]>
Co-authored-by: Mihai Criveti <[email protected]>
Co-authored-by: VK <[email protected]>
Co-authored-by: Claude <[email protected]>

* Fix pre-commit hooks

Signed-off-by: Mihai Criveti <[email protected]>

* 744 annotations (#784)

* Fix annotations edit

Signed-off-by: Mihai Criveti <[email protected]>

* Fix annotations edit

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Mihai Criveti <[email protected]>

* fix: plugins template (#783)

* feat: update context forge target in template's project dependencies

Signed-off-by: Frederico Araujo <[email protected]>

* fix: exclude jinja files from reformatting tabs

Signed-off-by: Frederico Araujo <[email protected]>

* fix: plugins cli defaults

Signed-off-by: Frederico Araujo <[email protected]>

* fix: revert formatted Makefile template

Signed-off-by: Frederico Araujo <[email protected]>

* feat: add optional packages

Signed-off-by: Frederico Araujo <[email protected]>

* docs: update plugin template docs

Signed-off-by: Frederico Araujo <[email protected]>

* docs: update template readme

Signed-off-by: Frederico Araujo <[email protected]>

---------

Signed-off-by: Frederico Araujo <[email protected]>

* edit-tool

Signed-off-by: RAKHI DUTTA <[email protected]>

* edit-tool

Signed-off-by: RAKHI DUTTA <[email protected]>

* doc test

Signed-off-by: RAKHI DUTTA <[email protected]>

* edit-tool

Signed-off-by: RAKHI DUTTA <[email protected]>

* web lint

Signed-off-by: RAKHI DUTTA <[email protected]>

* flake8 fix

Signed-off-by: RAKHI DUTTA <[email protected]>

* pytest fix

Signed-off-by: RAKHI DUTTA <[email protected]>

* revert with main

Signed-off-by: RAKHI DUTTA <[email protected]>

* flake fix

Signed-off-by: RAKHI DUTTA <[email protected]>

* revert with main

Signed-off-by: RAKHI DUTTA <[email protected]>

* alembic

Signed-off-by: RAKHI DUTTA <[email protected]>

* alembic change

Signed-off-by: RAKHI DUTTA <[email protected]>

* flake8 fix

Signed-off-by: RAKHI DUTTA <[email protected]>

* remove addtional line

Signed-off-by: RAKHI DUTTA <[email protected]>

* alembic

Signed-off-by: RAKHI DUTTA <[email protected]>

* Rebase and fix

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: RAKHI DUTTA <[email protected]>
Signed-off-by: Mihai Criveti <[email protected]>
Signed-off-by: Ian Molloy <[email protected]>
Signed-off-by: Madhav Kandukuri <[email protected]>
Signed-off-by: Vinod Muthusamy <[email protected]>
Signed-off-by: Frederico Araujo <[email protected]>
Signed-off-by: Vicky <[email protected]>
Signed-off-by: Veeresh K <[email protected]>
Signed-off-by: Shoumi <[email protected]>
Signed-off-by: Mohan Lakshmaiah <[email protected]>
Signed-off-by: Teryl Taylor <[email protected]>
Signed-off-by: Shamsul Arefin <[email protected]>
Co-authored-by: RAKHI DUTTA <[email protected]>
Co-authored-by: Mihai Criveti <[email protected]>
Co-authored-by: Ian Molloy <[email protected]>
Co-authored-by: Madhav Kandukuri <[email protected]>
Co-authored-by: Vinod Muthusamy <[email protected]>
Co-authored-by: Vinod Muthusamy <[email protected]>
Co-authored-by: VK <[email protected]>
Co-authored-by: Frederico Araujo <[email protected]>
Co-authored-by: Madhav Kandukuri <[email protected]>
Co-authored-by: Vicky <[email protected]>
Co-authored-by: Veeresh K <[email protected]>
Co-authored-by: Shoumi M <[email protected]>
Co-authored-by: Mohan Lakshmaiah <[email protected]>
Co-authored-by: Mohan Lakshmaiah <[email protected]>
Co-authored-by: Teryl Taylor <[email protected]>
Co-authored-by: Shamsul Arefin <[email protected]>
Co-authored-by: Shamsul Arefin <[email protected]>
Co-authored-by: Claude <[email protected]>
vk-playground added a commit to vk-playground/mcp-context-forge that referenced this pull request Sep 14, 2025
* Oauth 2.1 design

Signed-off-by: Shamsul Arefin <[email protected]>

* oauth 2.0 design

Signed-off-by: Shamsul Arefin <[email protected]>

* Support for oauth auth type in gateway

Signed-off-by: Shamsul Arefin <[email protected]>

* Decrypt client secret

Signed-off-by: Shamsul Arefin <[email protected]>

* authorization code flow, token storage, tool fetching, tool calling with Oauth2.0

Signed-off-by: Shamsul Arefin <[email protected]>

* test fixes

Signed-off-by: Shamsul Arefin <[email protected]>

* 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 <[email protected]>

* Update fuzz testing

Signed-off-by: Mihai Criveti <[email protected]>

* Update fuzz testing

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Mihai Criveti <[email protected]>

* 344 cors security headers (IBM#761)

* Update CORS

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS ADRs

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS

Signed-off-by: Mihai Criveti <[email protected]>

* Fix compose

Signed-off-by: Mihai Criveti <[email protected]>

* Update helm chart

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS docs

Signed-off-by: Mihai Criveti <[email protected]>

* Update test

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Mihai Criveti <[email protected]>
Signed-off-by: Shamsul Arefin <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* Bulk import

Signed-off-by: Mihai Criveti <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* debug: Temporarily disable bulk import setup to test tabs

Signed-off-by: Mihai Criveti <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* Update docs

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Mihai Criveti <[email protected]>
Co-authored-by: Mihai Criveti <[email protected]>
Signed-off-by: Shamsul Arefin <[email protected]>

* Implemented configuration export (IBM#764)

Signed-off-by: Mihai Criveti <[email protected]>
Signed-off-by: Shamsul Arefin <[email protected]>

* cleanup

Signed-off-by: Shamsul Arefin <[email protected]>

* cleanup

Signed-off-by: Shamsul Arefin <[email protected]>

* fixes

Signed-off-by: Shamsul Arefin <[email protected]>

* ruff fixes

Signed-off-by: Shamsul Arefin <[email protected]>

* fix flake8 errors

Signed-off-by: Shamsul Arefin <[email protected]>

* fix eslint errors

Signed-off-by: Shamsul Arefin <[email protected]>

* aiohttp added in the main dependencies section of pyproject.toml

Signed-off-by: Shamsul Arefin <[email protected]>

* Review, rebase and lint

Signed-off-by: Mihai Criveti <[email protected]>

* 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 <[email protected]>
Signed-off-by: Mihai Criveti <[email protected]>

* 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 <[email protected]>
Signed-off-by: Mihai Criveti <[email protected]>

* Review, rebase and lint

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Shamsul Arefin <[email protected]>
Signed-off-by: Mihai Criveti <[email protected]>
Co-authored-by: Shamsul Arefin <[email protected]>
Co-authored-by: Mihai Criveti <[email protected]>
Co-authored-by: VK <[email protected]>
Co-authored-by: Claude <[email protected]>
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 <[email protected]>

* edit-tool

Signed-off-by: RAKHI DUTTA <[email protected]>

* edit-tool

Signed-off-by: RAKHI DUTTA <[email protected]>

* edit-tool

Signed-off-by: RAKHI DUTTA <[email protected]>

* edit-tool

Signed-off-by: RAKHI DUTTA <[email protected]>

* edit-tool

Signed-off-by: RAKHI DUTTA <[email protected]>

* edit-tool

Signed-off-by: RAKHI DUTTA <[email protected]>

* doc test

Signed-off-by: RAKHI DUTTA <[email protected]>

* pytest

Signed-off-by: RAKHI DUTTA <[email protected]>

* pytest

Signed-off-by: RAKHI DUTTA <[email protected]>

* revert alembic with main version

Signed-off-by: RAKHI DUTTA <[email protected]>

* 138 view realtime logs in UI and export logs (CSV, JSON) (IBM#747)

* Add logging UI

Signed-off-by: Mihai Criveti <[email protected]>

* Add logging UI

Signed-off-by: Mihai Criveti <[email protected]>

* Add logging UI

Signed-off-by: Mihai Criveti <[email protected]>

* Add logging UI readme

Signed-off-by: Mihai Criveti <[email protected]>

* Update logging flake8

Signed-off-by: Mihai Criveti <[email protected]>

* Update logging flake8

Signed-off-by: Mihai Criveti <[email protected]>

* test coverage

Signed-off-by: Mihai Criveti <[email protected]>

* test coverage

Signed-off-by: Mihai Criveti <[email protected]>

* Fix download

Signed-off-by: Mihai Criveti <[email protected]>

* Fix test

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Mihai Criveti <[email protected]>

* 749 reverse proxy (IBM#750)

* Fix download

Signed-off-by: Mihai Criveti <[email protected]>

* Reverse proxy

Signed-off-by: Mihai Criveti <[email protected]>

* Reverse proxy

Signed-off-by: Mihai Criveti <[email protected]>

* Reverse proxy

Signed-off-by: Mihai Criveti <[email protected]>

* doctest improvements

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Mihai Criveti <[email protected]>

* (fix) Added missing prompts/get (IBM#748)

Signed-off-by: Ian Molloy <[email protected]>

* Adds RPC endpoints and updates RPC response and error handling (IBM#746)

* Fix rpc endpoints
Signed-off-by: Madhav Kandukuri <[email protected]>

* Remove commented code
Signed-off-by: Madhav Kandukuri <[email protected]>

* remove duplicate code in session registry

Signed-off-by: Madhav Kandukuri <[email protected]>

* Linting fixes
Signed-off-by: Madhav Kandukuri <[email protected]>

* Fix tests
Signed-off-by: Madhav Kandukuri <[email protected]>

---------

Signed-off-by: Madhav Kandukuri <[email protected]>

* 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 <[email protected]>

* Fix flake8 E722: Replace bare except with Exception

Signed-off-by: Mihai Criveti <[email protected]>

* lint

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Mihai Criveti <[email protected]>

* 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 <[email protected]>

* Add agents file

Signed-off-by: Mihai Criveti <[email protected]>

* pylint (IBM#759)

Signed-off-by: Mihai Criveti <[email protected]>

* Remove redundant title in readme. (IBM#757)

Signed-off-by: Vinod Muthusamy <[email protected]>
Co-authored-by: Vinod Muthusamy <[email protected]>

* Update documentation with fixed image tag

Signed-off-by: Mihai Criveti <[email protected]>

* 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 <[email protected]>

* Update fuzz testing

Signed-off-by: Mihai Criveti <[email protected]>

* Update fuzz testing

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Mihai Criveti <[email protected]>

* 344 cors security headers (IBM#761)

* Update CORS

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS ADRs

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS

Signed-off-by: Mihai Criveti <[email protected]>

* Fix compose

Signed-off-by: Mihai Criveti <[email protected]>

* Update helm chart

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS docs

Signed-off-by: Mihai Criveti <[email protected]>

* Update test

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Mihai Criveti <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* Bulk import

Signed-off-by: Mihai Criveti <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* debug: Temporarily disable bulk import setup to test tabs

Signed-off-by: Mihai Criveti <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* Update docs

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Mihai Criveti <[email protected]>
Co-authored-by: Mihai Criveti <[email protected]>

* Implemented configuration export (IBM#764)

Signed-off-by: Mihai Criveti <[email protected]>

* 185 186 import export (IBM#769)

* Import export

Signed-off-by: Mihai Criveti <[email protected]>

* Import export

Signed-off-by: Mihai Criveti <[email protected]>

* Import export

Signed-off-by: Mihai Criveti <[email protected]>

* Import export

Signed-off-by: Mihai Criveti <[email protected]>

* Import export

Signed-off-by: Mihai Criveti <[email protected]>

* Import export

Signed-off-by: Mihai Criveti <[email protected]>

* Import export

Signed-off-by: Mihai Criveti <[email protected]>

* Import export

Signed-off-by: Mihai Criveti <[email protected]>

* Import export testing

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Mihai Criveti <[email protected]>

* fix: local network address translation in discovery module (IBM#767)

Signed-off-by: Frederico Araujo <[email protected]>

* Well known (IBM#770)

Signed-off-by: Mihai Criveti <[email protected]>

* Update docs with jsonrpc tutorial (IBM#772)

Signed-off-by: Mihai Criveti <[email protected]>

* 137 metadata timestamps (IBM#776)

* Metadata / creation dates

Signed-off-by: Mihai Criveti <[email protected]>

* Metadata / creation dates

Signed-off-by: Mihai Criveti <[email protected]>

* Metadata / creation dates

Signed-off-by: Mihai Criveti <[email protected]>

* Security headers CSP

Signed-off-by: Mihai Criveti <[email protected]>

* Display metadata for resources
Signed-off-by: Madhav Kandukuri <[email protected]>

* eslint fix
Signed-off-by: Madhav Kandukuri <[email protected]>

---------

Signed-off-by: Mihai Criveti <[email protected]>
Co-authored-by: Madhav Kandukuri <[email protected]>

* feat IBM#262: MCP Langchain Agent (IBM#781)

* feat: Add bulk import UI modal for tools

Signed-off-by: Vicky <[email protected]>

* feat: Add Langchain agent with OpenAI & A2A endpoints (refs IBM#262)

Signed-off-by: Vicky <[email protected]>

* lint: prettier fix at ~L8090 (insert newline)

Signed-off-by: Vicky <[email protected]>

---------

Signed-off-by: Vicky <[email protected]>
Co-authored-by: Vicky <[email protected]>

* Cleanup pr

Signed-off-by: Mihai Criveti <[email protected]>

* Cleanup pr

Signed-off-by: Mihai Criveti <[email protected]>

* Issue 587/rest tool error (IBM#778)

* added params extraction from url logic

Signed-off-by: Veeresh K <[email protected]>

* added params extraction from url logic

Signed-off-by: Veeresh K <[email protected]>

* Rebase and lint / test

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Veeresh K <[email protected]>
Signed-off-by: Mihai Criveti <[email protected]>
Co-authored-by: Mihai Criveti <[email protected]>

* edit column header (IBM#777)

Signed-off-by: Shoumi <[email protected]>

* Test case update (IBM#775)

* session_registry test case updates

Signed-off-by: Mohan Lakshmaiah <[email protected]>

* test case update for routers/reverse_proxy

Signed-off-by: Mohan Lakshmaiah <[email protected]>

* test case update to mcpgateway/reverse_proxy.py

Signed-off-by: Mohan Lakshmaiah <[email protected]>

* Fix formatting issues from pre-commit hooks

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Mohan Lakshmaiah <[email protected]>
Signed-off-by: Mihai Criveti <[email protected]>
Co-authored-by: Mohan Lakshmaiah <[email protected]>
Co-authored-by: Mihai Criveti <[email protected]>

* feat: add plugins cli, external plugin support, plugin template (IBM#722)

* feat: add support for external plugins

Signed-off-by: Teryl Taylor <[email protected]>

* feat(plugins): add external mcp server and associated test cases.

Signed-off-by: Teryl Taylor <[email protected]>

* fix(lint): fixed yamllint issues

Signed-off-by: Teryl Taylor <[email protected]>

* fix(lint): fixed flake8 issue.

Signed-off-by: Teryl Taylor <[email protected]>

* feat: define plugins cli and implement bootstrap command

Signed-off-by: Frederico Araujo <[email protected]>

* fix: implement install and package CLI commands

Signed-off-by: Frederico Araujo <[email protected]>

* fix: remote avoid insecure shell=True in subprocess invocation

Signed-off-by: Frederico Araujo <[email protected]>

* feat: add external plugin template

Signed-off-by: Frederico Araujo <[email protected]>

* feat: move copier config to repository root

Signed-off-by: Frederico Araujo <[email protected]>

* feat: update copier template

Signed-off-by: Frederico Araujo <[email protected]>

* feat: get default author from git config

Signed-off-by: Frederico Araujo <[email protected]>

* feat: update copier settings

Signed-off-by: Frederico Araujo <[email protected]>

* fix: copier config syntax

Signed-off-by: Frederico Araujo <[email protected]>

* feat: add external plugin template modules

Signed-off-by: Frederico Araujo <[email protected]>

* fix: template syntax

Signed-off-by: Frederico Araujo <[email protected]>

* fix: template syntax

Signed-off-by: Frederico Araujo <[email protected]>

* fix: make template

Signed-off-by: Frederico Araujo <[email protected]>

* feat: fix template issue

Signed-off-by: Frederico Araujo <[email protected]>

* fix: toml template

Signed-off-by: Frederico Araujo <[email protected]>

* fix: plugin mcp server initialization

Signed-off-by: Frederico Araujo <[email protected]>

* feat: init module for plugin framework

Signed-off-by: Frederico Araujo <[email protected]>

* feat: add chuck runtime and container wrapping

Signed-off-by: Frederico Araujo <[email protected]>

* fix: makefile template

Signed-off-by: Frederico Araujo <[email protected]>

* fix: plugins config path

Signed-off-by: Frederico Araujo <[email protected]>

* feat: add .env.template

Signed-off-by: Frederico Araujo <[email protected]>

* feat: add tools and resources support

Signed-off-by: Frederico Araujo <[email protected]>

* fix: lint yaml

Signed-off-by: Frederico Araujo <[email protected]>

* chore: cleanups

Signed-off-by: Frederico Araujo <[email protected]>

* feat: update manifest.in

Signed-off-by: Frederico Araujo <[email protected]>

* chore: linting

Signed-off-by: Frederico Araujo <[email protected]>

* fix: plugin config variable

Signed-off-by: Frederico Araujo <[email protected]>

* fix(tests): fixed doctests for plugins.

Signed-off-by: Teryl Taylor <[email protected]>

* refactor: external plugin server and plugin external API

Signed-off-by: Frederico Araujo <[email protected]>

* docs(plugins): removed subpackages from examples

Signed-off-by: Teryl Taylor <[email protected]>

* docs: update plugin docs to use public framework API

Signed-off-by: Frederico Araujo <[email protected]>

* fix(plugin): added resource payloads to base plugin.

Signed-off-by: Teryl Taylor <[email protected]>

* feat: udpate test templates

Signed-off-by: Frederico Araujo <[email protected]>

* feat: update test templates

Signed-off-by: Frederico Araujo <[email protected]>

* feat: update plugin template

Signed-off-by: Frederico Araujo <[email protected]>

* feat: update plugin template

Signed-off-by: Frederico Araujo <[email protected]>

* feat: update tempalte makefile

Signed-off-by: Frederico Araujo <[email protected]>

* feat: add template for native plugin

Signed-off-by: Frederico Araujo <[email protected]>

* feat: add readme for native template

Signed-off-by: Frederico Araujo <[email protected]>

* feat: force boostrap to be a subcommnand

Signed-off-by: Frederico Araujo <[email protected]>

* tests(plugin): added http streamable and error tests.

Signed-off-by: Teryl Taylor <[email protected]>

* tests: add tests for plugins CLI

Signed-off-by: Frederico Araujo <[email protected]>

* fix: deprecation warning

Signed-off-by: Frederico Araujo <[email protected]>

* tests: add CLI tests

Signed-off-by: Frederico Araujo <[email protected]>

* tests: update plugin cli

Signed-off-by: Frederico Araujo <[email protected]>

* tests(plugins): added client hook tests for external plugins.

Signed-off-by: Teryl Taylor <[email protected]>

* chore: update template readmes

Signed-off-by: Frederico Araujo <[email protected]>

* fix: lint docstrings in cli

Signed-off-by: Frederico Araujo <[email protected]>

* chore: fix lint errors in docstrings

Signed-off-by: Frederico Araujo <[email protected]>

* chore: fix lint errors

Signed-off-by: Frederico Araujo <[email protected]>

* tests: add external plugin server tests

Signed-off-by: Frederico Araujo <[email protected]>

* chore: cleanup

Signed-off-by: Frederico Araujo <[email protected]>

* chore: add missing docstrings

Signed-off-by: Frederico Araujo <[email protected]>

* chore: add missing docstrings

Signed-off-by: Frederico Araujo <[email protected]>

* tests: fix cli dryrun test

Signed-off-by: Frederico Araujo <[email protected]>

* chore: fix lint issues

Signed-off-by: Frederico Araujo <[email protected]>

* tests: fix teardown of client http tests

Signed-off-by: Frederico Araujo <[email protected]>

* tests: skipping flaky tests

Signed-off-by: Frederico Araujo <[email protected]>

* docs: plugin lifecycle tools

Signed-off-by: Frederico Araujo <[email protected]>

* docs: add missing plugin lifecycle doc

Signed-off-by: Frederico Araujo <[email protected]>

* Review, rebase and lint

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Teryl Taylor <[email protected]>
Signed-off-by: Frederico Araujo <[email protected]>
Signed-off-by: Mihai Criveti <[email protected]>
Co-authored-by: Teryl Taylor <[email protected]>
Co-authored-by: Mihai Criveti <[email protected]>

* feat: Experimental Oauth 2.0 support in gateway (IBM#768)

* Oauth 2.1 design

Signed-off-by: Shamsul Arefin <[email protected]>

* oauth 2.0 design

Signed-off-by: Shamsul Arefin <[email protected]>

* Support for oauth auth type in gateway

Signed-off-by: Shamsul Arefin <[email protected]>

* Decrypt client secret

Signed-off-by: Shamsul Arefin <[email protected]>

* authorization code flow, token storage, tool fetching, tool calling with Oauth2.0

Signed-off-by: Shamsul Arefin <[email protected]>

* test fixes

Signed-off-by: Shamsul Arefin <[email protected]>

* 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 <[email protected]>

* Update fuzz testing

Signed-off-by: Mihai Criveti <[email protected]>

* Update fuzz testing

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Mihai Criveti <[email protected]>

* 344 cors security headers (IBM#761)

* Update CORS

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS ADRs

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS

Signed-off-by: Mihai Criveti <[email protected]>

* Fix compose

Signed-off-by: Mihai Criveti <[email protected]>

* Update helm chart

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS docs

Signed-off-by: Mihai Criveti <[email protected]>

* Update test

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Mihai Criveti <[email protected]>
Signed-off-by: Shamsul Arefin <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* Bulk import

Signed-off-by: Mihai Criveti <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* debug: Temporarily disable bulk import setup to test tabs

Signed-off-by: Mihai Criveti <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* Update docs

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Mihai Criveti <[email protected]>
Co-authored-by: Mihai Criveti <[email protected]>
Signed-off-by: Shamsul Arefin <[email protected]>

* Implemented configuration export (IBM#764)

Signed-off-by: Mihai Criveti <[email protected]>
Signed-off-by: Shamsul Arefin <[email protected]>

* cleanup

Signed-off-by: Shamsul Arefin <[email protected]>

* cleanup

Signed-off-by: Shamsul Arefin <[email protected]>

* fixes

Signed-off-by: Shamsul Arefin <[email protected]>

* ruff fixes

Signed-off-by: Shamsul Arefin <[email protected]>

* fix flake8 errors

Signed-off-by: Shamsul Arefin <[email protected]>

* fix eslint errors

Signed-off-by: Shamsul Arefin <[email protected]>

* aiohttp added in the main dependencies section of pyproject.toml

Signed-off-by: Shamsul Arefin <[email protected]>

* Review, rebase and lint

Signed-off-by: Mihai Criveti <[email protected]>

* 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 <[email protected]>
Signed-off-by: Mihai Criveti <[email protected]>

* 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 <[email protected]>
Signed-off-by: Mihai Criveti <[email protected]>

* Review, rebase and lint

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Shamsul Arefin <[email protected]>
Signed-off-by: Mihai Criveti <[email protected]>
Co-authored-by: Shamsul Arefin <[email protected]>
Co-authored-by: Mihai Criveti <[email protected]>
Co-authored-by: VK <[email protected]>
Co-authored-by: Claude <[email protected]>

* Fix pre-commit hooks

Signed-off-by: Mihai Criveti <[email protected]>

* 744 annotations (IBM#784)

* Fix annotations edit

Signed-off-by: Mihai Criveti <[email protected]>

* Fix annotations edit

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Mihai Criveti <[email protected]>

* fix: plugins template (IBM#783)

* feat: update context forge target in template's project dependencies

Signed-off-by: Frederico Araujo <[email protected]>

* fix: exclude jinja files from reformatting tabs

Signed-off-by: Frederico Araujo <[email protected]>

* fix: plugins cli defaults

Signed-off-by: Frederico Araujo <[email protected]>

* fix: revert formatted Makefile template

Signed-off-by: Frederico Araujo <[email protected]>

* feat: add optional packages

Signed-off-by: Frederico Araujo <[email protected]>

* docs: update plugin template docs

Signed-off-by: Frederico Araujo <[email protected]>

* docs: update template readme

Signed-off-by: Frederico Araujo <[email protected]>

---------

Signed-off-by: Frederico Araujo <[email protected]>

* edit-tool

Signed-off-by: RAKHI DUTTA <[email protected]>

* edit-tool

Signed-off-by: RAKHI DUTTA <[email protected]>

* doc test

Signed-off-by: RAKHI DUTTA <[email protected]>

* edit-tool

Signed-off-by: RAKHI DUTTA <[email protected]>

* web lint

Signed-off-by: RAKHI DUTTA <[email protected]>

* flake8 fix

Signed-off-by: RAKHI DUTTA <[email protected]>

* pytest fix

Signed-off-by: RAKHI DUTTA <[email protected]>

* revert with main

Signed-off-by: RAKHI DUTTA <[email protected]>

* flake fix

Signed-off-by: RAKHI DUTTA <[email protected]>

* revert with main

Signed-off-by: RAKHI DUTTA <[email protected]>

* alembic

Signed-off-by: RAKHI DUTTA <[email protected]>

* alembic change

Signed-off-by: RAKHI DUTTA <[email protected]>

* flake8 fix

Signed-off-by: RAKHI DUTTA <[email protected]>

* remove addtional line

Signed-off-by: RAKHI DUTTA <[email protected]>

* alembic

Signed-off-by: RAKHI DUTTA <[email protected]>

* Rebase and fix

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: RAKHI DUTTA <[email protected]>
Signed-off-by: Mihai Criveti <[email protected]>
Signed-off-by: Ian Molloy <[email protected]>
Signed-off-by: Madhav Kandukuri <[email protected]>
Signed-off-by: Vinod Muthusamy <[email protected]>
Signed-off-by: Frederico Araujo <[email protected]>
Signed-off-by: Vicky <[email protected]>
Signed-off-by: Veeresh K <[email protected]>
Signed-off-by: Shoumi <[email protected]>
Signed-off-by: Mohan Lakshmaiah <[email protected]>
Signed-off-by: Teryl Taylor <[email protected]>
Signed-off-by: Shamsul Arefin <[email protected]>
Co-authored-by: RAKHI DUTTA <[email protected]>
Co-authored-by: Mihai Criveti <[email protected]>
Co-authored-by: Ian Molloy <[email protected]>
Co-authored-by: Madhav Kandukuri <[email protected]>
Co-authored-by: Vinod Muthusamy <[email protected]>
Co-authored-by: Vinod Muthusamy <[email protected]>
Co-authored-by: VK <[email protected]>
Co-authored-by: Frederico Araujo <[email protected]>
Co-authored-by: Madhav Kandukuri <[email protected]>
Co-authored-by: Vicky <[email protected]>
Co-authored-by: Veeresh K <[email protected]>
Co-authored-by: Shoumi M <[email protected]>
Co-authored-by: Mohan Lakshmaiah <[email protected]>
Co-authored-by: Mohan Lakshmaiah <[email protected]>
Co-authored-by: Teryl Taylor <[email protected]>
Co-authored-by: Shamsul Arefin <[email protected]>
Co-authored-by: Shamsul Arefin <[email protected]>
Co-authored-by: Claude <[email protected]>
vk-playground added a commit to vk-playground/mcp-context-forge that referenced this pull request Sep 14, 2025
* Oauth 2.1 design

Signed-off-by: Shamsul Arefin <[email protected]>

* oauth 2.0 design

Signed-off-by: Shamsul Arefin <[email protected]>

* Support for oauth auth type in gateway

Signed-off-by: Shamsul Arefin <[email protected]>

* Decrypt client secret

Signed-off-by: Shamsul Arefin <[email protected]>

* authorization code flow, token storage, tool fetching, tool calling with Oauth2.0

Signed-off-by: Shamsul Arefin <[email protected]>

* test fixes

Signed-off-by: Shamsul Arefin <[email protected]>

* 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 <[email protected]>

* Update fuzz testing

Signed-off-by: Mihai Criveti <[email protected]>

* Update fuzz testing

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Mihai Criveti <[email protected]>

* 344 cors security headers (IBM#761)

* Update CORS

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS ADRs

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS

Signed-off-by: Mihai Criveti <[email protected]>

* Fix compose

Signed-off-by: Mihai Criveti <[email protected]>

* Update helm chart

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS docs

Signed-off-by: Mihai Criveti <[email protected]>

* Update test

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Mihai Criveti <[email protected]>
Signed-off-by: Shamsul Arefin <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* Bulk import

Signed-off-by: Mihai Criveti <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* debug: Temporarily disable bulk import setup to test tabs

Signed-off-by: Mihai Criveti <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* Update docs

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Mihai Criveti <[email protected]>
Co-authored-by: Mihai Criveti <[email protected]>
Signed-off-by: Shamsul Arefin <[email protected]>

* Implemented configuration export (IBM#764)

Signed-off-by: Mihai Criveti <[email protected]>
Signed-off-by: Shamsul Arefin <[email protected]>

* cleanup

Signed-off-by: Shamsul Arefin <[email protected]>

* cleanup

Signed-off-by: Shamsul Arefin <[email protected]>

* fixes

Signed-off-by: Shamsul Arefin <[email protected]>

* ruff fixes

Signed-off-by: Shamsul Arefin <[email protected]>

* fix flake8 errors

Signed-off-by: Shamsul Arefin <[email protected]>

* fix eslint errors

Signed-off-by: Shamsul Arefin <[email protected]>

* aiohttp added in the main dependencies section of pyproject.toml

Signed-off-by: Shamsul Arefin <[email protected]>

* Review, rebase and lint

Signed-off-by: Mihai Criveti <[email protected]>

* 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 <[email protected]>
Signed-off-by: Mihai Criveti <[email protected]>

* 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 <[email protected]>
Signed-off-by: Mihai Criveti <[email protected]>

* Review, rebase and lint

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Shamsul Arefin <[email protected]>
Signed-off-by: Mihai Criveti <[email protected]>
Co-authored-by: Shamsul Arefin <[email protected]>
Co-authored-by: Mihai Criveti <[email protected]>
Co-authored-by: VK <[email protected]>
Co-authored-by: Claude <[email protected]>
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 <[email protected]>

* edit-tool

Signed-off-by: RAKHI DUTTA <[email protected]>

* edit-tool

Signed-off-by: RAKHI DUTTA <[email protected]>

* edit-tool

Signed-off-by: RAKHI DUTTA <[email protected]>

* edit-tool

Signed-off-by: RAKHI DUTTA <[email protected]>

* edit-tool

Signed-off-by: RAKHI DUTTA <[email protected]>

* edit-tool

Signed-off-by: RAKHI DUTTA <[email protected]>

* doc test

Signed-off-by: RAKHI DUTTA <[email protected]>

* pytest

Signed-off-by: RAKHI DUTTA <[email protected]>

* pytest

Signed-off-by: RAKHI DUTTA <[email protected]>

* revert alembic with main version

Signed-off-by: RAKHI DUTTA <[email protected]>

* 138 view realtime logs in UI and export logs (CSV, JSON) (IBM#747)

* Add logging UI

Signed-off-by: Mihai Criveti <[email protected]>

* Add logging UI

Signed-off-by: Mihai Criveti <[email protected]>

* Add logging UI

Signed-off-by: Mihai Criveti <[email protected]>

* Add logging UI readme

Signed-off-by: Mihai Criveti <[email protected]>

* Update logging flake8

Signed-off-by: Mihai Criveti <[email protected]>

* Update logging flake8

Signed-off-by: Mihai Criveti <[email protected]>

* test coverage

Signed-off-by: Mihai Criveti <[email protected]>

* test coverage

Signed-off-by: Mihai Criveti <[email protected]>

* Fix download

Signed-off-by: Mihai Criveti <[email protected]>

* Fix test

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Mihai Criveti <[email protected]>

* 749 reverse proxy (IBM#750)

* Fix download

Signed-off-by: Mihai Criveti <[email protected]>

* Reverse proxy

Signed-off-by: Mihai Criveti <[email protected]>

* Reverse proxy

Signed-off-by: Mihai Criveti <[email protected]>

* Reverse proxy

Signed-off-by: Mihai Criveti <[email protected]>

* doctest improvements

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Mihai Criveti <[email protected]>

* (fix) Added missing prompts/get (IBM#748)

Signed-off-by: Ian Molloy <[email protected]>

* Adds RPC endpoints and updates RPC response and error handling (IBM#746)

* Fix rpc endpoints
Signed-off-by: Madhav Kandukuri <[email protected]>

* Remove commented code
Signed-off-by: Madhav Kandukuri <[email protected]>

* remove duplicate code in session registry

Signed-off-by: Madhav Kandukuri <[email protected]>

* Linting fixes
Signed-off-by: Madhav Kandukuri <[email protected]>

* Fix tests
Signed-off-by: Madhav Kandukuri <[email protected]>

---------

Signed-off-by: Madhav Kandukuri <[email protected]>

* 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 <[email protected]>

* Fix flake8 E722: Replace bare except with Exception

Signed-off-by: Mihai Criveti <[email protected]>

* lint

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Mihai Criveti <[email protected]>

* 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 <[email protected]>

* Add agents file

Signed-off-by: Mihai Criveti <[email protected]>

* pylint (IBM#759)

Signed-off-by: Mihai Criveti <[email protected]>

* Remove redundant title in readme. (IBM#757)

Signed-off-by: Vinod Muthusamy <[email protected]>
Co-authored-by: Vinod Muthusamy <[email protected]>

* Update documentation with fixed image tag

Signed-off-by: Mihai Criveti <[email protected]>

* 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 <[email protected]>

* Update fuzz testing

Signed-off-by: Mihai Criveti <[email protected]>

* Update fuzz testing

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Mihai Criveti <[email protected]>

* 344 cors security headers (IBM#761)

* Update CORS

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS ADRs

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS

Signed-off-by: Mihai Criveti <[email protected]>

* Fix compose

Signed-off-by: Mihai Criveti <[email protected]>

* Update helm chart

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS docs

Signed-off-by: Mihai Criveti <[email protected]>

* Update test

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Mihai Criveti <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* Bulk import

Signed-off-by: Mihai Criveti <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* debug: Temporarily disable bulk import setup to test tabs

Signed-off-by: Mihai Criveti <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* Update docs

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Mihai Criveti <[email protected]>
Co-authored-by: Mihai Criveti <[email protected]>

* Implemented configuration export (IBM#764)

Signed-off-by: Mihai Criveti <[email protected]>

* 185 186 import export (IBM#769)

* Import export

Signed-off-by: Mihai Criveti <[email protected]>

* Import export

Signed-off-by: Mihai Criveti <[email protected]>

* Import export

Signed-off-by: Mihai Criveti <[email protected]>

* Import export

Signed-off-by: Mihai Criveti <[email protected]>

* Import export

Signed-off-by: Mihai Criveti <[email protected]>

* Import export

Signed-off-by: Mihai Criveti <[email protected]>

* Import export

Signed-off-by: Mihai Criveti <[email protected]>

* Import export

Signed-off-by: Mihai Criveti <[email protected]>

* Import export testing

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Mihai Criveti <[email protected]>

* fix: local network address translation in discovery module (IBM#767)

Signed-off-by: Frederico Araujo <[email protected]>

* Well known (IBM#770)

Signed-off-by: Mihai Criveti <[email protected]>

* Update docs with jsonrpc tutorial (IBM#772)

Signed-off-by: Mihai Criveti <[email protected]>

* 137 metadata timestamps (IBM#776)

* Metadata / creation dates

Signed-off-by: Mihai Criveti <[email protected]>

* Metadata / creation dates

Signed-off-by: Mihai Criveti <[email protected]>

* Metadata / creation dates

Signed-off-by: Mihai Criveti <[email protected]>

* Security headers CSP

Signed-off-by: Mihai Criveti <[email protected]>

* Display metadata for resources
Signed-off-by: Madhav Kandukuri <[email protected]>

* eslint fix
Signed-off-by: Madhav Kandukuri <[email protected]>

---------

Signed-off-by: Mihai Criveti <[email protected]>
Co-authored-by: Madhav Kandukuri <[email protected]>

* feat IBM#262: MCP Langchain Agent (IBM#781)

* feat: Add bulk import UI modal for tools

Signed-off-by: Vicky <[email protected]>

* feat: Add Langchain agent with OpenAI & A2A endpoints (refs IBM#262)

Signed-off-by: Vicky <[email protected]>

* lint: prettier fix at ~L8090 (insert newline)

Signed-off-by: Vicky <[email protected]>

---------

Signed-off-by: Vicky <[email protected]>
Co-authored-by: Vicky <[email protected]>

* Cleanup pr

Signed-off-by: Mihai Criveti <[email protected]>

* Cleanup pr

Signed-off-by: Mihai Criveti <[email protected]>

* Issue 587/rest tool error (IBM#778)

* added params extraction from url logic

Signed-off-by: Veeresh K <[email protected]>

* added params extraction from url logic

Signed-off-by: Veeresh K <[email protected]>

* Rebase and lint / test

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Veeresh K <[email protected]>
Signed-off-by: Mihai Criveti <[email protected]>
Co-authored-by: Mihai Criveti <[email protected]>

* edit column header (IBM#777)

Signed-off-by: Shoumi <[email protected]>

* Test case update (IBM#775)

* session_registry test case updates

Signed-off-by: Mohan Lakshmaiah <[email protected]>

* test case update for routers/reverse_proxy

Signed-off-by: Mohan Lakshmaiah <[email protected]>

* test case update to mcpgateway/reverse_proxy.py

Signed-off-by: Mohan Lakshmaiah <[email protected]>

* Fix formatting issues from pre-commit hooks

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Mohan Lakshmaiah <[email protected]>
Signed-off-by: Mihai Criveti <[email protected]>
Co-authored-by: Mohan Lakshmaiah <[email protected]>
Co-authored-by: Mihai Criveti <[email protected]>

* feat: add plugins cli, external plugin support, plugin template (IBM#722)

* feat: add support for external plugins

Signed-off-by: Teryl Taylor <[email protected]>

* feat(plugins): add external mcp server and associated test cases.

Signed-off-by: Teryl Taylor <[email protected]>

* fix(lint): fixed yamllint issues

Signed-off-by: Teryl Taylor <[email protected]>

* fix(lint): fixed flake8 issue.

Signed-off-by: Teryl Taylor <[email protected]>

* feat: define plugins cli and implement bootstrap command

Signed-off-by: Frederico Araujo <[email protected]>

* fix: implement install and package CLI commands

Signed-off-by: Frederico Araujo <[email protected]>

* fix: remote avoid insecure shell=True in subprocess invocation

Signed-off-by: Frederico Araujo <[email protected]>

* feat: add external plugin template

Signed-off-by: Frederico Araujo <[email protected]>

* feat: move copier config to repository root

Signed-off-by: Frederico Araujo <[email protected]>

* feat: update copier template

Signed-off-by: Frederico Araujo <[email protected]>

* feat: get default author from git config

Signed-off-by: Frederico Araujo <[email protected]>

* feat: update copier settings

Signed-off-by: Frederico Araujo <[email protected]>

* fix: copier config syntax

Signed-off-by: Frederico Araujo <[email protected]>

* feat: add external plugin template modules

Signed-off-by: Frederico Araujo <[email protected]>

* fix: template syntax

Signed-off-by: Frederico Araujo <[email protected]>

* fix: template syntax

Signed-off-by: Frederico Araujo <[email protected]>

* fix: make template

Signed-off-by: Frederico Araujo <[email protected]>

* feat: fix template issue

Signed-off-by: Frederico Araujo <[email protected]>

* fix: toml template

Signed-off-by: Frederico Araujo <[email protected]>

* fix: plugin mcp server initialization

Signed-off-by: Frederico Araujo <[email protected]>

* feat: init module for plugin framework

Signed-off-by: Frederico Araujo <[email protected]>

* feat: add chuck runtime and container wrapping

Signed-off-by: Frederico Araujo <[email protected]>

* fix: makefile template

Signed-off-by: Frederico Araujo <[email protected]>

* fix: plugins config path

Signed-off-by: Frederico Araujo <[email protected]>

* feat: add .env.template

Signed-off-by: Frederico Araujo <[email protected]>

* feat: add tools and resources support

Signed-off-by: Frederico Araujo <[email protected]>

* fix: lint yaml

Signed-off-by: Frederico Araujo <[email protected]>

* chore: cleanups

Signed-off-by: Frederico Araujo <[email protected]>

* feat: update manifest.in

Signed-off-by: Frederico Araujo <[email protected]>

* chore: linting

Signed-off-by: Frederico Araujo <[email protected]>

* fix: plugin config variable

Signed-off-by: Frederico Araujo <[email protected]>

* fix(tests): fixed doctests for plugins.

Signed-off-by: Teryl Taylor <[email protected]>

* refactor: external plugin server and plugin external API

Signed-off-by: Frederico Araujo <[email protected]>

* docs(plugins): removed subpackages from examples

Signed-off-by: Teryl Taylor <[email protected]>

* docs: update plugin docs to use public framework API

Signed-off-by: Frederico Araujo <[email protected]>

* fix(plugin): added resource payloads to base plugin.

Signed-off-by: Teryl Taylor <[email protected]>

* feat: udpate test templates

Signed-off-by: Frederico Araujo <[email protected]>

* feat: update test templates

Signed-off-by: Frederico Araujo <[email protected]>

* feat: update plugin template

Signed-off-by: Frederico Araujo <[email protected]>

* feat: update plugin template

Signed-off-by: Frederico Araujo <[email protected]>

* feat: update tempalte makefile

Signed-off-by: Frederico Araujo <[email protected]>

* feat: add template for native plugin

Signed-off-by: Frederico Araujo <[email protected]>

* feat: add readme for native template

Signed-off-by: Frederico Araujo <[email protected]>

* feat: force boostrap to be a subcommnand

Signed-off-by: Frederico Araujo <[email protected]>

* tests(plugin): added http streamable and error tests.

Signed-off-by: Teryl Taylor <[email protected]>

* tests: add tests for plugins CLI

Signed-off-by: Frederico Araujo <[email protected]>

* fix: deprecation warning

Signed-off-by: Frederico Araujo <[email protected]>

* tests: add CLI tests

Signed-off-by: Frederico Araujo <[email protected]>

* tests: update plugin cli

Signed-off-by: Frederico Araujo <[email protected]>

* tests(plugins): added client hook tests for external plugins.

Signed-off-by: Teryl Taylor <[email protected]>

* chore: update template readmes

Signed-off-by: Frederico Araujo <[email protected]>

* fix: lint docstrings in cli

Signed-off-by: Frederico Araujo <[email protected]>

* chore: fix lint errors in docstrings

Signed-off-by: Frederico Araujo <[email protected]>

* chore: fix lint errors

Signed-off-by: Frederico Araujo <[email protected]>

* tests: add external plugin server tests

Signed-off-by: Frederico Araujo <[email protected]>

* chore: cleanup

Signed-off-by: Frederico Araujo <[email protected]>

* chore: add missing docstrings

Signed-off-by: Frederico Araujo <[email protected]>

* chore: add missing docstrings

Signed-off-by: Frederico Araujo <[email protected]>

* tests: fix cli dryrun test

Signed-off-by: Frederico Araujo <[email protected]>

* chore: fix lint issues

Signed-off-by: Frederico Araujo <[email protected]>

* tests: fix teardown of client http tests

Signed-off-by: Frederico Araujo <[email protected]>

* tests: skipping flaky tests

Signed-off-by: Frederico Araujo <[email protected]>

* docs: plugin lifecycle tools

Signed-off-by: Frederico Araujo <[email protected]>

* docs: add missing plugin lifecycle doc

Signed-off-by: Frederico Araujo <[email protected]>

* Review, rebase and lint

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Teryl Taylor <[email protected]>
Signed-off-by: Frederico Araujo <[email protected]>
Signed-off-by: Mihai Criveti <[email protected]>
Co-authored-by: Teryl Taylor <[email protected]>
Co-authored-by: Mihai Criveti <[email protected]>

* feat: Experimental Oauth 2.0 support in gateway (IBM#768)

* Oauth 2.1 design

Signed-off-by: Shamsul Arefin <[email protected]>

* oauth 2.0 design

Signed-off-by: Shamsul Arefin <[email protected]>

* Support for oauth auth type in gateway

Signed-off-by: Shamsul Arefin <[email protected]>

* Decrypt client secret

Signed-off-by: Shamsul Arefin <[email protected]>

* authorization code flow, token storage, tool fetching, tool calling with Oauth2.0

Signed-off-by: Shamsul Arefin <[email protected]>

* test fixes

Signed-off-by: Shamsul Arefin <[email protected]>

* 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 <[email protected]>

* Update fuzz testing

Signed-off-by: Mihai Criveti <[email protected]>

* Update fuzz testing

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Mihai Criveti <[email protected]>

* 344 cors security headers (IBM#761)

* Update CORS

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS ADRs

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS

Signed-off-by: Mihai Criveti <[email protected]>

* Fix compose

Signed-off-by: Mihai Criveti <[email protected]>

* Update helm chart

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS docs

Signed-off-by: Mihai Criveti <[email protected]>

* Update test

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Mihai Criveti <[email protected]>
Signed-off-by: Shamsul Arefin <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* Bulk import

Signed-off-by: Mihai Criveti <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* debug: Temporarily disable bulk import setup to test tabs

Signed-off-by: Mihai Criveti <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* Update docs

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Mihai Criveti <[email protected]>
Co-authored-by: Mihai Criveti <[email protected]>
Signed-off-by: Shamsul Arefin <[email protected]>

* Implemented configuration export (IBM#764)

Signed-off-by: Mihai Criveti <[email protected]>
Signed-off-by: Shamsul Arefin <[email protected]>

* cleanup

Signed-off-by: Shamsul Arefin <[email protected]>

* cleanup

Signed-off-by: Shamsul Arefin <[email protected]>

* fixes

Signed-off-by: Shamsul Arefin <[email protected]>

* ruff fixes

Signed-off-by: Shamsul Arefin <[email protected]>

* fix flake8 errors

Signed-off-by: Shamsul Arefin <[email protected]>

* fix eslint errors

Signed-off-by: Shamsul Arefin <[email protected]>

* aiohttp added in the main dependencies section of pyproject.toml

Signed-off-by: Shamsul Arefin <[email protected]>

* Review, rebase and lint

Signed-off-by: Mihai Criveti <[email protected]>

* 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 <[email protected]>
Signed-off-by: Mihai Criveti <[email protected]>

* 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 <[email protected]>
Signed-off-by: Mihai Criveti <[email protected]>

* Review, rebase and lint

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Shamsul Arefin <[email protected]>
Signed-off-by: Mihai Criveti <[email protected]>
Co-authored-by: Shamsul Arefin <[email protected]>
Co-authored-by: Mihai Criveti <[email protected]>
Co-authored-by: VK <[email protected]>
Co-authored-by: Claude <[email protected]>

* Fix pre-commit hooks

Signed-off-by: Mihai Criveti <[email protected]>

* 744 annotations (IBM#784)

* Fix annotations edit

Signed-off-by: Mihai Criveti <[email protected]>

* Fix annotations edit

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Mihai Criveti <[email protected]>

* fix: plugins template (IBM#783)

* feat: update context forge target in template's project dependencies

Signed-off-by: Frederico Araujo <[email protected]>

* fix: exclude jinja files from reformatting tabs

Signed-off-by: Frederico Araujo <[email protected]>

* fix: plugins cli defaults

Signed-off-by: Frederico Araujo <[email protected]>

* fix: revert formatted Makefile template

Signed-off-by: Frederico Araujo <[email protected]>

* feat: add optional packages

Signed-off-by: Frederico Araujo <[email protected]>

* docs: update plugin template docs

Signed-off-by: Frederico Araujo <[email protected]>

* docs: update template readme

Signed-off-by: Frederico Araujo <[email protected]>

---------

Signed-off-by: Frederico Araujo <[email protected]>

* edit-tool

Signed-off-by: RAKHI DUTTA <[email protected]>

* edit-tool

Signed-off-by: RAKHI DUTTA <[email protected]>

* doc test

Signed-off-by: RAKHI DUTTA <[email protected]>

* edit-tool

Signed-off-by: RAKHI DUTTA <[email protected]>

* web lint

Signed-off-by: RAKHI DUTTA <[email protected]>

* flake8 fix

Signed-off-by: RAKHI DUTTA <[email protected]>

* pytest fix

Signed-off-by: RAKHI DUTTA <[email protected]>

* revert with main

Signed-off-by: RAKHI DUTTA <[email protected]>

* flake fix

Signed-off-by: RAKHI DUTTA <[email protected]>

* revert with main

Signed-off-by: RAKHI DUTTA <[email protected]>

* alembic

Signed-off-by: RAKHI DUTTA <[email protected]>

* alembic change

Signed-off-by: RAKHI DUTTA <[email protected]>

* flake8 fix

Signed-off-by: RAKHI DUTTA <[email protected]>

* remove addtional line

Signed-off-by: RAKHI DUTTA <[email protected]>

* alembic

Signed-off-by: RAKHI DUTTA <[email protected]>

* Rebase and fix

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: RAKHI DUTTA <[email protected]>
Signed-off-by: Mihai Criveti <[email protected]>
Signed-off-by: Ian Molloy <[email protected]>
Signed-off-by: Madhav Kandukuri <[email protected]>
Signed-off-by: Vinod Muthusamy <[email protected]>
Signed-off-by: Frederico Araujo <[email protected]>
Signed-off-by: Vicky <[email protected]>
Signed-off-by: Veeresh K <[email protected]>
Signed-off-by: Shoumi <[email protected]>
Signed-off-by: Mohan Lakshmaiah <[email protected]>
Signed-off-by: Teryl Taylor <[email protected]>
Signed-off-by: Shamsul Arefin <[email protected]>
Co-authored-by: RAKHI DUTTA <[email protected]>
Co-authored-by: Mihai Criveti <[email protected]>
Co-authored-by: Ian Molloy <[email protected]>
Co-authored-by: Madhav Kandukuri <[email protected]>
Co-authored-by: Vinod Muthusamy <[email protected]>
Co-authored-by: Vinod Muthusamy <[email protected]>
Co-authored-by: VK <[email protected]>
Co-authored-by: Frederico Araujo <[email protected]>
Co-authored-by: Madhav Kandukuri <[email protected]>
Co-authored-by: Vicky <[email protected]>
Co-authored-by: Veeresh K <[email protected]>
Co-authored-by: Shoumi M <[email protected]>
Co-authored-by: Mohan Lakshmaiah <[email protected]>
Co-authored-by: Mohan Lakshmaiah <[email protected]>
Co-authored-by: Teryl Taylor <[email protected]>
Co-authored-by: Shamsul Arefin <[email protected]>
Co-authored-by: Shamsul Arefin <[email protected]>
Co-authored-by: Claude <[email protected]>
vk-playground added a commit to vk-playground/mcp-context-forge that referenced this pull request Sep 16, 2025
* Oauth 2.1 design

Signed-off-by: Shamsul Arefin <[email protected]>

* oauth 2.0 design

Signed-off-by: Shamsul Arefin <[email protected]>

* Support for oauth auth type in gateway

Signed-off-by: Shamsul Arefin <[email protected]>

* Decrypt client secret

Signed-off-by: Shamsul Arefin <[email protected]>

* authorization code flow, token storage, tool fetching, tool calling with Oauth2.0

Signed-off-by: Shamsul Arefin <[email protected]>

* test fixes

Signed-off-by: Shamsul Arefin <[email protected]>

* 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 <[email protected]>

* Update fuzz testing

Signed-off-by: Mihai Criveti <[email protected]>

* Update fuzz testing

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Mihai Criveti <[email protected]>

* 344 cors security headers (IBM#761)

* Update CORS

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS ADRs

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS

Signed-off-by: Mihai Criveti <[email protected]>

* Fix compose

Signed-off-by: Mihai Criveti <[email protected]>

* Update helm chart

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS docs

Signed-off-by: Mihai Criveti <[email protected]>

* Update test

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Mihai Criveti <[email protected]>
Signed-off-by: Shamsul Arefin <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* Bulk import

Signed-off-by: Mihai Criveti <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* debug: Temporarily disable bulk import setup to test tabs

Signed-off-by: Mihai Criveti <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* Update docs

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Mihai Criveti <[email protected]>
Co-authored-by: Mihai Criveti <[email protected]>
Signed-off-by: Shamsul Arefin <[email protected]>

* Implemented configuration export (IBM#764)

Signed-off-by: Mihai Criveti <[email protected]>
Signed-off-by: Shamsul Arefin <[email protected]>

* cleanup

Signed-off-by: Shamsul Arefin <[email protected]>

* cleanup

Signed-off-by: Shamsul Arefin <[email protected]>

* fixes

Signed-off-by: Shamsul Arefin <[email protected]>

* ruff fixes

Signed-off-by: Shamsul Arefin <[email protected]>

* fix flake8 errors

Signed-off-by: Shamsul Arefin <[email protected]>

* fix eslint errors

Signed-off-by: Shamsul Arefin <[email protected]>

* aiohttp added in the main dependencies section of pyproject.toml

Signed-off-by: Shamsul Arefin <[email protected]>

* Review, rebase and lint

Signed-off-by: Mihai Criveti <[email protected]>

* 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 <[email protected]>
Signed-off-by: Mihai Criveti <[email protected]>

* 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 <[email protected]>
Signed-off-by: Mihai Criveti <[email protected]>

* Review, rebase and lint

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Shamsul Arefin <[email protected]>
Signed-off-by: Mihai Criveti <[email protected]>
Co-authored-by: Shamsul Arefin <[email protected]>
Co-authored-by: Mihai Criveti <[email protected]>
Co-authored-by: VK <[email protected]>
Co-authored-by: Claude <[email protected]>
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 <[email protected]>

* edit-tool

Signed-off-by: RAKHI DUTTA <[email protected]>

* edit-tool

Signed-off-by: RAKHI DUTTA <[email protected]>

* edit-tool

Signed-off-by: RAKHI DUTTA <[email protected]>

* edit-tool

Signed-off-by: RAKHI DUTTA <[email protected]>

* edit-tool

Signed-off-by: RAKHI DUTTA <[email protected]>

* edit-tool

Signed-off-by: RAKHI DUTTA <[email protected]>

* doc test

Signed-off-by: RAKHI DUTTA <[email protected]>

* pytest

Signed-off-by: RAKHI DUTTA <[email protected]>

* pytest

Signed-off-by: RAKHI DUTTA <[email protected]>

* revert alembic with main version

Signed-off-by: RAKHI DUTTA <[email protected]>

* 138 view realtime logs in UI and export logs (CSV, JSON) (IBM#747)

* Add logging UI

Signed-off-by: Mihai Criveti <[email protected]>

* Add logging UI

Signed-off-by: Mihai Criveti <[email protected]>

* Add logging UI

Signed-off-by: Mihai Criveti <[email protected]>

* Add logging UI readme

Signed-off-by: Mihai Criveti <[email protected]>

* Update logging flake8

Signed-off-by: Mihai Criveti <[email protected]>

* Update logging flake8

Signed-off-by: Mihai Criveti <[email protected]>

* test coverage

Signed-off-by: Mihai Criveti <[email protected]>

* test coverage

Signed-off-by: Mihai Criveti <[email protected]>

* Fix download

Signed-off-by: Mihai Criveti <[email protected]>

* Fix test

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Mihai Criveti <[email protected]>

* 749 reverse proxy (IBM#750)

* Fix download

Signed-off-by: Mihai Criveti <[email protected]>

* Reverse proxy

Signed-off-by: Mihai Criveti <[email protected]>

* Reverse proxy

Signed-off-by: Mihai Criveti <[email protected]>

* Reverse proxy

Signed-off-by: Mihai Criveti <[email protected]>

* doctest improvements

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Mihai Criveti <[email protected]>

* (fix) Added missing prompts/get (IBM#748)

Signed-off-by: Ian Molloy <[email protected]>

* Adds RPC endpoints and updates RPC response and error handling (IBM#746)

* Fix rpc endpoints
Signed-off-by: Madhav Kandukuri <[email protected]>

* Remove commented code
Signed-off-by: Madhav Kandukuri <[email protected]>

* remove duplicate code in session registry

Signed-off-by: Madhav Kandukuri <[email protected]>

* Linting fixes
Signed-off-by: Madhav Kandukuri <[email protected]>

* Fix tests
Signed-off-by: Madhav Kandukuri <[email protected]>

---------

Signed-off-by: Madhav Kandukuri <[email protected]>

* 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 <[email protected]>

* Fix flake8 E722: Replace bare except with Exception

Signed-off-by: Mihai Criveti <[email protected]>

* lint

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Mihai Criveti <[email protected]>

* 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 <[email protected]>

* Add agents file

Signed-off-by: Mihai Criveti <[email protected]>

* pylint (IBM#759)

Signed-off-by: Mihai Criveti <[email protected]>

* Remove redundant title in readme. (IBM#757)

Signed-off-by: Vinod Muthusamy <[email protected]>
Co-authored-by: Vinod Muthusamy <[email protected]>

* Update documentation with fixed image tag

Signed-off-by: Mihai Criveti <[email protected]>

* 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 <[email protected]>

* Update fuzz testing

Signed-off-by: Mihai Criveti <[email protected]>

* Update fuzz testing

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Mihai Criveti <[email protected]>

* 344 cors security headers (IBM#761)

* Update CORS

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS ADRs

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS

Signed-off-by: Mihai Criveti <[email protected]>

* Fix compose

Signed-off-by: Mihai Criveti <[email protected]>

* Update helm chart

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS docs

Signed-off-by: Mihai Criveti <[email protected]>

* Update test

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Mihai Criveti <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* Bulk import

Signed-off-by: Mihai Criveti <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* debug: Temporarily disable bulk import setup to test tabs

Signed-off-by: Mihai Criveti <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* Update docs

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Mihai Criveti <[email protected]>
Co-authored-by: Mihai Criveti <[email protected]>

* Implemented configuration export (IBM#764)

Signed-off-by: Mihai Criveti <[email protected]>

* 185 186 import export (IBM#769)

* Import export

Signed-off-by: Mihai Criveti <[email protected]>

* Import export

Signed-off-by: Mihai Criveti <[email protected]>

* Import export

Signed-off-by: Mihai Criveti <[email protected]>

* Import export

Signed-off-by: Mihai Criveti <[email protected]>

* Import export

Signed-off-by: Mihai Criveti <[email protected]>

* Import export

Signed-off-by: Mihai Criveti <[email protected]>

* Import export

Signed-off-by: Mihai Criveti <[email protected]>

* Import export

Signed-off-by: Mihai Criveti <[email protected]>

* Import export testing

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Mihai Criveti <[email protected]>

* fix: local network address translation in discovery module (IBM#767)

Signed-off-by: Frederico Araujo <[email protected]>

* Well known (IBM#770)

Signed-off-by: Mihai Criveti <[email protected]>

* Update docs with jsonrpc tutorial (IBM#772)

Signed-off-by: Mihai Criveti <[email protected]>

* 137 metadata timestamps (IBM#776)

* Metadata / creation dates

Signed-off-by: Mihai Criveti <[email protected]>

* Metadata / creation dates

Signed-off-by: Mihai Criveti <[email protected]>

* Metadata / creation dates

Signed-off-by: Mihai Criveti <[email protected]>

* Security headers CSP

Signed-off-by: Mihai Criveti <[email protected]>

* Display metadata for resources
Signed-off-by: Madhav Kandukuri <[email protected]>

* eslint fix
Signed-off-by: Madhav Kandukuri <[email protected]>

---------

Signed-off-by: Mihai Criveti <[email protected]>
Co-authored-by: Madhav Kandukuri <[email protected]>

* feat IBM#262: MCP Langchain Agent (IBM#781)

* feat: Add bulk import UI modal for tools

Signed-off-by: Vicky <[email protected]>

* feat: Add Langchain agent with OpenAI & A2A endpoints (refs IBM#262)

Signed-off-by: Vicky <[email protected]>

* lint: prettier fix at ~L8090 (insert newline)

Signed-off-by: Vicky <[email protected]>

---------

Signed-off-by: Vicky <[email protected]>
Co-authored-by: Vicky <[email protected]>

* Cleanup pr

Signed-off-by: Mihai Criveti <[email protected]>

* Cleanup pr

Signed-off-by: Mihai Criveti <[email protected]>

* Issue 587/rest tool error (IBM#778)

* added params extraction from url logic

Signed-off-by: Veeresh K <[email protected]>

* added params extraction from url logic

Signed-off-by: Veeresh K <[email protected]>

* Rebase and lint / test

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Veeresh K <[email protected]>
Signed-off-by: Mihai Criveti <[email protected]>
Co-authored-by: Mihai Criveti <[email protected]>

* edit column header (IBM#777)

Signed-off-by: Shoumi <[email protected]>

* Test case update (IBM#775)

* session_registry test case updates

Signed-off-by: Mohan Lakshmaiah <[email protected]>

* test case update for routers/reverse_proxy

Signed-off-by: Mohan Lakshmaiah <[email protected]>

* test case update to mcpgateway/reverse_proxy.py

Signed-off-by: Mohan Lakshmaiah <[email protected]>

* Fix formatting issues from pre-commit hooks

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Mohan Lakshmaiah <[email protected]>
Signed-off-by: Mihai Criveti <[email protected]>
Co-authored-by: Mohan Lakshmaiah <[email protected]>
Co-authored-by: Mihai Criveti <[email protected]>

* feat: add plugins cli, external plugin support, plugin template (IBM#722)

* feat: add support for external plugins

Signed-off-by: Teryl Taylor <[email protected]>

* feat(plugins): add external mcp server and associated test cases.

Signed-off-by: Teryl Taylor <[email protected]>

* fix(lint): fixed yamllint issues

Signed-off-by: Teryl Taylor <[email protected]>

* fix(lint): fixed flake8 issue.

Signed-off-by: Teryl Taylor <[email protected]>

* feat: define plugins cli and implement bootstrap command

Signed-off-by: Frederico Araujo <[email protected]>

* fix: implement install and package CLI commands

Signed-off-by: Frederico Araujo <[email protected]>

* fix: remote avoid insecure shell=True in subprocess invocation

Signed-off-by: Frederico Araujo <[email protected]>

* feat: add external plugin template

Signed-off-by: Frederico Araujo <[email protected]>

* feat: move copier config to repository root

Signed-off-by: Frederico Araujo <[email protected]>

* feat: update copier template

Signed-off-by: Frederico Araujo <[email protected]>

* feat: get default author from git config

Signed-off-by: Frederico Araujo <[email protected]>

* feat: update copier settings

Signed-off-by: Frederico Araujo <[email protected]>

* fix: copier config syntax

Signed-off-by: Frederico Araujo <[email protected]>

* feat: add external plugin template modules

Signed-off-by: Frederico Araujo <[email protected]>

* fix: template syntax

Signed-off-by: Frederico Araujo <[email protected]>

* fix: template syntax

Signed-off-by: Frederico Araujo <[email protected]>

* fix: make template

Signed-off-by: Frederico Araujo <[email protected]>

* feat: fix template issue

Signed-off-by: Frederico Araujo <[email protected]>

* fix: toml template

Signed-off-by: Frederico Araujo <[email protected]>

* fix: plugin mcp server initialization

Signed-off-by: Frederico Araujo <[email protected]>

* feat: init module for plugin framework

Signed-off-by: Frederico Araujo <[email protected]>

* feat: add chuck runtime and container wrapping

Signed-off-by: Frederico Araujo <[email protected]>

* fix: makefile template

Signed-off-by: Frederico Araujo <[email protected]>

* fix: plugins config path

Signed-off-by: Frederico Araujo <[email protected]>

* feat: add .env.template

Signed-off-by: Frederico Araujo <[email protected]>

* feat: add tools and resources support

Signed-off-by: Frederico Araujo <[email protected]>

* fix: lint yaml

Signed-off-by: Frederico Araujo <[email protected]>

* chore: cleanups

Signed-off-by: Frederico Araujo <[email protected]>

* feat: update manifest.in

Signed-off-by: Frederico Araujo <[email protected]>

* chore: linting

Signed-off-by: Frederico Araujo <[email protected]>

* fix: plugin config variable

Signed-off-by: Frederico Araujo <[email protected]>

* fix(tests): fixed doctests for plugins.

Signed-off-by: Teryl Taylor <[email protected]>

* refactor: external plugin server and plugin external API

Signed-off-by: Frederico Araujo <[email protected]>

* docs(plugins): removed subpackages from examples

Signed-off-by: Teryl Taylor <[email protected]>

* docs: update plugin docs to use public framework API

Signed-off-by: Frederico Araujo <[email protected]>

* fix(plugin): added resource payloads to base plugin.

Signed-off-by: Teryl Taylor <[email protected]>

* feat: udpate test templates

Signed-off-by: Frederico Araujo <[email protected]>

* feat: update test templates

Signed-off-by: Frederico Araujo <[email protected]>

* feat: update plugin template

Signed-off-by: Frederico Araujo <[email protected]>

* feat: update plugin template

Signed-off-by: Frederico Araujo <[email protected]>

* feat: update tempalte makefile

Signed-off-by: Frederico Araujo <[email protected]>

* feat: add template for native plugin

Signed-off-by: Frederico Araujo <[email protected]>

* feat: add readme for native template

Signed-off-by: Frederico Araujo <[email protected]>

* feat: force boostrap to be a subcommnand

Signed-off-by: Frederico Araujo <[email protected]>

* tests(plugin): added http streamable and error tests.

Signed-off-by: Teryl Taylor <[email protected]>

* tests: add tests for plugins CLI

Signed-off-by: Frederico Araujo <[email protected]>

* fix: deprecation warning

Signed-off-by: Frederico Araujo <[email protected]>

* tests: add CLI tests

Signed-off-by: Frederico Araujo <[email protected]>

* tests: update plugin cli

Signed-off-by: Frederico Araujo <[email protected]>

* tests(plugins): added client hook tests for external plugins.

Signed-off-by: Teryl Taylor <[email protected]>

* chore: update template readmes

Signed-off-by: Frederico Araujo <[email protected]>

* fix: lint docstrings in cli

Signed-off-by: Frederico Araujo <[email protected]>

* chore: fix lint errors in docstrings

Signed-off-by: Frederico Araujo <[email protected]>

* chore: fix lint errors

Signed-off-by: Frederico Araujo <[email protected]>

* tests: add external plugin server tests

Signed-off-by: Frederico Araujo <[email protected]>

* chore: cleanup

Signed-off-by: Frederico Araujo <[email protected]>

* chore: add missing docstrings

Signed-off-by: Frederico Araujo <[email protected]>

* chore: add missing docstrings

Signed-off-by: Frederico Araujo <[email protected]>

* tests: fix cli dryrun test

Signed-off-by: Frederico Araujo <[email protected]>

* chore: fix lint issues

Signed-off-by: Frederico Araujo <[email protected]>

* tests: fix teardown of client http tests

Signed-off-by: Frederico Araujo <[email protected]>

* tests: skipping flaky tests

Signed-off-by: Frederico Araujo <[email protected]>

* docs: plugin lifecycle tools

Signed-off-by: Frederico Araujo <[email protected]>

* docs: add missing plugin lifecycle doc

Signed-off-by: Frederico Araujo <[email protected]>

* Review, rebase and lint

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Teryl Taylor <[email protected]>
Signed-off-by: Frederico Araujo <[email protected]>
Signed-off-by: Mihai Criveti <[email protected]>
Co-authored-by: Teryl Taylor <[email protected]>
Co-authored-by: Mihai Criveti <[email protected]>

* feat: Experimental Oauth 2.0 support in gateway (IBM#768)

* Oauth 2.1 design

Signed-off-by: Shamsul Arefin <[email protected]>

* oauth 2.0 design

Signed-off-by: Shamsul Arefin <[email protected]>

* Support for oauth auth type in gateway

Signed-off-by: Shamsul Arefin <[email protected]>

* Decrypt client secret

Signed-off-by: Shamsul Arefin <[email protected]>

* authorization code flow, token storage, tool fetching, tool calling with Oauth2.0

Signed-off-by: Shamsul Arefin <[email protected]>

* test fixes

Signed-off-by: Shamsul Arefin <[email protected]>

* 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 <[email protected]>

* Update fuzz testing

Signed-off-by: Mihai Criveti <[email protected]>

* Update fuzz testing

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Mihai Criveti <[email protected]>

* 344 cors security headers (IBM#761)

* Update CORS

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS ADRs

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS

Signed-off-by: Mihai Criveti <[email protected]>

* Fix compose

Signed-off-by: Mihai Criveti <[email protected]>

* Update helm chart

Signed-off-by: Mihai Criveti <[email protected]>

* Update CORS docs

Signed-off-by: Mihai Criveti <[email protected]>

* Update test

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Mihai Criveti <[email protected]>
Signed-off-by: Shamsul Arefin <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* Bulk import

Signed-off-by: Mihai Criveti <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* debug: Temporarily disable bulk import setup to test tabs

Signed-off-by: Mihai Criveti <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* Update docs

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Mihai Criveti <[email protected]>
Co-authored-by: Mihai Criveti <[email protected]>
Signed-off-by: Shamsul Arefin <[email protected]>

* Implemented configuration export (IBM#764)

Signed-off-by: Mihai Criveti <[email protected]>
Signed-off-by: Shamsul Arefin <[email protected]>

* cleanup

Signed-off-by: Shamsul Arefin <[email protected]>

* cleanup

Signed-off-by: Shamsul Arefin <[email protected]>

* fixes

Signed-off-by: Shamsul Arefin <[email protected]>

* ruff fixes

Signed-off-by: Shamsul Arefin <[email protected]>

* fix flake8 errors

Signed-off-by: Shamsul Arefin <[email protected]>

* fix eslint errors

Signed-off-by: Shamsul Arefin <[email protected]>

* aiohttp added in the main dependencies section of pyproject.toml

Signed-off-by: Shamsul Arefin <[email protected]>

* Review, rebase and lint

Signed-off-by: Mihai Criveti <[email protected]>

* 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 <[email protected]>
Signed-off-by: Mihai Criveti <[email protected]>

* 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 <[email protected]>
Signed-off-by: Mihai Criveti <[email protected]>

* Review, rebase and lint

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Shamsul Arefin <[email protected]>
Signed-off-by: Mihai Criveti <[email protected]>
Co-authored-by: Shamsul Arefin <[email protected]>
Co-authored-by: Mihai Criveti <[email protected]>
Co-authored-by: VK <[email protected]>
Co-authored-by: Claude <[email protected]>

* Fix pre-commit hooks

Signed-off-by: Mihai Criveti <[email protected]>

* 744 annotations (IBM#784)

* Fix annotations edit

Signed-off-by: Mihai Criveti <[email protected]>

* Fix annotations edit

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: Mihai Criveti <[email protected]>

* fix: plugins template (IBM#783)

* feat: update context forge target in template's project dependencies

Signed-off-by: Frederico Araujo <[email protected]>

* fix: exclude jinja files from reformatting tabs

Signed-off-by: Frederico Araujo <[email protected]>

* fix: plugins cli defaults

Signed-off-by: Frederico Araujo <[email protected]>

* fix: revert formatted Makefile template

Signed-off-by: Frederico Araujo <[email protected]>

* feat: add optional packages

Signed-off-by: Frederico Araujo <[email protected]>

* docs: update plugin template docs

Signed-off-by: Frederico Araujo <[email protected]>

* docs: update template readme

Signed-off-by: Frederico Araujo <[email protected]>

---------

Signed-off-by: Frederico Araujo <[email protected]>

* edit-tool

Signed-off-by: RAKHI DUTTA <[email protected]>

* edit-tool

Signed-off-by: RAKHI DUTTA <[email protected]>

* doc test

Signed-off-by: RAKHI DUTTA <[email protected]>

* edit-tool

Signed-off-by: RAKHI DUTTA <[email protected]>

* web lint

Signed-off-by: RAKHI DUTTA <[email protected]>

* flake8 fix

Signed-off-by: RAKHI DUTTA <[email protected]>

* pytest fix

Signed-off-by: RAKHI DUTTA <[email protected]>

* revert with main

Signed-off-by: RAKHI DUTTA <[email protected]>

* flake fix

Signed-off-by: RAKHI DUTTA <[email protected]>

* revert with main

Signed-off-by: RAKHI DUTTA <[email protected]>

* alembic

Signed-off-by: RAKHI DUTTA <[email protected]>

* alembic change

Signed-off-by: RAKHI DUTTA <[email protected]>

* flake8 fix

Signed-off-by: RAKHI DUTTA <[email protected]>

* remove addtional line

Signed-off-by: RAKHI DUTTA <[email protected]>

* alembic

Signed-off-by: RAKHI DUTTA <[email protected]>

* Rebase and fix

Signed-off-by: Mihai Criveti <[email protected]>

---------

Signed-off-by: RAKHI DUTTA <[email protected]>
Signed-off-by: Mihai Criveti <[email protected]>
Signed-off-by: Ian Molloy <[email protected]>
Signed-off-by: Madhav Kandukuri <[email protected]>
Signed-off-by: Vinod Muthusamy <[email protected]>
Signed-off-by: Frederico Araujo <[email protected]>
Signed-off-by: Vicky <[email protected]>
Signed-off-by: Veeresh K <[email protected]>
Signed-off-by: Shoumi <[email protected]>
Signed-off-by: Mohan Lakshmaiah <[email protected]>
Signed-off-by: Teryl Taylor <[email protected]>
Signed-off-by: Shamsul Arefin <[email protected]>
Co-authored-by: RAKHI DUTTA <[email protected]>
Co-authored-by: Mihai Criveti <[email protected]>
Co-authored-by: Ian Molloy <[email protected]>
Co-authored-by: Madhav Kandukuri <[email protected]>
Co-authored-by: Vinod Muthusamy <[email protected]>
Co-authored-by: Vinod Muthusamy <[email protected]>
Co-authored-by: VK <[email protected]>
Co-authored-by: Frederico Araujo <[email protected]>
Co-authored-by: Madhav Kandukuri <[email protected]>
Co-authored-by: Vicky <[email protected]>
Co-authored-by: Veeresh K <[email protected]>
Co-authored-by: Shoumi M <[email protected]>
Co-authored-by: Mohan Lakshmaiah <[email protected]>
Co-authored-by: Mohan Lakshmaiah <[email protected]>
Co-authored-by: Teryl Taylor <[email protected]>
Co-authored-by: Shamsul Arefin <[email protected]>
Co-authored-by: Shamsul Arefin <[email protected]>
Co-authored-by: Claude <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants