Skip to content

Conversation

crivetimihai
Copy link
Member

PR: Enhanced MCP JSON-RPC Documentation

Closes #19 Closes #323

Overview

This PR implements comprehensive developer guides for using MCP (Model Context Protocol) via raw JSON-RPC commands, addressing issues #19 and #323.

Changes Made

1. Enhanced Fast-Time-Server Documentation (Issue #323)

File: docs/docs/using/servers/go-fast-time-server.md

Added a new "Developer Guide: Raw JSON-RPC Protocol Usage" section with:

  • Complete JSON-RPC over HTTP examples

    • Full session script showing complete MCP protocol flow
    • Individual command examples for all MCP operations
    • Authentication examples with Bearer tokens
  • STDIO protocol examples

    • Interactive testing methods
    • Script-based testing examples
    • Here-document usage patterns
  • Expected response formats

    • Successful initialize responses
    • Tools list responses
    • Tool call responses
    • Error response examples
  • Comprehensive troubleshooting

    • JSON-RPC specific issues and solutions
    • Authentication error handling
    • STDIO mode troubleshooting
    • Connection and format validation
  • Integration examples

    • Production-ready Python client implementation
    • Node.js client implementation
    • Practical usage patterns

2. New MCP JSON-RPC Developer Guide (Issue #19)

File: docs/docs/development/mcp-developer-guide-json-rpc.md (NEW)

Created comprehensive guide covering:

  • Complete MCP protocol documentation

    • Protocol initialization sequence
    • Authentication setup and token management
    • Multiple transport methods (HTTP JSON-RPC, SSE, STDIO)
  • Working with MCP components

    • Tools (list, call, error handling)
    • Resources (list, read)
    • Prompts (list, get with arguments)
  • Transport-specific examples

    • HTTP JSON-RPC with complete session flows
    • Server-Sent Events (SSE) for real-time communication
    • STDIO for desktop client integration
  • Error handling and troubleshooting

    • Standard JSON-RPC error codes
    • MCP Gateway specific issues
    • Known bugs and workarounds (e.g., initialize method async issue)
  • Production-ready integration examples

    • Full Python client implementation with proper error handling
    • Node.js client implementation with async/await patterns
    • Best practices for session management and authentication

3. Documentation Structure Updates

Files: Multiple .pages files updated

  • Moved MCP developer guide from docs/docs/using/ to docs/docs/development/ for better organization
  • Updated navigation structure to include the guide in the development section
  • Comprehensive navigation audit - added missing files to navigation across all documentation sections

Technical Details

Authentication Implementation

Both guides include comprehensive authentication examples:

# Token generation
export MCPGATEWAY_BEARER_TOKEN=$(python3 -m mcpgateway.utils.create_jwt_token \
    --username admin --exp 10080 --secret my-test-key)

# Usage in requests
curl -H "Authorization: Bearer $MCPGATEWAY_BEARER_TOKEN" \
     -H "Content-Type: application/json" \
     -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' \
     http://localhost:4444/rpc

Complete Session Examples

Both guides provide complete, executable session scripts:

  • Fast-time-server: Complete MCP JSON-RPC session with the Go-based time server
  • MCP Gateway: Full session examples for both HTTP and SSE transports

Error Handling

Comprehensive error handling coverage including:

  • Standard JSON-RPC 2.0 error codes (-32700 to -32603)
  • MCP Gateway specific errors (-32000 to -32099)
  • Authentication and connection troubleshooting
  • Known issues and their workarounds

Integration Examples

Production-ready client implementations in both Python and Node.js with:

  • Proper session management
  • Error handling and retry logic
  • Authentication token management
  • Type hints and documentation

Navigation and Organization Updates

Files Added to Navigation

The following files were missing from their respective .pages navigation and have been added:

/docs/docs/using/.pages:

  • ✅ Added multi-auth-headers.md

/docs/docs/manage/.pages:

  • ✅ Added export-import.md
  • ✅ Added export-import-tutorial.md
  • ✅ Added export-import-reference.md
  • ✅ Added observability.md
  • ✅ Added proxy.md
  • ✅ Added well-known-uris.md

/docs/docs/deployment/.pages:

  • ✅ Added proxy-auth.md

/docs/docs/overview/.pages:

  • ✅ Added passthrough.md

/docs/docs/architecture/.pages:

  • ✅ Added export-import-architecture.md

/docs/docs/testing/.pages:

  • ✅ Added fuzzing.md

/docs/docs/development/.pages:

  • ✅ Added mcp-developer-guide-json-rpc.md

File Relocation

  • Moved: mcp-developer-guide-json-rpc.md from using/ to development/ section for better thematic organization
  • Updated: All navigation references to reflect the new location

Benefits

  1. Developer Onboarding: Comprehensive guides for understanding MCP protocol at a low level
  2. Debugging Support: Complete examples for testing and debugging MCP implementations
  3. Integration Reference: Production-ready client code examples
  4. Protocol Compliance: Proper MCP protocol flow documentation
  5. Troubleshooting: Comprehensive error handling and known issues documentation
  6. Complete Navigation: All documentation files are now properly discoverable through navigation

Testing

Both guides include:

  • Complete executable examples that can be copy-pasted and run
  • Step-by-step testing procedures
  • Expected response formats for verification
  • Troubleshooting steps for common issues

Documentation Quality

  • Comprehensive: Covers all aspects of MCP JSON-RPC usage
  • Practical: Includes working examples and complete session flows
  • Educational: Explains the protocol flow and best practices
  • Production-ready: Includes proper error handling and authentication
  • Maintainable: Well-structured with clear sections and examples

Related Issues

Future Enhancements

These guides provide a foundation for:

  • Additional MCP server documentation
  • Client library development
  • Protocol testing and validation tools
  • Integration with CI/CD pipelines for MCP testing

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
@crivetimihai crivetimihai marked this pull request as ready for review August 18, 2025 06:06
@crivetimihai crivetimihai merged commit ab77d05 into main Aug 18, 2025
30 of 32 checks passed
@crivetimihai crivetimihai deleted the 19-323-json-rpc-protocol-docs branch August 18, 2025 06:07
rakdutta pushed a commit to rakdutta/mcp-context-forge that referenced this pull request Aug 19, 2025
Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
crivetimihai added a commit that referenced this pull request Aug 20, 2025
…g Implementation (#786)

* db.py update

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* edit-tool

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* edit-tool

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* edit-tool

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* edit-tool

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* edit-tool

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* edit-tool

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* doc test

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* pytest

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* pytest

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* revert alembic with main version

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

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

* Add logging UI

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

* Add logging UI

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

* Add logging UI

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

* Add logging UI readme

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

* Update logging flake8

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

* Update logging flake8

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

* test coverage

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

* test coverage

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

* Fix download

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

* Fix test

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

---------

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

* 749 reverse proxy (#750)

* Fix download

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

* Reverse proxy

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

* Reverse proxy

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

* Reverse proxy

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

* doctest improvements

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

---------

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

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

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

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

* Fix rpc endpoints
Signed-off-by: Madhav Kandukuri <madhav165@gmail.com>

* Remove commented code
Signed-off-by: Madhav Kandukuri <madhav165@gmail.com>

* remove duplicate code in session registry

Signed-off-by: Madhav Kandukuri <madhav165@gmail.com>

* Linting fixes
Signed-off-by: Madhav Kandukuri <madhav165@gmail.com>

* Fix tests
Signed-off-by: Madhav Kandukuri <madhav165@gmail.com>

---------

Signed-off-by: Madhav Kandukuri <madhav165@gmail.com>

* 753 fix tool invocation invalid method (#754)

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

- Add backward compatibility for direct tool invocation (pre-PR #746 format)
- Support both old format (method=tool_name) and new format (method=tools/call)
- Add comprehensive test coverage for RPC tool invocation scenarios
- Ensure graceful fallback to gateway forwarding when method is not a tool

The RPC endpoint now handles tool invocations in both formats:
1. New format: method='tools/call' with name and arguments in params
2. Old format: method='tool_name' with params as arguments (backward compat)

This maintains compatibility with existing clients while supporting the new
standardized RPC method structure introduced in PR #746.

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

* Fix flake8 E722: Replace bare except with Exception

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

* lint

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

---------

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

* fix: suppress bandit security warnings with appropriate nosec comments (#755)

- Added nosec B105 for ENV_TOKEN as it's an environment variable name, not a hardcoded secret
- Added nosec B110 for intentional exception swallowing in cleanup/error handling paths
- Both cases are legitimate uses where errors should be silently ignored to prevent cascading failures

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

* Add agents file

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

* pylint (#759)

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

* Remove redundant title in readme. (#757)

Signed-off-by: Vinod Muthusamy <770084+vinodmut@users.noreply.github.com>
Co-authored-by: Vinod Muthusamy <770084+vinodmut@users.noreply.github.com>

* Update documentation with fixed image tag

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

* 256 fuzz testing (#760)

* Implement comprehensive fuzz testing automation (#256)

- Add property-based testing with Hypothesis for JSON-RPC, JSONPath, and schema validation
- Add coverage-guided fuzzing with Atheris for deep code path exploration
- Add API endpoint fuzzing with Schemathesis for contract validation
- Add security-focused testing for vulnerability discovery (SQL injection, XSS, etc.)
- Add complete Makefile automation with fuzz-all, fuzz-quick, fuzz-extended targets
- Add optional [fuzz] dependency group in pyproject.toml for clean installation
- Add comprehensive reporting with JSON/Markdown outputs and executive summaries
- Add complete developer documentation with examples and troubleshooting guides
- Exclude fuzz tests from main test suite to prevent auth failures
- Found multiple real bugs in JSON-RPC validation during development

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

* Update fuzz testing

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

* Update fuzz testing

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

---------

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

* 344 cors security headers (#761)

* Update CORS

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

* Update CORS

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

* Update CORS ADRs

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

* Update CORS

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

* Update CORS

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

* Fix compose

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

* Update helm chart

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

* Update CORS docs

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

* Update test

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

---------

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

* feat: Bulk Import Tools modal wiring #737 (#739)

* feat: Bulk Import Tools modal wiring and backend implementation

- Add modal UI in admin.html with bulk import button and dialog
- Implement modal open/close/ESC functionality in admin.js
- Add POST /admin/tools/import endpoint with rate limiting
- Support both JSON textarea and file upload inputs
- Validate JSON structure and enforce 200 tool limit
- Return detailed success/failure information per tool
- Include loading states and comprehensive error handling

Refs #737

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

* fix: Remove duplicate admin_import_tools function and fix HTML formatting

- Remove duplicate admin_import_tools function definition
- Fix HTML placeholder attribute to use double quotes
- Add missing closing div tag
- Fix flake8 blank line issues

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

* feat: Complete bulk import backend with file upload support and enhanced docs

- Add file upload support to admin_import_tools endpoint
- Fix response format to match frontend expectations
- Add UI usage documentation with modal instructions
- Update API docs to show all three input methods
- Enhance bulk import guide with UI and API examples

Backend improvements:
- Support tools_file form field for JSON file uploads
- Proper file content parsing with error handling
- Response includes imported/failed counts and details
- Frontend-compatible response format for UI display

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

* Bulk import

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

* fix: Remove conflicting inline script and fix bulk import functionality

- Remove conflicting inline JavaScript that was preventing form submission
- Fix indentation in setupBulkImportModal function
- Ensure bulk import modal uses proper admin.js implementation
- Restore proper form submission handling for bulk import

This fixes the issue where bulk import appeared to do nothing.

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

* fix: Integrate bulk import setup with main initialization

- Add setupBulkImportModal() to main initialization sequence
- Remove duplicate DOMContentLoaded listener
- Ensure bulk import doesn't interfere with other tab functionality

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

* fix: JavaScript formatting issues in bulk import modal

- Fix multiline querySelector formatting
- Fix multiline Error constructor formatting
- Ensure prettier compliance for web linting

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

* debug: Temporarily disable bulk import setup to test tabs

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

* fix: Remove duplicate setupFormValidation call and delay bulk import setup

- Remove duplicate setupFormValidation() call that could cause conflicts
- Use setTimeout to delay bulk import modal setup after other initialization
- Add better null safety to form element queries
- This should fix tab switching issues

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

* fix: Restore proper initialization sequence for tab functionality

- Remove setTimeout delay for bulk import setup
- Keep bulk import setup in main initialization but with error handling
- Ensure tab navigation isn't affected by bulk import modal setup

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

* fix: Correct HTML structure and restore tab navigation

- Move bulk import modal to correct location after tools panel
- Remove extra closing div that was breaking HTML structure
- Ensure proper page-level modal placement
- Restore tab navigation functionality for all tabs

This fixes the broken Global Resources, Prompts, Gateways, Roots, and Metrics tabs.

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

* feat: Add configurable bulk import settings

Configuration additions:
- MCPGATEWAY_BULK_IMPORT_MAX_TOOLS (default: 200)
- MCPGATEWAY_BULK_IMPORT_RATE_LIMIT (default: 10)

Implementation:
- config.py: Add new settings with defaults
- admin.py: Use configurable rate limit and batch size
- .env.example: Document all bulk import environment variables
- admin.html: Use dynamic max tools value in UI text
- CLAUDE.md: Document configuration options for developers
- docs: Update bulk import guide with configuration details

This makes bulk import fully configurable for different deployment scenarios.

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

* Update docs

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

---------

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

* Implemented configuration export (#764)

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

* 185 186 import export (#769)

* Import export

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

* Import export

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

* Import export

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

* Import export

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

* Import export

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

* Import export

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

* Import export

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

* Import export

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

* Import export testing

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

---------

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

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

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

* Well known (#770)

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

* Update docs with jsonrpc tutorial (#772)

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

* 137 metadata timestamps (#776)

* Metadata / creation dates

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

* Metadata / creation dates

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

* Metadata / creation dates

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

* Security headers CSP

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

* Display metadata for resources
Signed-off-by: Madhav Kandukuri <madhav165@gmail.com>

* eslint fix
Signed-off-by: Madhav Kandukuri <madhav165@gmail.com>

---------

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
Co-authored-by: Madhav Kandukuri <madhav165@gmail.com>

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

* feat: Add bulk import UI modal for tools

Signed-off-by: Vicky <vicky.kuo.contact@gmail.com>

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

Signed-off-by: Vicky <vicky.kuo.contact@gmail.com>

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

Signed-off-by: Vicky <vicky.kuo.contact@gmail.com>

---------

Signed-off-by: Vicky <vicky.kuo.contact@gmail.com>
Co-authored-by: Vicky <vicky.kuo.contact@gmail.com>

* Cleanup pr

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

* Cleanup pr

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

* Issue 587/rest tool error (#778)

* added params extraction from url logic

Signed-off-by: Veeresh K <veeruveeresh1522@gmail.com>

* added params extraction from url logic

Signed-off-by: Veeresh K <veeruveeresh1522@gmail.com>

* Rebase and lint / test

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

---------

Signed-off-by: Veeresh K <veeruveeresh1522@gmail.com>
Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
Co-authored-by: Mihai Criveti <crivetimihai@gmail.com>

* edit column header (#777)

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

* Test case update (#775)

* session_registry test case updates

Signed-off-by: Mohan Lakshmaiah <mohalaks@in.ibm.com>

* test case update for routers/reverse_proxy

Signed-off-by: Mohan Lakshmaiah <mohalaks@in.ibm.com>

* test case update to mcpgateway/reverse_proxy.py

Signed-off-by: Mohan Lakshmaiah <mohalaks@in.ibm.com>

* Fix formatting issues from pre-commit hooks

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

---------

Signed-off-by: Mohan Lakshmaiah <mohalaks@in.ibm.com>
Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
Co-authored-by: Mohan Lakshmaiah <mohalaks@in.ibm.com>
Co-authored-by: Mihai Criveti <crivetimihai@gmail.com>

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

* feat: add support for external plugins

Signed-off-by: Teryl Taylor <terylt@ibm.com>

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

Signed-off-by: Teryl Taylor <terylt@ibm.com>

* fix(lint): fixed yamllint issues

Signed-off-by: Teryl Taylor <terylt@ibm.com>

* fix(lint): fixed flake8 issue.

Signed-off-by: Teryl Taylor <terylt@ibm.com>

* feat: define plugins cli and implement bootstrap command

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

* fix: implement install and package CLI commands

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

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

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

* feat: add external plugin template

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

* feat: move copier config to repository root

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

* feat: update copier template

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

* feat: get default author from git config

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

* feat: update copier settings

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

* fix: copier config syntax

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

* feat: add external plugin template modules

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

* fix: template syntax

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

* fix: template syntax

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

* fix: make template

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

* feat: fix template issue

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

* fix: toml template

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

* fix: plugin mcp server initialization

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

* feat: init module for plugin framework

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

* feat: add chuck runtime and container wrapping

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

* fix: makefile template

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

* fix: plugins config path

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

* feat: add .env.template

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

* feat: add tools and resources support

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

* fix: lint yaml

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

* chore: cleanups

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

* feat: update manifest.in

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

* chore: linting

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

* fix: plugin config variable

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

* fix(tests): fixed doctests for plugins.

Signed-off-by: Teryl Taylor <terylt@ibm.com>

* refactor: external plugin server and plugin external API

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

* docs(plugins): removed subpackages from examples

Signed-off-by: Teryl Taylor <terylt@ibm.com>

* docs: update plugin docs to use public framework API

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

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

Signed-off-by: Teryl Taylor <terylt@ibm.com>

* feat: udpate test templates

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

* feat: update test templates

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

* feat: update plugin template

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

* feat: update plugin template

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

* feat: update tempalte makefile

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

* feat: add template for native plugin

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

* feat: add readme for native template

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

* feat: force boostrap to be a subcommnand

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

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

Signed-off-by: Teryl Taylor <terylt@ibm.com>

* tests: add tests for plugins CLI

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

* fix: deprecation warning

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

* tests: add CLI tests

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

* tests: update plugin cli

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

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

Signed-off-by: Teryl Taylor <terylt@ibm.com>

* chore: update template readmes

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

* fix: lint docstrings in cli

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

* chore: fix lint errors in docstrings

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

* chore: fix lint errors

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

* tests: add external plugin server tests

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

* chore: cleanup

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

* chore: add missing docstrings

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

* chore: add missing docstrings

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

* tests: fix cli dryrun test

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

* chore: fix lint issues

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

* tests: fix teardown of client http tests

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

* tests: skipping flaky tests

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

* docs: plugin lifecycle tools

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

* docs: add missing plugin lifecycle doc

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

* Review, rebase and lint

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

---------

Signed-off-by: Teryl Taylor <terylt@ibm.com>
Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com>
Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
Co-authored-by: Teryl Taylor <terylt@ibm.com>
Co-authored-by: Mihai Criveti <crivetimihai@gmail.com>

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

* Oauth 2.1 design

Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>

* oauth 2.0 design

Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>

* Support for oauth auth type in gateway

Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>

* Decrypt client secret

Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>

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

Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>

* test fixes

Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>

* 256 fuzz testing (#760)

* Implement comprehensive fuzz testing automation (#256)

- Add property-based testing with Hypothesis for JSON-RPC, JSONPath, and schema validation
- Add coverage-guided fuzzing with Atheris for deep code path exploration
- Add API endpoint fuzzing with Schemathesis for contract validation
- Add security-focused testing for vulnerability discovery (SQL injection, XSS, etc.)
- Add complete Makefile automation with fuzz-all, fuzz-quick, fuzz-extended targets
- Add optional [fuzz] dependency group in pyproject.toml for clean installation
- Add comprehensive reporting with JSON/Markdown outputs and executive summaries
- Add complete developer documentation with examples and troubleshooting guides
- Exclude fuzz tests from main test suite to prevent auth failures
- Found multiple real bugs in JSON-RPC validation during development

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

* Update fuzz testing

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

* Update fuzz testing

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

---------

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

* 344 cors security headers (#761)

* Update CORS

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

* Update CORS

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

* Update CORS ADRs

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

* Update CORS

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

* Update CORS

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

* Fix compose

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

* Update helm chart

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

* Update CORS docs

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

* Update test

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

---------

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>

* feat: Bulk Import Tools modal wiring #737 (#739)

* feat: Bulk Import Tools modal wiring and backend implementation

- Add modal UI in admin.html with bulk import button and dialog
- Implement modal open/close/ESC functionality in admin.js
- Add POST /admin/tools/import endpoint with rate limiting
- Support both JSON textarea and file upload inputs
- Validate JSON structure and enforce 200 tool limit
- Return detailed success/failure information per tool
- Include loading states and comprehensive error handling

Refs #737

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

* fix: Remove duplicate admin_import_tools function and fix HTML formatting

- Remove duplicate admin_import_tools function definition
- Fix HTML placeholder attribute to use double quotes
- Add missing closing div tag
- Fix flake8 blank line issues

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

* feat: Complete bulk import backend with file upload support and enhanced docs

- Add file upload support to admin_import_tools endpoint
- Fix response format to match frontend expectations
- Add UI usage documentation with modal instructions
- Update API docs to show all three input methods
- Enhance bulk import guide with UI and API examples

Backend improvements:
- Support tools_file form field for JSON file uploads
- Proper file content parsing with error handling
- Response includes imported/failed counts and details
- Frontend-compatible response format for UI display

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

* Bulk import

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

* fix: Remove conflicting inline script and fix bulk import functionality

- Remove conflicting inline JavaScript that was preventing form submission
- Fix indentation in setupBulkImportModal function
- Ensure bulk import modal uses proper admin.js implementation
- Restore proper form submission handling for bulk import

This fixes the issue where bulk import appeared to do nothing.

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

* fix: Integrate bulk import setup with main initialization

- Add setupBulkImportModal() to main initialization sequence
- Remove duplicate DOMContentLoaded listener
- Ensure bulk import doesn't interfere with other tab functionality

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

* fix: JavaScript formatting issues in bulk import modal

- Fix multiline querySelector formatting
- Fix multiline Error constructor formatting
- Ensure prettier compliance for web linting

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

* debug: Temporarily disable bulk import setup to test tabs

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

* fix: Remove duplicate setupFormValidation call and delay bulk import setup

- Remove duplicate setupFormValidation() call that could cause conflicts
- Use setTimeout to delay bulk import modal setup after other initialization
- Add better null safety to form element queries
- This should fix tab switching issues

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

* fix: Restore proper initialization sequence for tab functionality

- Remove setTimeout delay for bulk import setup
- Keep bulk import setup in main initialization but with error handling
- Ensure tab navigation isn't affected by bulk import modal setup

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

* fix: Correct HTML structure and restore tab navigation

- Move bulk import modal to correct location after tools panel
- Remove extra closing div that was breaking HTML structure
- Ensure proper page-level modal placement
- Restore tab navigation functionality for all tabs

This fixes the broken Global Resources, Prompts, Gateways, Roots, and Metrics tabs.

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

* feat: Add configurable bulk import settings

Configuration additions:
- MCPGATEWAY_BULK_IMPORT_MAX_TOOLS (default: 200)
- MCPGATEWAY_BULK_IMPORT_RATE_LIMIT (default: 10)

Implementation:
- config.py: Add new settings with defaults
- admin.py: Use configurable rate limit and batch size
- .env.example: Document all bulk import environment variables
- admin.html: Use dynamic max tools value in UI text
- CLAUDE.md: Document configuration options for developers
- docs: Update bulk import guide with configuration details

This makes bulk import fully configurable for different deployment scenarios.

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

* Update docs

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

---------

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
Co-authored-by: Mihai Criveti <crivetimihai@gmail.com>
Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>

* Implemented configuration export (#764)

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>

* cleanup

Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>

* cleanup

Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>

* fixes

Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>

* ruff fixes

Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>

* fix flake8 errors

Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>

* fix eslint errors

Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>

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

Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>

* Review, rebase and lint

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

* Fix Alembic multiple heads issue

Create merge migration to resolve parallel migration chains:
- Main branch migrations (34492f99a0c4)
- OAuth branch migrations (add_oauth_tokens_table)

This resolves CI/CD test failures caused by Alembic not knowing
which migration head to follow during 'alembic upgrade head'.

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

Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* Fix Alembic migration chain - remove merge migration hack

- Remove unnecessary merge migration file (813b45a70b53)
- Fix OAuth config migration to follow proper chain (f8c9d3e2a1b4 → 34492f99a0c4)
- OAuth tokens migration already correctly follows (add_oauth_tokens_table → f8c9d3e2a1b4)
- Now single migration head without parallel branches

This eliminates the 'Multiple heads are present' error in CI/CD tests
by ensuring migrations follow a linear chain instead of creating
parallel migration branches that need artificial merge migrations.

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

Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* Review, rebase and lint

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

---------

Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>
Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
Co-authored-by: Shamsul Arefin <shamsul.arefin@iqvia.com>
Co-authored-by: Mihai Criveti <crivetimihai@gmail.com>
Co-authored-by: VK <90204593+vk-playground@users.noreply.github.com>
Co-authored-by: Claude <noreply@anthropic.com>

* Fix pre-commit hooks

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

* 744 annotations (#784)

* Fix annotations edit

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

* Fix annotations edit

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

---------

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

* fix: plugins template (#783)

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

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

* fix: exclude jinja files from reformatting tabs

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

* fix: plugins cli defaults

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

* fix: revert formatted Makefile template

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

* feat: add optional packages

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

* docs: update plugin template docs

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

* docs: update template readme

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

---------

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

* edit-tool

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* edit-tool

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* doc test

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* edit-tool

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* web lint

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* flake8 fix

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* pytest fix

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* revert with main

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* flake fix

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* revert with main

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* alembic

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* alembic change

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* flake8 fix

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* remove addtional line

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* alembic

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* Rebase and fix

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

---------

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>
Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
Signed-off-by: Ian Molloy <molloyim@us.ibm.com>
Signed-off-by: Madhav Kandukuri <madhav165@gmail.com>
Signed-off-by: Vinod Muthusamy <770084+vinodmut@users.noreply.github.com>
Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com>
Signed-off-by: Vicky <vicky.kuo.contact@gmail.com>
Signed-off-by: Veeresh K <veeruveeresh1522@gmail.com>
Signed-off-by: Shoumi <shoumimukherjee@gmail.com>
Signed-off-by: Mohan Lakshmaiah <mohalaks@in.ibm.com>
Signed-off-by: Teryl Taylor <terylt@ibm.com>
Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>
Co-authored-by: RAKHI DUTTA <rakdutta@in.ibm.com>
Co-authored-by: Mihai Criveti <crivetimihai@gmail.com>
Co-authored-by: Ian Molloy <i.m.molloy@gmail.com>
Co-authored-by: Madhav Kandukuri <madhav165@users.noreply.github.com>
Co-authored-by: Vinod Muthusamy <vinodmut@users.noreply.github.com>
Co-authored-by: Vinod Muthusamy <770084+vinodmut@users.noreply.github.com>
Co-authored-by: VK <90204593+vk-playground@users.noreply.github.com>
Co-authored-by: Frederico Araujo <araujof@users.noreply.github.com>
Co-authored-by: Madhav Kandukuri <madhav165@gmail.com>
Co-authored-by: Vicky <vicky.kuo.contact@gmail.com>
Co-authored-by: Veeresh K <42322782+nmveeresh@users.noreply.github.com>
Co-authored-by: Shoumi M <55126549+shoummu1@users.noreply.github.com>
Co-authored-by: Mohan Lakshmaiah <mohan.economist@gmail.com>
Co-authored-by: Mohan Lakshmaiah <mohalaks@in.ibm.com>
Co-authored-by: Teryl Taylor <terylt@ibm.com>
Co-authored-by: Shamsul Arefin <shams@rijuk.com>
Co-authored-by: Shamsul Arefin <shamsul.arefin@iqvia.com>
Co-authored-by: Claude <noreply@anthropic.com>
vk-playground pushed a commit to vk-playground/mcp-context-forge that referenced this pull request Sep 14, 2025
Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
vk-playground added a commit to vk-playground/mcp-context-forge that referenced this pull request Sep 14, 2025
…g Implementation (IBM#786)

* db.py update

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* edit-tool

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* edit-tool

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* edit-tool

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* edit-tool

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* edit-tool

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* edit-tool

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* doc test

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* pytest

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* pytest

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* revert alembic with main version

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

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

* Add logging UI

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

* Add logging UI

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

* Add logging UI

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

* Add logging UI readme

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

* Update logging flake8

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

* Update logging flake8

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

* test coverage

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

* test coverage

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

* Fix download

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

* Fix test

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

---------

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

* 749 reverse proxy (IBM#750)

* Fix download

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

* Reverse proxy

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

* Reverse proxy

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

* Reverse proxy

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

* doctest improvements

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

---------

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

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

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

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

* Fix rpc endpoints
Signed-off-by: Madhav Kandukuri <madhav165@gmail.com>

* Remove commented code
Signed-off-by: Madhav Kandukuri <madhav165@gmail.com>

* remove duplicate code in session registry

Signed-off-by: Madhav Kandukuri <madhav165@gmail.com>

* Linting fixes
Signed-off-by: Madhav Kandukuri <madhav165@gmail.com>

* Fix tests
Signed-off-by: Madhav Kandukuri <madhav165@gmail.com>

---------

Signed-off-by: Madhav Kandukuri <madhav165@gmail.com>

* 753 fix tool invocation invalid method (IBM#754)

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

- Add backward compatibility for direct tool invocation (pre-PR IBM#746 format)
- Support both old format (method=tool_name) and new format (method=tools/call)
- Add comprehensive test coverage for RPC tool invocation scenarios
- Ensure graceful fallback to gateway forwarding when method is not a tool

The RPC endpoint now handles tool invocations in both formats:
1. New format: method='tools/call' with name and arguments in params
2. Old format: method='tool_name' with params as arguments (backward compat)

This maintains compatibility with existing clients while supporting the new
standardized RPC method structure introduced in PR IBM#746.

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

* Fix flake8 E722: Replace bare except with Exception

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

* lint

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

---------

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

* fix: suppress bandit security warnings with appropriate nosec comments (IBM#755)

- Added nosec B105 for ENV_TOKEN as it's an environment variable name, not a hardcoded secret
- Added nosec B110 for intentional exception swallowing in cleanup/error handling paths
- Both cases are legitimate uses where errors should be silently ignored to prevent cascading failures

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

* Add agents file

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

* pylint (IBM#759)

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

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

Signed-off-by: Vinod Muthusamy <770084+vinodmut@users.noreply.github.com>
Co-authored-by: Vinod Muthusamy <770084+vinodmut@users.noreply.github.com>

* Update documentation with fixed image tag

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

* 256 fuzz testing (IBM#760)

* Implement comprehensive fuzz testing automation (IBM#256)

- Add property-based testing with Hypothesis for JSON-RPC, JSONPath, and schema validation
- Add coverage-guided fuzzing with Atheris for deep code path exploration
- Add API endpoint fuzzing with Schemathesis for contract validation
- Add security-focused testing for vulnerability discovery (SQL injection, XSS, etc.)
- Add complete Makefile automation with fuzz-all, fuzz-quick, fuzz-extended targets
- Add optional [fuzz] dependency group in pyproject.toml for clean installation
- Add comprehensive reporting with JSON/Markdown outputs and executive summaries
- Add complete developer documentation with examples and troubleshooting guides
- Exclude fuzz tests from main test suite to prevent auth failures
- Found multiple real bugs in JSON-RPC validation during development

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

* Update fuzz testing

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

* Update fuzz testing

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

---------

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

* 344 cors security headers (IBM#761)

* Update CORS

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

* Update CORS

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

* Update CORS ADRs

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

* Update CORS

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

* Update CORS

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

* Fix compose

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

* Update helm chart

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

* Update CORS docs

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

* Update test

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

---------

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

* feat: Bulk Import Tools modal wiring IBM#737 (IBM#739)

* feat: Bulk Import Tools modal wiring and backend implementation

- Add modal UI in admin.html with bulk import button and dialog
- Implement modal open/close/ESC functionality in admin.js
- Add POST /admin/tools/import endpoint with rate limiting
- Support both JSON textarea and file upload inputs
- Validate JSON structure and enforce 200 tool limit
- Return detailed success/failure information per tool
- Include loading states and comprehensive error handling

Refs IBM#737

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

* fix: Remove duplicate admin_import_tools function and fix HTML formatting

- Remove duplicate admin_import_tools function definition
- Fix HTML placeholder attribute to use double quotes
- Add missing closing div tag
- Fix flake8 blank line issues

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

* feat: Complete bulk import backend with file upload support and enhanced docs

- Add file upload support to admin_import_tools endpoint
- Fix response format to match frontend expectations
- Add UI usage documentation with modal instructions
- Update API docs to show all three input methods
- Enhance bulk import guide with UI and API examples

Backend improvements:
- Support tools_file form field for JSON file uploads
- Proper file content parsing with error handling
- Response includes imported/failed counts and details
- Frontend-compatible response format for UI display

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

* Bulk import

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

* fix: Remove conflicting inline script and fix bulk import functionality

- Remove conflicting inline JavaScript that was preventing form submission
- Fix indentation in setupBulkImportModal function
- Ensure bulk import modal uses proper admin.js implementation
- Restore proper form submission handling for bulk import

This fixes the issue where bulk import appeared to do nothing.

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

* fix: Integrate bulk import setup with main initialization

- Add setupBulkImportModal() to main initialization sequence
- Remove duplicate DOMContentLoaded listener
- Ensure bulk import doesn't interfere with other tab functionality

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

* fix: JavaScript formatting issues in bulk import modal

- Fix multiline querySelector formatting
- Fix multiline Error constructor formatting
- Ensure prettier compliance for web linting

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

* debug: Temporarily disable bulk import setup to test tabs

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

* fix: Remove duplicate setupFormValidation call and delay bulk import setup

- Remove duplicate setupFormValidation() call that could cause conflicts
- Use setTimeout to delay bulk import modal setup after other initialization
- Add better null safety to form element queries
- This should fix tab switching issues

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

* fix: Restore proper initialization sequence for tab functionality

- Remove setTimeout delay for bulk import setup
- Keep bulk import setup in main initialization but with error handling
- Ensure tab navigation isn't affected by bulk import modal setup

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

* fix: Correct HTML structure and restore tab navigation

- Move bulk import modal to correct location after tools panel
- Remove extra closing div that was breaking HTML structure
- Ensure proper page-level modal placement
- Restore tab navigation functionality for all tabs

This fixes the broken Global Resources, Prompts, Gateways, Roots, and Metrics tabs.

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

* feat: Add configurable bulk import settings

Configuration additions:
- MCPGATEWAY_BULK_IMPORT_MAX_TOOLS (default: 200)
- MCPGATEWAY_BULK_IMPORT_RATE_LIMIT (default: 10)

Implementation:
- config.py: Add new settings with defaults
- admin.py: Use configurable rate limit and batch size
- .env.example: Document all bulk import environment variables
- admin.html: Use dynamic max tools value in UI text
- CLAUDE.md: Document configuration options for developers
- docs: Update bulk import guide with configuration details

This makes bulk import fully configurable for different deployment scenarios.

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

* Update docs

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

---------

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

* Implemented configuration export (IBM#764)

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

* 185 186 import export (IBM#769)

* Import export

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

* Import export

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

* Import export

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

* Import export

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

* Import export

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

* Import export

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

* Import export

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

* Import export

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

* Import export testing

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

---------

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

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

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

* Well known (IBM#770)

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

* Update docs with jsonrpc tutorial (IBM#772)

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

* 137 metadata timestamps (IBM#776)

* Metadata / creation dates

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

* Metadata / creation dates

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

* Metadata / creation dates

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

* Security headers CSP

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

* Display metadata for resources
Signed-off-by: Madhav Kandukuri <madhav165@gmail.com>

* eslint fix
Signed-off-by: Madhav Kandukuri <madhav165@gmail.com>

---------

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
Co-authored-by: Madhav Kandukuri <madhav165@gmail.com>

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

* feat: Add bulk import UI modal for tools

Signed-off-by: Vicky <vicky.kuo.contact@gmail.com>

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

Signed-off-by: Vicky <vicky.kuo.contact@gmail.com>

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

Signed-off-by: Vicky <vicky.kuo.contact@gmail.com>

---------

Signed-off-by: Vicky <vicky.kuo.contact@gmail.com>
Co-authored-by: Vicky <vicky.kuo.contact@gmail.com>

* Cleanup pr

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

* Cleanup pr

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

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

* added params extraction from url logic

Signed-off-by: Veeresh K <veeruveeresh1522@gmail.com>

* added params extraction from url logic

Signed-off-by: Veeresh K <veeruveeresh1522@gmail.com>

* Rebase and lint / test

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

---------

Signed-off-by: Veeresh K <veeruveeresh1522@gmail.com>
Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
Co-authored-by: Mihai Criveti <crivetimihai@gmail.com>

* edit column header (IBM#777)

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

* Test case update (IBM#775)

* session_registry test case updates

Signed-off-by: Mohan Lakshmaiah <mohalaks@in.ibm.com>

* test case update for routers/reverse_proxy

Signed-off-by: Mohan Lakshmaiah <mohalaks@in.ibm.com>

* test case update to mcpgateway/reverse_proxy.py

Signed-off-by: Mohan Lakshmaiah <mohalaks@in.ibm.com>

* Fix formatting issues from pre-commit hooks

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

---------

Signed-off-by: Mohan Lakshmaiah <mohalaks@in.ibm.com>
Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
Co-authored-by: Mohan Lakshmaiah <mohalaks@in.ibm.com>
Co-authored-by: Mihai Criveti <crivetimihai@gmail.com>

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

* feat: add support for external plugins

Signed-off-by: Teryl Taylor <terylt@ibm.com>

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

Signed-off-by: Teryl Taylor <terylt@ibm.com>

* fix(lint): fixed yamllint issues

Signed-off-by: Teryl Taylor <terylt@ibm.com>

* fix(lint): fixed flake8 issue.

Signed-off-by: Teryl Taylor <terylt@ibm.com>

* feat: define plugins cli and implement bootstrap command

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

* fix: implement install and package CLI commands

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

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

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

* feat: add external plugin template

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

* feat: move copier config to repository root

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

* feat: update copier template

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

* feat: get default author from git config

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

* feat: update copier settings

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

* fix: copier config syntax

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

* feat: add external plugin template modules

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

* fix: template syntax

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

* fix: template syntax

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

* fix: make template

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

* feat: fix template issue

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

* fix: toml template

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

* fix: plugin mcp server initialization

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

* feat: init module for plugin framework

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

* feat: add chuck runtime and container wrapping

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

* fix: makefile template

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

* fix: plugins config path

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

* feat: add .env.template

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

* feat: add tools and resources support

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

* fix: lint yaml

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

* chore: cleanups

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

* feat: update manifest.in

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

* chore: linting

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

* fix: plugin config variable

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

* fix(tests): fixed doctests for plugins.

Signed-off-by: Teryl Taylor <terylt@ibm.com>

* refactor: external plugin server and plugin external API

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

* docs(plugins): removed subpackages from examples

Signed-off-by: Teryl Taylor <terylt@ibm.com>

* docs: update plugin docs to use public framework API

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

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

Signed-off-by: Teryl Taylor <terylt@ibm.com>

* feat: udpate test templates

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

* feat: update test templates

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

* feat: update plugin template

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

* feat: update plugin template

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

* feat: update tempalte makefile

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

* feat: add template for native plugin

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

* feat: add readme for native template

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

* feat: force boostrap to be a subcommnand

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

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

Signed-off-by: Teryl Taylor <terylt@ibm.com>

* tests: add tests for plugins CLI

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

* fix: deprecation warning

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

* tests: add CLI tests

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

* tests: update plugin cli

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

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

Signed-off-by: Teryl Taylor <terylt@ibm.com>

* chore: update template readmes

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

* fix: lint docstrings in cli

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

* chore: fix lint errors in docstrings

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

* chore: fix lint errors

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

* tests: add external plugin server tests

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

* chore: cleanup

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

* chore: add missing docstrings

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

* chore: add missing docstrings

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

* tests: fix cli dryrun test

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

* chore: fix lint issues

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

* tests: fix teardown of client http tests

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

* tests: skipping flaky tests

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

* docs: plugin lifecycle tools

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

* docs: add missing plugin lifecycle doc

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

* Review, rebase and lint

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

---------

Signed-off-by: Teryl Taylor <terylt@ibm.com>
Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com>
Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
Co-authored-by: Teryl Taylor <terylt@ibm.com>
Co-authored-by: Mihai Criveti <crivetimihai@gmail.com>

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

* Oauth 2.1 design

Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>

* oauth 2.0 design

Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>

* Support for oauth auth type in gateway

Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>

* Decrypt client secret

Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>

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

Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>

* test fixes

Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>

* 256 fuzz testing (IBM#760)

* Implement comprehensive fuzz testing automation (IBM#256)

- Add property-based testing with Hypothesis for JSON-RPC, JSONPath, and schema validation
- Add coverage-guided fuzzing with Atheris for deep code path exploration
- Add API endpoint fuzzing with Schemathesis for contract validation
- Add security-focused testing for vulnerability discovery (SQL injection, XSS, etc.)
- Add complete Makefile automation with fuzz-all, fuzz-quick, fuzz-extended targets
- Add optional [fuzz] dependency group in pyproject.toml for clean installation
- Add comprehensive reporting with JSON/Markdown outputs and executive summaries
- Add complete developer documentation with examples and troubleshooting guides
- Exclude fuzz tests from main test suite to prevent auth failures
- Found multiple real bugs in JSON-RPC validation during development

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

* Update fuzz testing

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

* Update fuzz testing

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

---------

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

* 344 cors security headers (IBM#761)

* Update CORS

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

* Update CORS

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

* Update CORS ADRs

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

* Update CORS

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

* Update CORS

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

* Fix compose

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

* Update helm chart

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

* Update CORS docs

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

* Update test

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

---------

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>

* feat: Bulk Import Tools modal wiring IBM#737 (IBM#739)

* feat: Bulk Import Tools modal wiring and backend implementation

- Add modal UI in admin.html with bulk import button and dialog
- Implement modal open/close/ESC functionality in admin.js
- Add POST /admin/tools/import endpoint with rate limiting
- Support both JSON textarea and file upload inputs
- Validate JSON structure and enforce 200 tool limit
- Return detailed success/failure information per tool
- Include loading states and comprehensive error handling

Refs IBM#737

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

* fix: Remove duplicate admin_import_tools function and fix HTML formatting

- Remove duplicate admin_import_tools function definition
- Fix HTML placeholder attribute to use double quotes
- Add missing closing div tag
- Fix flake8 blank line issues

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

* feat: Complete bulk import backend with file upload support and enhanced docs

- Add file upload support to admin_import_tools endpoint
- Fix response format to match frontend expectations
- Add UI usage documentation with modal instructions
- Update API docs to show all three input methods
- Enhance bulk import guide with UI and API examples

Backend improvements:
- Support tools_file form field for JSON file uploads
- Proper file content parsing with error handling
- Response includes imported/failed counts and details
- Frontend-compatible response format for UI display

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

* Bulk import

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

* fix: Remove conflicting inline script and fix bulk import functionality

- Remove conflicting inline JavaScript that was preventing form submission
- Fix indentation in setupBulkImportModal function
- Ensure bulk import modal uses proper admin.js implementation
- Restore proper form submission handling for bulk import

This fixes the issue where bulk import appeared to do nothing.

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

* fix: Integrate bulk import setup with main initialization

- Add setupBulkImportModal() to main initialization sequence
- Remove duplicate DOMContentLoaded listener
- Ensure bulk import doesn't interfere with other tab functionality

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

* fix: JavaScript formatting issues in bulk import modal

- Fix multiline querySelector formatting
- Fix multiline Error constructor formatting
- Ensure prettier compliance for web linting

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

* debug: Temporarily disable bulk import setup to test tabs

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

* fix: Remove duplicate setupFormValidation call and delay bulk import setup

- Remove duplicate setupFormValidation() call that could cause conflicts
- Use setTimeout to delay bulk import modal setup after other initialization
- Add better null safety to form element queries
- This should fix tab switching issues

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

* fix: Restore proper initialization sequence for tab functionality

- Remove setTimeout delay for bulk import setup
- Keep bulk import setup in main initialization but with error handling
- Ensure tab navigation isn't affected by bulk import modal setup

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

* fix: Correct HTML structure and restore tab navigation

- Move bulk import modal to correct location after tools panel
- Remove extra closing div that was breaking HTML structure
- Ensure proper page-level modal placement
- Restore tab navigation functionality for all tabs

This fixes the broken Global Resources, Prompts, Gateways, Roots, and Metrics tabs.

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

* feat: Add configurable bulk import settings

Configuration additions:
- MCPGATEWAY_BULK_IMPORT_MAX_TOOLS (default: 200)
- MCPGATEWAY_BULK_IMPORT_RATE_LIMIT (default: 10)

Implementation:
- config.py: Add new settings with defaults
- admin.py: Use configurable rate limit and batch size
- .env.example: Document all bulk import environment variables
- admin.html: Use dynamic max tools value in UI text
- CLAUDE.md: Document configuration options for developers
- docs: Update bulk import guide with configuration details

This makes bulk import fully configurable for different deployment scenarios.

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

* Update docs

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

---------

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
Co-authored-by: Mihai Criveti <crivetimihai@gmail.com>
Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>

* Implemented configuration export (IBM#764)

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>

* cleanup

Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>

* cleanup

Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>

* fixes

Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>

* ruff fixes

Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>

* fix flake8 errors

Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>

* fix eslint errors

Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>

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

Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>

* Review, rebase and lint

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

* Fix Alembic multiple heads issue

Create merge migration to resolve parallel migration chains:
- Main branch migrations (34492f99a0c4)
- OAuth branch migrations (add_oauth_tokens_table)

This resolves CI/CD test failures caused by Alembic not knowing
which migration head to follow during 'alembic upgrade head'.

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

Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* Fix Alembic migration chain - remove merge migration hack

- Remove unnecessary merge migration file (813b45a70b53)
- Fix OAuth config migration to follow proper chain (f8c9d3e2a1b4 → 34492f99a0c4)
- OAuth tokens migration already correctly follows (add_oauth_tokens_table → f8c9d3e2a1b4)
- Now single migration head without parallel branches

This eliminates the 'Multiple heads are present' error in CI/CD tests
by ensuring migrations follow a linear chain instead of creating
parallel migration branches that need artificial merge migrations.

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

Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* Review, rebase and lint

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

---------

Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>
Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
Co-authored-by: Shamsul Arefin <shamsul.arefin@iqvia.com>
Co-authored-by: Mihai Criveti <crivetimihai@gmail.com>
Co-authored-by: VK <90204593+vk-playground@users.noreply.github.com>
Co-authored-by: Claude <noreply@anthropic.com>

* Fix pre-commit hooks

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

* 744 annotations (IBM#784)

* Fix annotations edit

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

* Fix annotations edit

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

---------

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

* fix: plugins template (IBM#783)

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

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

* fix: exclude jinja files from reformatting tabs

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

* fix: plugins cli defaults

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

* fix: revert formatted Makefile template

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

* feat: add optional packages

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

* docs: update plugin template docs

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

* docs: update template readme

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

---------

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

* edit-tool

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* edit-tool

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* doc test

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* edit-tool

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* web lint

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* flake8 fix

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* pytest fix

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* revert with main

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* flake fix

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* revert with main

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* alembic

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* alembic change

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* flake8 fix

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* remove addtional line

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* alembic

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* Rebase and fix

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

---------

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>
Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
Signed-off-by: Ian Molloy <molloyim@us.ibm.com>
Signed-off-by: Madhav Kandukuri <madhav165@gmail.com>
Signed-off-by: Vinod Muthusamy <770084+vinodmut@users.noreply.github.com>
Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com>
Signed-off-by: Vicky <vicky.kuo.contact@gmail.com>
Signed-off-by: Veeresh K <veeruveeresh1522@gmail.com>
Signed-off-by: Shoumi <shoumimukherjee@gmail.com>
Signed-off-by: Mohan Lakshmaiah <mohalaks@in.ibm.com>
Signed-off-by: Teryl Taylor <terylt@ibm.com>
Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>
Co-authored-by: RAKHI DUTTA <rakdutta@in.ibm.com>
Co-authored-by: Mihai Criveti <crivetimihai@gmail.com>
Co-authored-by: Ian Molloy <i.m.molloy@gmail.com>
Co-authored-by: Madhav Kandukuri <madhav165@users.noreply.github.com>
Co-authored-by: Vinod Muthusamy <vinodmut@users.noreply.github.com>
Co-authored-by: Vinod Muthusamy <770084+vinodmut@users.noreply.github.com>
Co-authored-by: VK <90204593+vk-playground@users.noreply.github.com>
Co-authored-by: Frederico Araujo <araujof@users.noreply.github.com>
Co-authored-by: Madhav Kandukuri <madhav165@gmail.com>
Co-authored-by: Vicky <vicky.kuo.contact@gmail.com>
Co-authored-by: Veeresh K <42322782+nmveeresh@users.noreply.github.com>
Co-authored-by: Shoumi M <55126549+shoummu1@users.noreply.github.com>
Co-authored-by: Mohan Lakshmaiah <mohan.economist@gmail.com>
Co-authored-by: Mohan Lakshmaiah <mohalaks@in.ibm.com>
Co-authored-by: Teryl Taylor <terylt@ibm.com>
Co-authored-by: Shamsul Arefin <shams@rijuk.com>
Co-authored-by: Shamsul Arefin <shamsul.arefin@iqvia.com>
Co-authored-by: Claude <noreply@anthropic.com>
vk-playground pushed a commit to vk-playground/mcp-context-forge that referenced this pull request Sep 14, 2025
Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
vk-playground added a commit to vk-playground/mcp-context-forge that referenced this pull request Sep 14, 2025
…g Implementation (IBM#786)

* db.py update

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* edit-tool

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* edit-tool

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* edit-tool

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* edit-tool

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* edit-tool

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* edit-tool

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* doc test

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* pytest

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* pytest

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* revert alembic with main version

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

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

* Add logging UI

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

* Add logging UI

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

* Add logging UI

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

* Add logging UI readme

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

* Update logging flake8

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

* Update logging flake8

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

* test coverage

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

* test coverage

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

* Fix download

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

* Fix test

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

---------

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

* 749 reverse proxy (IBM#750)

* Fix download

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

* Reverse proxy

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

* Reverse proxy

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

* Reverse proxy

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

* doctest improvements

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

---------

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

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

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

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

* Fix rpc endpoints
Signed-off-by: Madhav Kandukuri <madhav165@gmail.com>

* Remove commented code
Signed-off-by: Madhav Kandukuri <madhav165@gmail.com>

* remove duplicate code in session registry

Signed-off-by: Madhav Kandukuri <madhav165@gmail.com>

* Linting fixes
Signed-off-by: Madhav Kandukuri <madhav165@gmail.com>

* Fix tests
Signed-off-by: Madhav Kandukuri <madhav165@gmail.com>

---------

Signed-off-by: Madhav Kandukuri <madhav165@gmail.com>

* 753 fix tool invocation invalid method (IBM#754)

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

- Add backward compatibility for direct tool invocation (pre-PR IBM#746 format)
- Support both old format (method=tool_name) and new format (method=tools/call)
- Add comprehensive test coverage for RPC tool invocation scenarios
- Ensure graceful fallback to gateway forwarding when method is not a tool

The RPC endpoint now handles tool invocations in both formats:
1. New format: method='tools/call' with name and arguments in params
2. Old format: method='tool_name' with params as arguments (backward compat)

This maintains compatibility with existing clients while supporting the new
standardized RPC method structure introduced in PR IBM#746.

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

* Fix flake8 E722: Replace bare except with Exception

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

* lint

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

---------

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

* fix: suppress bandit security warnings with appropriate nosec comments (IBM#755)

- Added nosec B105 for ENV_TOKEN as it's an environment variable name, not a hardcoded secret
- Added nosec B110 for intentional exception swallowing in cleanup/error handling paths
- Both cases are legitimate uses where errors should be silently ignored to prevent cascading failures

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

* Add agents file

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

* pylint (IBM#759)

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

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

Signed-off-by: Vinod Muthusamy <770084+vinodmut@users.noreply.github.com>
Co-authored-by: Vinod Muthusamy <770084+vinodmut@users.noreply.github.com>

* Update documentation with fixed image tag

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

* 256 fuzz testing (IBM#760)

* Implement comprehensive fuzz testing automation (IBM#256)

- Add property-based testing with Hypothesis for JSON-RPC, JSONPath, and schema validation
- Add coverage-guided fuzzing with Atheris for deep code path exploration
- Add API endpoint fuzzing with Schemathesis for contract validation
- Add security-focused testing for vulnerability discovery (SQL injection, XSS, etc.)
- Add complete Makefile automation with fuzz-all, fuzz-quick, fuzz-extended targets
- Add optional [fuzz] dependency group in pyproject.toml for clean installation
- Add comprehensive reporting with JSON/Markdown outputs and executive summaries
- Add complete developer documentation with examples and troubleshooting guides
- Exclude fuzz tests from main test suite to prevent auth failures
- Found multiple real bugs in JSON-RPC validation during development

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

* Update fuzz testing

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

* Update fuzz testing

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

---------

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

* 344 cors security headers (IBM#761)

* Update CORS

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

* Update CORS

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

* Update CORS ADRs

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

* Update CORS

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

* Update CORS

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

* Fix compose

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

* Update helm chart

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

* Update CORS docs

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

* Update test

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

---------

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

* feat: Bulk Import Tools modal wiring IBM#737 (IBM#739)

* feat: Bulk Import Tools modal wiring and backend implementation

- Add modal UI in admin.html with bulk import button and dialog
- Implement modal open/close/ESC functionality in admin.js
- Add POST /admin/tools/import endpoint with rate limiting
- Support both JSON textarea and file upload inputs
- Validate JSON structure and enforce 200 tool limit
- Return detailed success/failure information per tool
- Include loading states and comprehensive error handling

Refs IBM#737

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

* fix: Remove duplicate admin_import_tools function and fix HTML formatting

- Remove duplicate admin_import_tools function definition
- Fix HTML placeholder attribute to use double quotes
- Add missing closing div tag
- Fix flake8 blank line issues

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

* feat: Complete bulk import backend with file upload support and enhanced docs

- Add file upload support to admin_import_tools endpoint
- Fix response format to match frontend expectations
- Add UI usage documentation with modal instructions
- Update API docs to show all three input methods
- Enhance bulk import guide with UI and API examples

Backend improvements:
- Support tools_file form field for JSON file uploads
- Proper file content parsing with error handling
- Response includes imported/failed counts and details
- Frontend-compatible response format for UI display

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

* Bulk import

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

* fix: Remove conflicting inline script and fix bulk import functionality

- Remove conflicting inline JavaScript that was preventing form submission
- Fix indentation in setupBulkImportModal function
- Ensure bulk import modal uses proper admin.js implementation
- Restore proper form submission handling for bulk import

This fixes the issue where bulk import appeared to do nothing.

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

* fix: Integrate bulk import setup with main initialization

- Add setupBulkImportModal() to main initialization sequence
- Remove duplicate DOMContentLoaded listener
- Ensure bulk import doesn't interfere with other tab functionality

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

* fix: JavaScript formatting issues in bulk import modal

- Fix multiline querySelector formatting
- Fix multiline Error constructor formatting
- Ensure prettier compliance for web linting

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

* debug: Temporarily disable bulk import setup to test tabs

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

* fix: Remove duplicate setupFormValidation call and delay bulk import setup

- Remove duplicate setupFormValidation() call that could cause conflicts
- Use setTimeout to delay bulk import modal setup after other initialization
- Add better null safety to form element queries
- This should fix tab switching issues

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

* fix: Restore proper initialization sequence for tab functionality

- Remove setTimeout delay for bulk import setup
- Keep bulk import setup in main initialization but with error handling
- Ensure tab navigation isn't affected by bulk import modal setup

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

* fix: Correct HTML structure and restore tab navigation

- Move bulk import modal to correct location after tools panel
- Remove extra closing div that was breaking HTML structure
- Ensure proper page-level modal placement
- Restore tab navigation functionality for all tabs

This fixes the broken Global Resources, Prompts, Gateways, Roots, and Metrics tabs.

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

* feat: Add configurable bulk import settings

Configuration additions:
- MCPGATEWAY_BULK_IMPORT_MAX_TOOLS (default: 200)
- MCPGATEWAY_BULK_IMPORT_RATE_LIMIT (default: 10)

Implementation:
- config.py: Add new settings with defaults
- admin.py: Use configurable rate limit and batch size
- .env.example: Document all bulk import environment variables
- admin.html: Use dynamic max tools value in UI text
- CLAUDE.md: Document configuration options for developers
- docs: Update bulk import guide with configuration details

This makes bulk import fully configurable for different deployment scenarios.

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

* Update docs

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

---------

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

* Implemented configuration export (IBM#764)

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

* 185 186 import export (IBM#769)

* Import export

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

* Import export

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

* Import export

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

* Import export

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

* Import export

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

* Import export

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

* Import export

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

* Import export

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

* Import export testing

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

---------

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

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

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

* Well known (IBM#770)

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

* Update docs with jsonrpc tutorial (IBM#772)

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

* 137 metadata timestamps (IBM#776)

* Metadata / creation dates

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

* Metadata / creation dates

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

* Metadata / creation dates

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

* Security headers CSP

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

* Display metadata for resources
Signed-off-by: Madhav Kandukuri <madhav165@gmail.com>

* eslint fix
Signed-off-by: Madhav Kandukuri <madhav165@gmail.com>

---------

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
Co-authored-by: Madhav Kandukuri <madhav165@gmail.com>

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

* feat: Add bulk import UI modal for tools

Signed-off-by: Vicky <vicky.kuo.contact@gmail.com>

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

Signed-off-by: Vicky <vicky.kuo.contact@gmail.com>

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

Signed-off-by: Vicky <vicky.kuo.contact@gmail.com>

---------

Signed-off-by: Vicky <vicky.kuo.contact@gmail.com>
Co-authored-by: Vicky <vicky.kuo.contact@gmail.com>

* Cleanup pr

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

* Cleanup pr

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

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

* added params extraction from url logic

Signed-off-by: Veeresh K <veeruveeresh1522@gmail.com>

* added params extraction from url logic

Signed-off-by: Veeresh K <veeruveeresh1522@gmail.com>

* Rebase and lint / test

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

---------

Signed-off-by: Veeresh K <veeruveeresh1522@gmail.com>
Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
Co-authored-by: Mihai Criveti <crivetimihai@gmail.com>

* edit column header (IBM#777)

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

* Test case update (IBM#775)

* session_registry test case updates

Signed-off-by: Mohan Lakshmaiah <mohalaks@in.ibm.com>

* test case update for routers/reverse_proxy

Signed-off-by: Mohan Lakshmaiah <mohalaks@in.ibm.com>

* test case update to mcpgateway/reverse_proxy.py

Signed-off-by: Mohan Lakshmaiah <mohalaks@in.ibm.com>

* Fix formatting issues from pre-commit hooks

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

---------

Signed-off-by: Mohan Lakshmaiah <mohalaks@in.ibm.com>
Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
Co-authored-by: Mohan Lakshmaiah <mohalaks@in.ibm.com>
Co-authored-by: Mihai Criveti <crivetimihai@gmail.com>

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

* feat: add support for external plugins

Signed-off-by: Teryl Taylor <terylt@ibm.com>

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

Signed-off-by: Teryl Taylor <terylt@ibm.com>

* fix(lint): fixed yamllint issues

Signed-off-by: Teryl Taylor <terylt@ibm.com>

* fix(lint): fixed flake8 issue.

Signed-off-by: Teryl Taylor <terylt@ibm.com>

* feat: define plugins cli and implement bootstrap command

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

* fix: implement install and package CLI commands

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

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

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

* feat: add external plugin template

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

* feat: move copier config to repository root

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

* feat: update copier template

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

* feat: get default author from git config

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

* feat: update copier settings

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

* fix: copier config syntax

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

* feat: add external plugin template modules

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

* fix: template syntax

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

* fix: template syntax

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

* fix: make template

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

* feat: fix template issue

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

* fix: toml template

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

* fix: plugin mcp server initialization

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

* feat: init module for plugin framework

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

* feat: add chuck runtime and container wrapping

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

* fix: makefile template

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

* fix: plugins config path

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

* feat: add .env.template

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

* feat: add tools and resources support

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

* fix: lint yaml

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

* chore: cleanups

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

* feat: update manifest.in

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

* chore: linting

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

* fix: plugin config variable

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

* fix(tests): fixed doctests for plugins.

Signed-off-by: Teryl Taylor <terylt@ibm.com>

* refactor: external plugin server and plugin external API

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

* docs(plugins): removed subpackages from examples

Signed-off-by: Teryl Taylor <terylt@ibm.com>

* docs: update plugin docs to use public framework API

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

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

Signed-off-by: Teryl Taylor <terylt@ibm.com>

* feat: udpate test templates

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

* feat: update test templates

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

* feat: update plugin template

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

* feat: update plugin template

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

* feat: update tempalte makefile

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

* feat: add template for native plugin

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

* feat: add readme for native template

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

* feat: force boostrap to be a subcommnand

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

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

Signed-off-by: Teryl Taylor <terylt@ibm.com>

* tests: add tests for plugins CLI

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

* fix: deprecation warning

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

* tests: add CLI tests

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

* tests: update plugin cli

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

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

Signed-off-by: Teryl Taylor <terylt@ibm.com>

* chore: update template readmes

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

* fix: lint docstrings in cli

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

* chore: fix lint errors in docstrings

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

* chore: fix lint errors

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

* tests: add external plugin server tests

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

* chore: cleanup

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

* chore: add missing docstrings

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

* chore: add missing docstrings

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

* tests: fix cli dryrun test

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

* chore: fix lint issues

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

* tests: fix teardown of client http tests

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

* tests: skipping flaky tests

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

* docs: plugin lifecycle tools

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

* docs: add missing plugin lifecycle doc

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

* Review, rebase and lint

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

---------

Signed-off-by: Teryl Taylor <terylt@ibm.com>
Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com>
Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
Co-authored-by: Teryl Taylor <terylt@ibm.com>
Co-authored-by: Mihai Criveti <crivetimihai@gmail.com>

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

* Oauth 2.1 design

Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>

* oauth 2.0 design

Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>

* Support for oauth auth type in gateway

Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>

* Decrypt client secret

Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>

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

Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>

* test fixes

Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>

* 256 fuzz testing (IBM#760)

* Implement comprehensive fuzz testing automation (IBM#256)

- Add property-based testing with Hypothesis for JSON-RPC, JSONPath, and schema validation
- Add coverage-guided fuzzing with Atheris for deep code path exploration
- Add API endpoint fuzzing with Schemathesis for contract validation
- Add security-focused testing for vulnerability discovery (SQL injection, XSS, etc.)
- Add complete Makefile automation with fuzz-all, fuzz-quick, fuzz-extended targets
- Add optional [fuzz] dependency group in pyproject.toml for clean installation
- Add comprehensive reporting with JSON/Markdown outputs and executive summaries
- Add complete developer documentation with examples and troubleshooting guides
- Exclude fuzz tests from main test suite to prevent auth failures
- Found multiple real bugs in JSON-RPC validation during development

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

* Update fuzz testing

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

* Update fuzz testing

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

---------

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

* 344 cors security headers (IBM#761)

* Update CORS

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

* Update CORS

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

* Update CORS ADRs

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

* Update CORS

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

* Update CORS

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

* Fix compose

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

* Update helm chart

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

* Update CORS docs

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

* Update test

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

---------

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>

* feat: Bulk Import Tools modal wiring IBM#737 (IBM#739)

* feat: Bulk Import Tools modal wiring and backend implementation

- Add modal UI in admin.html with bulk import button and dialog
- Implement modal open/close/ESC functionality in admin.js
- Add POST /admin/tools/import endpoint with rate limiting
- Support both JSON textarea and file upload inputs
- Validate JSON structure and enforce 200 tool limit
- Return detailed success/failure information per tool
- Include loading states and comprehensive error handling

Refs IBM#737

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

* fix: Remove duplicate admin_import_tools function and fix HTML formatting

- Remove duplicate admin_import_tools function definition
- Fix HTML placeholder attribute to use double quotes
- Add missing closing div tag
- Fix flake8 blank line issues

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

* feat: Complete bulk import backend with file upload support and enhanced docs

- Add file upload support to admin_import_tools endpoint
- Fix response format to match frontend expectations
- Add UI usage documentation with modal instructions
- Update API docs to show all three input methods
- Enhance bulk import guide with UI and API examples

Backend improvements:
- Support tools_file form field for JSON file uploads
- Proper file content parsing with error handling
- Response includes imported/failed counts and details
- Frontend-compatible response format for UI display

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

* Bulk import

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

* fix: Remove conflicting inline script and fix bulk import functionality

- Remove conflicting inline JavaScript that was preventing form submission
- Fix indentation in setupBulkImportModal function
- Ensure bulk import modal uses proper admin.js implementation
- Restore proper form submission handling for bulk import

This fixes the issue where bulk import appeared to do nothing.

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

* fix: Integrate bulk import setup with main initialization

- Add setupBulkImportModal() to main initialization sequence
- Remove duplicate DOMContentLoaded listener
- Ensure bulk import doesn't interfere with other tab functionality

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

* fix: JavaScript formatting issues in bulk import modal

- Fix multiline querySelector formatting
- Fix multiline Error constructor formatting
- Ensure prettier compliance for web linting

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

* debug: Temporarily disable bulk import setup to test tabs

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

* fix: Remove duplicate setupFormValidation call and delay bulk import setup

- Remove duplicate setupFormValidation() call that could cause conflicts
- Use setTimeout to delay bulk import modal setup after other initialization
- Add better null safety to form element queries
- This should fix tab switching issues

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

* fix: Restore proper initialization sequence for tab functionality

- Remove setTimeout delay for bulk import setup
- Keep bulk import setup in main initialization but with error handling
- Ensure tab navigation isn't affected by bulk import modal setup

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

* fix: Correct HTML structure and restore tab navigation

- Move bulk import modal to correct location after tools panel
- Remove extra closing div that was breaking HTML structure
- Ensure proper page-level modal placement
- Restore tab navigation functionality for all tabs

This fixes the broken Global Resources, Prompts, Gateways, Roots, and Metrics tabs.

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

* feat: Add configurable bulk import settings

Configuration additions:
- MCPGATEWAY_BULK_IMPORT_MAX_TOOLS (default: 200)
- MCPGATEWAY_BULK_IMPORT_RATE_LIMIT (default: 10)

Implementation:
- config.py: Add new settings with defaults
- admin.py: Use configurable rate limit and batch size
- .env.example: Document all bulk import environment variables
- admin.html: Use dynamic max tools value in UI text
- CLAUDE.md: Document configuration options for developers
- docs: Update bulk import guide with configuration details

This makes bulk import fully configurable for different deployment scenarios.

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

* Update docs

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

---------

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
Co-authored-by: Mihai Criveti <crivetimihai@gmail.com>
Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>

* Implemented configuration export (IBM#764)

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>

* cleanup

Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>

* cleanup

Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>

* fixes

Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>

* ruff fixes

Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>

* fix flake8 errors

Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>

* fix eslint errors

Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>

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

Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>

* Review, rebase and lint

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

* Fix Alembic multiple heads issue

Create merge migration to resolve parallel migration chains:
- Main branch migrations (34492f99a0c4)
- OAuth branch migrations (add_oauth_tokens_table)

This resolves CI/CD test failures caused by Alembic not knowing
which migration head to follow during 'alembic upgrade head'.

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

Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* Fix Alembic migration chain - remove merge migration hack

- Remove unnecessary merge migration file (813b45a70b53)
- Fix OAuth config migration to follow proper chain (f8c9d3e2a1b4 → 34492f99a0c4)
- OAuth tokens migration already correctly follows (add_oauth_tokens_table → f8c9d3e2a1b4)
- Now single migration head without parallel branches

This eliminates the 'Multiple heads are present' error in CI/CD tests
by ensuring migrations follow a linear chain instead of creating
parallel migration branches that need artificial merge migrations.

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

Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* Review, rebase and lint

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

---------

Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>
Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
Co-authored-by: Shamsul Arefin <shamsul.arefin@iqvia.com>
Co-authored-by: Mihai Criveti <crivetimihai@gmail.com>
Co-authored-by: VK <90204593+vk-playground@users.noreply.github.com>
Co-authored-by: Claude <noreply@anthropic.com>

* Fix pre-commit hooks

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

* 744 annotations (IBM#784)

* Fix annotations edit

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

* Fix annotations edit

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

---------

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

* fix: plugins template (IBM#783)

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

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

* fix: exclude jinja files from reformatting tabs

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

* fix: plugins cli defaults

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

* fix: revert formatted Makefile template

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

* feat: add optional packages

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

* docs: update plugin template docs

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

* docs: update template readme

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

---------

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

* edit-tool

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* edit-tool

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* doc test

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* edit-tool

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* web lint

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* flake8 fix

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* pytest fix

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* revert with main

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* flake fix

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* revert with main

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* alembic

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* alembic change

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* flake8 fix

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* remove addtional line

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* alembic

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* Rebase and fix

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

---------

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>
Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
Signed-off-by: Ian Molloy <molloyim@us.ibm.com>
Signed-off-by: Madhav Kandukuri <madhav165@gmail.com>
Signed-off-by: Vinod Muthusamy <770084+vinodmut@users.noreply.github.com>
Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com>
Signed-off-by: Vicky <vicky.kuo.contact@gmail.com>
Signed-off-by: Veeresh K <veeruveeresh1522@gmail.com>
Signed-off-by: Shoumi <shoumimukherjee@gmail.com>
Signed-off-by: Mohan Lakshmaiah <mohalaks@in.ibm.com>
Signed-off-by: Teryl Taylor <terylt@ibm.com>
Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>
Co-authored-by: RAKHI DUTTA <rakdutta@in.ibm.com>
Co-authored-by: Mihai Criveti <crivetimihai@gmail.com>
Co-authored-by: Ian Molloy <i.m.molloy@gmail.com>
Co-authored-by: Madhav Kandukuri <madhav165@users.noreply.github.com>
Co-authored-by: Vinod Muthusamy <vinodmut@users.noreply.github.com>
Co-authored-by: Vinod Muthusamy <770084+vinodmut@users.noreply.github.com>
Co-authored-by: VK <90204593+vk-playground@users.noreply.github.com>
Co-authored-by: Frederico Araujo <araujof@users.noreply.github.com>
Co-authored-by: Madhav Kandukuri <madhav165@gmail.com>
Co-authored-by: Vicky <vicky.kuo.contact@gmail.com>
Co-authored-by: Veeresh K <42322782+nmveeresh@users.noreply.github.com>
Co-authored-by: Shoumi M <55126549+shoummu1@users.noreply.github.com>
Co-authored-by: Mohan Lakshmaiah <mohan.economist@gmail.com>
Co-authored-by: Mohan Lakshmaiah <mohalaks@in.ibm.com>
Co-authored-by: Teryl Taylor <terylt@ibm.com>
Co-authored-by: Shamsul Arefin <shams@rijuk.com>
Co-authored-by: Shamsul Arefin <shamsul.arefin@iqvia.com>
Co-authored-by: Claude <noreply@anthropic.com>
vk-playground pushed a commit to vk-playground/mcp-context-forge that referenced this pull request Sep 16, 2025
Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
vk-playground added a commit to vk-playground/mcp-context-forge that referenced this pull request Sep 16, 2025
…g Implementation (IBM#786)

* db.py update

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* edit-tool

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* edit-tool

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* edit-tool

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* edit-tool

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* edit-tool

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* edit-tool

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* doc test

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* pytest

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* pytest

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* revert alembic with main version

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

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

* Add logging UI

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

* Add logging UI

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

* Add logging UI

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

* Add logging UI readme

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

* Update logging flake8

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

* Update logging flake8

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

* test coverage

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

* test coverage

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

* Fix download

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

* Fix test

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

---------

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

* 749 reverse proxy (IBM#750)

* Fix download

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

* Reverse proxy

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

* Reverse proxy

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

* Reverse proxy

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

* doctest improvements

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

---------

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

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

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

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

* Fix rpc endpoints
Signed-off-by: Madhav Kandukuri <madhav165@gmail.com>

* Remove commented code
Signed-off-by: Madhav Kandukuri <madhav165@gmail.com>

* remove duplicate code in session registry

Signed-off-by: Madhav Kandukuri <madhav165@gmail.com>

* Linting fixes
Signed-off-by: Madhav Kandukuri <madhav165@gmail.com>

* Fix tests
Signed-off-by: Madhav Kandukuri <madhav165@gmail.com>

---------

Signed-off-by: Madhav Kandukuri <madhav165@gmail.com>

* 753 fix tool invocation invalid method (IBM#754)

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

- Add backward compatibility for direct tool invocation (pre-PR IBM#746 format)
- Support both old format (method=tool_name) and new format (method=tools/call)
- Add comprehensive test coverage for RPC tool invocation scenarios
- Ensure graceful fallback to gateway forwarding when method is not a tool

The RPC endpoint now handles tool invocations in both formats:
1. New format: method='tools/call' with name and arguments in params
2. Old format: method='tool_name' with params as arguments (backward compat)

This maintains compatibility with existing clients while supporting the new
standardized RPC method structure introduced in PR IBM#746.

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

* Fix flake8 E722: Replace bare except with Exception

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

* lint

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

---------

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

* fix: suppress bandit security warnings with appropriate nosec comments (IBM#755)

- Added nosec B105 for ENV_TOKEN as it's an environment variable name, not a hardcoded secret
- Added nosec B110 for intentional exception swallowing in cleanup/error handling paths
- Both cases are legitimate uses where errors should be silently ignored to prevent cascading failures

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

* Add agents file

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

* pylint (IBM#759)

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

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

Signed-off-by: Vinod Muthusamy <770084+vinodmut@users.noreply.github.com>
Co-authored-by: Vinod Muthusamy <770084+vinodmut@users.noreply.github.com>

* Update documentation with fixed image tag

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

* 256 fuzz testing (IBM#760)

* Implement comprehensive fuzz testing automation (IBM#256)

- Add property-based testing with Hypothesis for JSON-RPC, JSONPath, and schema validation
- Add coverage-guided fuzzing with Atheris for deep code path exploration
- Add API endpoint fuzzing with Schemathesis for contract validation
- Add security-focused testing for vulnerability discovery (SQL injection, XSS, etc.)
- Add complete Makefile automation with fuzz-all, fuzz-quick, fuzz-extended targets
- Add optional [fuzz] dependency group in pyproject.toml for clean installation
- Add comprehensive reporting with JSON/Markdown outputs and executive summaries
- Add complete developer documentation with examples and troubleshooting guides
- Exclude fuzz tests from main test suite to prevent auth failures
- Found multiple real bugs in JSON-RPC validation during development

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

* Update fuzz testing

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

* Update fuzz testing

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

---------

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

* 344 cors security headers (IBM#761)

* Update CORS

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

* Update CORS

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

* Update CORS ADRs

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

* Update CORS

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

* Update CORS

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

* Fix compose

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

* Update helm chart

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

* Update CORS docs

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

* Update test

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

---------

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

* feat: Bulk Import Tools modal wiring IBM#737 (IBM#739)

* feat: Bulk Import Tools modal wiring and backend implementation

- Add modal UI in admin.html with bulk import button and dialog
- Implement modal open/close/ESC functionality in admin.js
- Add POST /admin/tools/import endpoint with rate limiting
- Support both JSON textarea and file upload inputs
- Validate JSON structure and enforce 200 tool limit
- Return detailed success/failure information per tool
- Include loading states and comprehensive error handling

Refs IBM#737

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

* fix: Remove duplicate admin_import_tools function and fix HTML formatting

- Remove duplicate admin_import_tools function definition
- Fix HTML placeholder attribute to use double quotes
- Add missing closing div tag
- Fix flake8 blank line issues

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

* feat: Complete bulk import backend with file upload support and enhanced docs

- Add file upload support to admin_import_tools endpoint
- Fix response format to match frontend expectations
- Add UI usage documentation with modal instructions
- Update API docs to show all three input methods
- Enhance bulk import guide with UI and API examples

Backend improvements:
- Support tools_file form field for JSON file uploads
- Proper file content parsing with error handling
- Response includes imported/failed counts and details
- Frontend-compatible response format for UI display

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

* Bulk import

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

* fix: Remove conflicting inline script and fix bulk import functionality

- Remove conflicting inline JavaScript that was preventing form submission
- Fix indentation in setupBulkImportModal function
- Ensure bulk import modal uses proper admin.js implementation
- Restore proper form submission handling for bulk import

This fixes the issue where bulk import appeared to do nothing.

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

* fix: Integrate bulk import setup with main initialization

- Add setupBulkImportModal() to main initialization sequence
- Remove duplicate DOMContentLoaded listener
- Ensure bulk import doesn't interfere with other tab functionality

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

* fix: JavaScript formatting issues in bulk import modal

- Fix multiline querySelector formatting
- Fix multiline Error constructor formatting
- Ensure prettier compliance for web linting

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

* debug: Temporarily disable bulk import setup to test tabs

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

* fix: Remove duplicate setupFormValidation call and delay bulk import setup

- Remove duplicate setupFormValidation() call that could cause conflicts
- Use setTimeout to delay bulk import modal setup after other initialization
- Add better null safety to form element queries
- This should fix tab switching issues

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

* fix: Restore proper initialization sequence for tab functionality

- Remove setTimeout delay for bulk import setup
- Keep bulk import setup in main initialization but with error handling
- Ensure tab navigation isn't affected by bulk import modal setup

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

* fix: Correct HTML structure and restore tab navigation

- Move bulk import modal to correct location after tools panel
- Remove extra closing div that was breaking HTML structure
- Ensure proper page-level modal placement
- Restore tab navigation functionality for all tabs

This fixes the broken Global Resources, Prompts, Gateways, Roots, and Metrics tabs.

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

* feat: Add configurable bulk import settings

Configuration additions:
- MCPGATEWAY_BULK_IMPORT_MAX_TOOLS (default: 200)
- MCPGATEWAY_BULK_IMPORT_RATE_LIMIT (default: 10)

Implementation:
- config.py: Add new settings with defaults
- admin.py: Use configurable rate limit and batch size
- .env.example: Document all bulk import environment variables
- admin.html: Use dynamic max tools value in UI text
- CLAUDE.md: Document configuration options for developers
- docs: Update bulk import guide with configuration details

This makes bulk import fully configurable for different deployment scenarios.

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

* Update docs

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

---------

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

* Implemented configuration export (IBM#764)

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

* 185 186 import export (IBM#769)

* Import export

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

* Import export

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

* Import export

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

* Import export

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

* Import export

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

* Import export

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

* Import export

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

* Import export

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

* Import export testing

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

---------

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

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

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

* Well known (IBM#770)

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

* Update docs with jsonrpc tutorial (IBM#772)

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

* 137 metadata timestamps (IBM#776)

* Metadata / creation dates

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

* Metadata / creation dates

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

* Metadata / creation dates

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

* Security headers CSP

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

* Display metadata for resources
Signed-off-by: Madhav Kandukuri <madhav165@gmail.com>

* eslint fix
Signed-off-by: Madhav Kandukuri <madhav165@gmail.com>

---------

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
Co-authored-by: Madhav Kandukuri <madhav165@gmail.com>

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

* feat: Add bulk import UI modal for tools

Signed-off-by: Vicky <vicky.kuo.contact@gmail.com>

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

Signed-off-by: Vicky <vicky.kuo.contact@gmail.com>

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

Signed-off-by: Vicky <vicky.kuo.contact@gmail.com>

---------

Signed-off-by: Vicky <vicky.kuo.contact@gmail.com>
Co-authored-by: Vicky <vicky.kuo.contact@gmail.com>

* Cleanup pr

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

* Cleanup pr

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

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

* added params extraction from url logic

Signed-off-by: Veeresh K <veeruveeresh1522@gmail.com>

* added params extraction from url logic

Signed-off-by: Veeresh K <veeruveeresh1522@gmail.com>

* Rebase and lint / test

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

---------

Signed-off-by: Veeresh K <veeruveeresh1522@gmail.com>
Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
Co-authored-by: Mihai Criveti <crivetimihai@gmail.com>

* edit column header (IBM#777)

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

* Test case update (IBM#775)

* session_registry test case updates

Signed-off-by: Mohan Lakshmaiah <mohalaks@in.ibm.com>

* test case update for routers/reverse_proxy

Signed-off-by: Mohan Lakshmaiah <mohalaks@in.ibm.com>

* test case update to mcpgateway/reverse_proxy.py

Signed-off-by: Mohan Lakshmaiah <mohalaks@in.ibm.com>

* Fix formatting issues from pre-commit hooks

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

---------

Signed-off-by: Mohan Lakshmaiah <mohalaks@in.ibm.com>
Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
Co-authored-by: Mohan Lakshmaiah <mohalaks@in.ibm.com>
Co-authored-by: Mihai Criveti <crivetimihai@gmail.com>

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

* feat: add support for external plugins

Signed-off-by: Teryl Taylor <terylt@ibm.com>

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

Signed-off-by: Teryl Taylor <terylt@ibm.com>

* fix(lint): fixed yamllint issues

Signed-off-by: Teryl Taylor <terylt@ibm.com>

* fix(lint): fixed flake8 issue.

Signed-off-by: Teryl Taylor <terylt@ibm.com>

* feat: define plugins cli and implement bootstrap command

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

* fix: implement install and package CLI commands

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

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

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

* feat: add external plugin template

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

* feat: move copier config to repository root

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

* feat: update copier template

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

* feat: get default author from git config

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

* feat: update copier settings

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

* fix: copier config syntax

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

* feat: add external plugin template modules

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

* fix: template syntax

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

* fix: template syntax

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

* fix: make template

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

* feat: fix template issue

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

* fix: toml template

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

* fix: plugin mcp server initialization

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

* feat: init module for plugin framework

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

* feat: add chuck runtime and container wrapping

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

* fix: makefile template

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

* fix: plugins config path

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

* feat: add .env.template

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

* feat: add tools and resources support

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

* fix: lint yaml

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

* chore: cleanups

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

* feat: update manifest.in

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

* chore: linting

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

* fix: plugin config variable

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

* fix(tests): fixed doctests for plugins.

Signed-off-by: Teryl Taylor <terylt@ibm.com>

* refactor: external plugin server and plugin external API

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

* docs(plugins): removed subpackages from examples

Signed-off-by: Teryl Taylor <terylt@ibm.com>

* docs: update plugin docs to use public framework API

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

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

Signed-off-by: Teryl Taylor <terylt@ibm.com>

* feat: udpate test templates

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

* feat: update test templates

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

* feat: update plugin template

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

* feat: update plugin template

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

* feat: update tempalte makefile

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

* feat: add template for native plugin

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

* feat: add readme for native template

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

* feat: force boostrap to be a subcommnand

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

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

Signed-off-by: Teryl Taylor <terylt@ibm.com>

* tests: add tests for plugins CLI

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

* fix: deprecation warning

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

* tests: add CLI tests

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

* tests: update plugin cli

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

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

Signed-off-by: Teryl Taylor <terylt@ibm.com>

* chore: update template readmes

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

* fix: lint docstrings in cli

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

* chore: fix lint errors in docstrings

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

* chore: fix lint errors

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

* tests: add external plugin server tests

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

* chore: cleanup

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

* chore: add missing docstrings

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

* chore: add missing docstrings

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

* tests: fix cli dryrun test

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

* chore: fix lint issues

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

* tests: fix teardown of client http tests

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

* tests: skipping flaky tests

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

* docs: plugin lifecycle tools

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

* docs: add missing plugin lifecycle doc

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

* Review, rebase and lint

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

---------

Signed-off-by: Teryl Taylor <terylt@ibm.com>
Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com>
Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
Co-authored-by: Teryl Taylor <terylt@ibm.com>
Co-authored-by: Mihai Criveti <crivetimihai@gmail.com>

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

* Oauth 2.1 design

Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>

* oauth 2.0 design

Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>

* Support for oauth auth type in gateway

Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>

* Decrypt client secret

Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>

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

Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>

* test fixes

Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>

* 256 fuzz testing (IBM#760)

* Implement comprehensive fuzz testing automation (IBM#256)

- Add property-based testing with Hypothesis for JSON-RPC, JSONPath, and schema validation
- Add coverage-guided fuzzing with Atheris for deep code path exploration
- Add API endpoint fuzzing with Schemathesis for contract validation
- Add security-focused testing for vulnerability discovery (SQL injection, XSS, etc.)
- Add complete Makefile automation with fuzz-all, fuzz-quick, fuzz-extended targets
- Add optional [fuzz] dependency group in pyproject.toml for clean installation
- Add comprehensive reporting with JSON/Markdown outputs and executive summaries
- Add complete developer documentation with examples and troubleshooting guides
- Exclude fuzz tests from main test suite to prevent auth failures
- Found multiple real bugs in JSON-RPC validation during development

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

* Update fuzz testing

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

* Update fuzz testing

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

---------

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

* 344 cors security headers (IBM#761)

* Update CORS

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

* Update CORS

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

* Update CORS ADRs

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

* Update CORS

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

* Update CORS

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

* Fix compose

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

* Update helm chart

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

* Update CORS docs

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

* Update test

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

---------

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>

* feat: Bulk Import Tools modal wiring IBM#737 (IBM#739)

* feat: Bulk Import Tools modal wiring and backend implementation

- Add modal UI in admin.html with bulk import button and dialog
- Implement modal open/close/ESC functionality in admin.js
- Add POST /admin/tools/import endpoint with rate limiting
- Support both JSON textarea and file upload inputs
- Validate JSON structure and enforce 200 tool limit
- Return detailed success/failure information per tool
- Include loading states and comprehensive error handling

Refs IBM#737

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

* fix: Remove duplicate admin_import_tools function and fix HTML formatting

- Remove duplicate admin_import_tools function definition
- Fix HTML placeholder attribute to use double quotes
- Add missing closing div tag
- Fix flake8 blank line issues

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

* feat: Complete bulk import backend with file upload support and enhanced docs

- Add file upload support to admin_import_tools endpoint
- Fix response format to match frontend expectations
- Add UI usage documentation with modal instructions
- Update API docs to show all three input methods
- Enhance bulk import guide with UI and API examples

Backend improvements:
- Support tools_file form field for JSON file uploads
- Proper file content parsing with error handling
- Response includes imported/failed counts and details
- Frontend-compatible response format for UI display

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

* Bulk import

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

* fix: Remove conflicting inline script and fix bulk import functionality

- Remove conflicting inline JavaScript that was preventing form submission
- Fix indentation in setupBulkImportModal function
- Ensure bulk import modal uses proper admin.js implementation
- Restore proper form submission handling for bulk import

This fixes the issue where bulk import appeared to do nothing.

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

* fix: Integrate bulk import setup with main initialization

- Add setupBulkImportModal() to main initialization sequence
- Remove duplicate DOMContentLoaded listener
- Ensure bulk import doesn't interfere with other tab functionality

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

* fix: JavaScript formatting issues in bulk import modal

- Fix multiline querySelector formatting
- Fix multiline Error constructor formatting
- Ensure prettier compliance for web linting

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

* debug: Temporarily disable bulk import setup to test tabs

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

* fix: Remove duplicate setupFormValidation call and delay bulk import setup

- Remove duplicate setupFormValidation() call that could cause conflicts
- Use setTimeout to delay bulk import modal setup after other initialization
- Add better null safety to form element queries
- This should fix tab switching issues

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

* fix: Restore proper initialization sequence for tab functionality

- Remove setTimeout delay for bulk import setup
- Keep bulk import setup in main initialization but with error handling
- Ensure tab navigation isn't affected by bulk import modal setup

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

* fix: Correct HTML structure and restore tab navigation

- Move bulk import modal to correct location after tools panel
- Remove extra closing div that was breaking HTML structure
- Ensure proper page-level modal placement
- Restore tab navigation functionality for all tabs

This fixes the broken Global Resources, Prompts, Gateways, Roots, and Metrics tabs.

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

* feat: Add configurable bulk import settings

Configuration additions:
- MCPGATEWAY_BULK_IMPORT_MAX_TOOLS (default: 200)
- MCPGATEWAY_BULK_IMPORT_RATE_LIMIT (default: 10)

Implementation:
- config.py: Add new settings with defaults
- admin.py: Use configurable rate limit and batch size
- .env.example: Document all bulk import environment variables
- admin.html: Use dynamic max tools value in UI text
- CLAUDE.md: Document configuration options for developers
- docs: Update bulk import guide with configuration details

This makes bulk import fully configurable for different deployment scenarios.

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

* Update docs

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

---------

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
Co-authored-by: Mihai Criveti <crivetimihai@gmail.com>
Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>

* Implemented configuration export (IBM#764)

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>

* cleanup

Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>

* cleanup

Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>

* fixes

Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>

* ruff fixes

Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>

* fix flake8 errors

Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>

* fix eslint errors

Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>

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

Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>

* Review, rebase and lint

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

* Fix Alembic multiple heads issue

Create merge migration to resolve parallel migration chains:
- Main branch migrations (34492f99a0c4)
- OAuth branch migrations (add_oauth_tokens_table)

This resolves CI/CD test failures caused by Alembic not knowing
which migration head to follow during 'alembic upgrade head'.

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

Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* Fix Alembic migration chain - remove merge migration hack

- Remove unnecessary merge migration file (813b45a70b53)
- Fix OAuth config migration to follow proper chain (f8c9d3e2a1b4 → 34492f99a0c4)
- OAuth tokens migration already correctly follows (add_oauth_tokens_table → f8c9d3e2a1b4)
- Now single migration head without parallel branches

This eliminates the 'Multiple heads are present' error in CI/CD tests
by ensuring migrations follow a linear chain instead of creating
parallel migration branches that need artificial merge migrations.

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

Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* Review, rebase and lint

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

---------

Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>
Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
Co-authored-by: Shamsul Arefin <shamsul.arefin@iqvia.com>
Co-authored-by: Mihai Criveti <crivetimihai@gmail.com>
Co-authored-by: VK <90204593+vk-playground@users.noreply.github.com>
Co-authored-by: Claude <noreply@anthropic.com>

* Fix pre-commit hooks

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

* 744 annotations (IBM#784)

* Fix annotations edit

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

* Fix annotations edit

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

---------

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

* fix: plugins template (IBM#783)

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

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

* fix: exclude jinja files from reformatting tabs

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

* fix: plugins cli defaults

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

* fix: revert formatted Makefile template

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

* feat: add optional packages

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

* docs: update plugin template docs

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

* docs: update template readme

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

---------

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

* edit-tool

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* edit-tool

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* doc test

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* edit-tool

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* web lint

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* flake8 fix

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* pytest fix

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* revert with main

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* flake fix

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* revert with main

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* alembic

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* alembic change

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* flake8 fix

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* remove addtional line

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* alembic

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>

* Rebase and fix

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

---------

Signed-off-by: RAKHI DUTTA <rakdutta@in.ibm.com>
Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
Signed-off-by: Ian Molloy <molloyim@us.ibm.com>
Signed-off-by: Madhav Kandukuri <madhav165@gmail.com>
Signed-off-by: Vinod Muthusamy <770084+vinodmut@users.noreply.github.com>
Signed-off-by: Frederico Araujo <frederico.araujo@ibm.com>
Signed-off-by: Vicky <vicky.kuo.contact@gmail.com>
Signed-off-by: Veeresh K <veeruveeresh1522@gmail.com>
Signed-off-by: Shoumi <shoumimukherjee@gmail.com>
Signed-off-by: Mohan Lakshmaiah <mohalaks@in.ibm.com>
Signed-off-by: Teryl Taylor <terylt@ibm.com>
Signed-off-by: Shamsul Arefin <shamsul.arefin@iqvia.com>
Co-authored-by: RAKHI DUTTA <rakdutta@in.ibm.com>
Co-authored-by: Mihai Criveti <crivetimihai@gmail.com>
Co-authored-by: Ian Molloy <i.m.molloy@gmail.com>
Co-authored-by: Madhav Kandukuri <madhav165@users.noreply.github.com>
Co-authored-by: Vinod Muthusamy <vinodmut@users.noreply.github.com>
Co-authored-by: Vinod Muthusamy <770084+vinodmut@users.noreply.github.com>
Co-authored-by: VK <90204593+vk-playground@users.noreply.github.com>
Co-authored-by: Frederico Araujo <araujof@users.noreply.github.com>
Co-authored-by: Madhav Kandukuri <madhav165@gmail.com>
Co-authored-by: Vicky <vicky.kuo.contact@gmail.com>
Co-authored-by: Veeresh K <42322782+nmveeresh@users.noreply.github.com>
Co-authored-by: Shoumi M <55126549+shoummu1@users.noreply.github.com>
Co-authored-by: Mohan Lakshmaiah <mohan.economist@gmail.com>
Co-authored-by: Mohan Lakshmaiah <mohalaks@in.ibm.com>
Co-authored-by: Teryl Taylor <terylt@ibm.com>
Co-authored-by: Shamsul Arefin <shams@rijuk.com>
Co-authored-by: Shamsul Arefin <shamsul.arefin@iqvia.com>
Co-authored-by: Claude <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant