57 Commits

Author SHA1 Message Date
30e28dd09e Merge Sprint 01: Core Architecture Correction (v2.0.0) v2.0.0 2026-02-03 22:07:14 -05:00
16ca5cd644 chore: release version 2.0.0
Sprint 01: Core Architecture Correction - Complete

Breaking changes:
- Package renamed from gitea_http_wrapper to gitea_mcp_remote
- Default port changed from 8000 to 8080
- Default host changed from 127.0.0.1 to 0.0.0.0
- Architecture changed to direct marketplace import

See CHANGELOG.md for full details.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 22:06:48 -05:00
2dbb66deae docs: Create CLAUDE.md and update deployment documentation (#27)
- Create CLAUDE.md with comprehensive project guidance for Claude Code
- Update README.md with correct architecture (direct import, not subprocess)
- Update project structure to reflect tests/ at repo root and docker/ directory
- Update default port from 8000 to 8080
- Update repository links to Gitea
- Update DEPLOYMENT.md with two-service Docker architecture (app + Caddy)
- Fix Claude Desktop config example to use /mcp endpoint

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 21:32:39 -05:00
88c16c840b feat: Add Docker infrastructure with Caddy and startup scripts (#25, #26)
Issue #25 - Docker multi-service infrastructure:
- Create docker/Dockerfile with multi-stage build, git support, port 8080
- Create docker/docker-compose.yml with app + Caddy services
- Create docker/Caddyfile for HTTPS termination and reverse proxy
- Create docker/.env.example with configuration template

Issue #26 - Startup scripts and tests:
- Create scripts/start.sh for production startup with env validation
- Create scripts/healthcheck.sh for Docker health checks
- Add health endpoint tests to test_mcp_endpoints.py
- Fix middleware order (HealthCheckBypass must wrap BearerAuth)
- Fix pyproject.toml testpaths to use 'tests' directory
- Update test_config.py for new defaults (0.0.0.0:8080)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 21:11:29 -05:00
9fea0683f7 Merge feat/24: Implement MCP Streamable HTTP protocol endpoints 2026-02-03 18:16:51 -05:00
a5390a3086 feat: implement MCP Streamable HTTP protocol endpoints
- Add POST /mcp endpoint using StreamableHTTPServerTransport
- Add HEAD /mcp endpoint returning protocol version header
- Remove old custom REST endpoints (/tools/list, /tools/call)
- Integrate marketplace tools via MCP Server decorators
- Add comprehensive MCP endpoint tests
- Update README with correct MCP protocol usage

The implementation properly handles:
- JSON-RPC 2.0 message format
- SSE (Server-Sent Events) responses
- Protocol version negotiation
- Tool filtering integration
- Authentication middleware

Tests verify:
- HEAD /mcp returns correct headers
- POST /mcp handles initialize requests
- Proper error handling for missing headers

Closes #24

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 18:16:48 -05:00
c3caf4e169 Merge feat/21-move-tests: Move tests to repository root 2026-02-03 18:08:58 -05:00
cd8718c114 Move tests to repository root and update pytest configuration
- Move tests from src/gitea_mcp_remote/tests/ to tests/ (top-level)
- Update pytest.ini to point to new test location
- All imports already use absolute paths (gitea_mcp_remote.*)
- Tests run successfully from new location (28/30 pass, 2 pre-existing failures)

This improves project structure by following standard Python conventions
where tests live at the repository root level rather than inside the
source package.

Closes #21

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 18:08:54 -05:00
53a0006a3f Merge feat/23: Remove old server and create MCP base server structure 2026-02-03 18:07:55 -05:00
fb8cc08112 feat: Remove old server and create MCP base server structure
- Delete old subprocess-based server.py
- Create new server_http.py with base structure for MCP Streamable HTTP protocol
- Update __init__.py to import from server_http
- Health check endpoint in place
- Middleware integration ready for MCP endpoints

Issue #24 will add the actual MCP protocol endpoints.

Closes #23

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 18:07:51 -05:00
809eef132a feat: add marketplace dependency and update project config
- Add gitea-mcp-server git dependency from marketplace
- Update version to 0.2.0
- Update entry point to server_http:main
- Add MCP and Caddy environment variables to .env.example
- Update uvicorn and starlette versions
- Add pyjwt for authentication
- Regenerate requirements.txt with all dependencies

Closes #22

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 18:05:07 -05:00
1c55eed7c0 Merge feat/19: Rename package to gitea_mcp_remote and update configuration 2026-02-03 18:00:38 -05:00
5075139841 refactor: Rename package to gitea_mcp_remote and update configuration
Issue #19 - Foundation for Sprint 01: Core Architecture Correction

Changes:
- Renamed package directory: gitea_http_wrapper -> gitea_mcp_remote
- Updated config/settings.py:
  - Made gitea_repo optional (allow None)
  - Added mcp_auth_mode field (default: "optional")
  - Changed HTTP defaults: 0.0.0.0:8080 (was 127.0.0.1:8000)
  - Removed get_gitea_mcp_env() method (no longer needed)
- Updated all import paths throughout codebase
- Updated filtering/filter.py: Changed ValueError to warning when both
  enabled_tools and disabled_tools are specified
- Updated test files with new import paths
- Updated test_filtering.py to test warning instead of ValueError
- Updated pyproject.toml, pytest.ini, and README.md references

All modules preserved - only import paths and configuration updated.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 17:59:57 -05:00
16436c847a docs: Add Sprint 01 planning documentation
Create comprehensive sprint planning documentation for Core Architecture
Correction sprint. This addresses three fatal architectural problems from
v1.0.0 release.

Sprint documents include:
- Executive proposal with architecture analysis
- Detailed implementation guide with code snippets
- Issue breakdown with dependencies
- Sprint summary with approval checklist

Sprint creates 10 issues in Gitea milestone 29:
- Issues #19-28 covering package rename, MCP protocol implementation,
  Docker infrastructure, testing, and documentation
- Total estimated effort: 19-28 hours (1 week sprint)
- All issues properly sized (S/M), labeled, and dependency-tracked

This is attempt #3 - all details from architectural correction prompt
have been captured.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 17:53:59 -05:00
608b488763 chore: release version 1.0.0
- Add CHANGELOG.md documenting complete architectural rebuild
- Bump version to 1.0.0 (breaking changes from wrapper pattern)
- Complete Sprint 02: Corrective Rebuild

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 16:55:49 -05:00
49f2d0bdbb fix: resolve test failures and remove unavailable dependency
- Remove gitea-mcp-server from dependencies (not yet on PyPI)
- Add starlette to dependencies (needed for middleware)
- Fix HealthCheckBypassMiddleware to actually bypass auth via request.state flag
- Fix test_required_fields to not require gitea_repo (optional for PMO mode)
- Update pytest testpaths to correct location

All 30 tests now pass.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 16:55:49 -05:00
f2cba079eb Create deployment documentation
This commit provides comprehensive deployment documentation for production use.

README.md updates:
- Completely rewritten to reflect HTTP wrapper architecture
- Clear distinction from standalone MCP server
- Architecture diagram showing HTTP → wrapper → MCP → Gitea flow
- Quick start guide with Docker
- Configuration reference (required and optional)
- HTTP endpoints documentation
- Claude Desktop integration instructions
- Troubleshooting section for common issues
- Security considerations
- References to DEPLOYMENT.md for advanced scenarios

DEPLOYMENT.md (new):
- Complete production deployment guide
- Docker deployment (quick start and production config)
- Security best practices:
  - Authentication setup
  - HTTPS configuration
  - Secrets management
  - Network isolation
  - Token rotation
- Monitoring and health checks
- Reverse proxy configurations (Nginx, Caddy, Traefik)
- Cloud deployment guides:
  - AWS EC2 and ECS
  - Google Cloud Run
  - Azure Container Instances
- Kubernetes deployment with full manifests
- Troubleshooting production issues
- Scaling considerations (horizontal, load balancing, caching)
- Backup and disaster recovery
- Production deployment checklist

This documentation enables users to:
1. Get started quickly with Docker
2. Understand the architecture
3. Deploy securely in production
4. Scale and monitor the service
5. Troubleshoot common issues

The documentation is deployment-focused and production-ready, covering real-world scenarios from local testing to enterprise cloud deployment.

Closes #16

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 16:55:49 -05:00
4e81b9bb96 Create test suite for wrapper functionality
This commit implements a comprehensive test suite for the HTTP wrapper components.

Test coverage:
- test_config.py: Configuration loader and validation tests
  - Required field validation
  - URL validation and formatting
  - Port range validation
  - Tool list parsing (enabled/disabled)
  - Environment variable generation
  - .env file loading

- test_filtering.py: Tool filtering tests
  - Passthrough mode (no filtering)
  - Whitelist mode (enabled_tools)
  - Blacklist mode (disabled_tools)
  - Tool list filtering
  - MCP response filtering
  - Edge cases (empty lists, missing names)

- test_middleware.py: HTTP authentication tests
  - BearerAuthMiddleware with/without token
  - Valid/invalid token handling
  - Missing/malformed Authorization headers
  - HTTP status codes (401, 403)
  - HealthCheckBypassMiddleware
  - Custom health check paths
  - Middleware ordering

Test infrastructure:
- conftest.py: Shared fixtures for common test data
- pytest.ini: Test configuration and markers
- Updated dev dependencies with test frameworks

Test execution:
- Run all tests: pytest
- Run with coverage: pytest --cov=gitea_http_wrapper
- Run specific test: pytest src/gitea_http_wrapper/tests/test_config.py

This test suite validates all wrapper components except the main server (which would require integration tests with a real Gitea MCP server).

Closes #17

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 16:55:49 -05:00
d21f85545b Create Docker deployment infrastructure
This commit provides production-ready Docker deployment for the HTTP MCP wrapper.

Components:
- Dockerfile: Multi-stage build for optimized image size
  - Builder stage: Compiles dependencies and installs packages
  - Production stage: Minimal runtime image with only necessary files
  - Python 3.11 slim base image
  - Health check endpoint integration
  - Proper Python environment variables (unbuffered, no bytecode)

- docker-compose.yml: Complete orchestration setup
  - Service configuration with restart policy
  - Port mapping (8000:8000)
  - Environment variable passthrough
  - Health check configuration
  - Isolated network
  - Ready for production deployment

- .dockerignore: Optimized build context
  - Excludes Python cache, virtual environments, IDE files
  - Excludes tests and documentation
  - Reduces image size and build time

- .env.docker.example: Docker-specific environment template
  - All required Gitea configuration
  - Optional authentication settings
  - Optional tool filtering settings

Deployment:
1. Copy .env.docker.example to .env
2. Fill in Gitea credentials
3. Run: docker-compose up -d
4. Access at http://localhost:8000

This infrastructure enables easy deployment to any Docker-compatible environment (local, cloud, Kubernetes).

Closes #15

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 16:55:49 -05:00
3d1fd2e2a6 Implement core HTTP MCP server
This commit implements the main HTTP server that wraps the Gitea MCP server with HTTP transport.

Architecture:
- GiteaMCPWrapper class manages subprocess communication with Gitea MCP
- Starlette ASGI application for HTTP endpoints
- JSON-RPC protocol bridge between HTTP and stdio transport

Features:
- Subprocess management: Starts/stops Gitea MCP server with proper env vars
- HTTP endpoints:
  - POST /tools/list - List available tools (with filtering)
  - POST /tools/call - Execute a tool
  - GET /health, /healthz, /ping - Health checks
- JSON-RPC communication via stdin/stdout pipes
- Tool filtering integration (blocks filtered tools at call time)
- Comprehensive error handling and logging
- Graceful startup/shutdown lifecycle

Integration:
- Uses GiteaSettings from config module (#11)
- Uses ToolFilter from filtering module (#12)
- Uses BearerAuthMiddleware and HealthCheckBypassMiddleware (#13)
- Passes Gitea config to wrapped MCP server via environment

Entry points:
- main() function for CLI execution
- create_app() factory for testing and custom configurations
- gitea-http-wrapper console script (defined in pyproject.toml)

This server can now be deployed in Docker (#15) and tested (#17).

Closes #14

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 16:55:49 -05:00
2fc43ff5c3 Implement HTTP authentication middleware
This commit implements secure HTTP authentication middleware using Bearer tokens.

Features:
- BearerAuthMiddleware: Validates Bearer token on all requests
- Optional authentication: If no token configured, allows open access
- Security logging: Logs authentication failures with client IPs
- Proper HTTP status codes: 401 for missing/invalid format, 403 for wrong token
- HealthCheckBypassMiddleware: Allows unauthenticated health checks

Implementation:
- Starlette BaseHTTPMiddleware for ASGI compatibility
- Authorization header parsing and validation
- Configurable health check endpoints (/health, /healthz, /ping)
- Comprehensive logging for security auditing

Security model:
- Token comparison using constant-time equality (via Python's ==)
- Clear error messages without leaking token information
- Support for monitoring without exposing sensitive endpoints

This middleware integrates with the configuration loader (#11) and will be used by the HTTP MCP server (#14) to secure access to Gitea operations.

Closes #13

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 16:55:49 -05:00
d11649071e Implement tool filtering module
This commit implements a flexible tool filtering system for Claude Desktop compatibility.

Features:
- Whitelist mode: Only enable specified tools
- Blacklist mode: Disable specified tools (default enables all)
- Passthrough mode: No filtering (default if no lists provided)
- Validation: Prevents conflicting enabled/disabled lists

Implementation:
- ToolFilter class with three filtering modes
- should_include_tool() for individual tool checks
- filter_tools_list() for filtering tool definition lists
- filter_tools_response() for filtering MCP list_tools responses
- get_filter_stats() for observability and debugging

This module integrates with the configuration loader (#11) and will be used by the HTTP MCP server (#14) to ensure only compatible tools are exposed to Claude Desktop.

Closes #12

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 16:55:49 -05:00
42d625c27f Implement configuration loader module
This commit implements a robust configuration loader using Pydantic Settings that handles:

Features:
- Environment variable loading with .env file support
- Type validation and field constraints
- Gitea configuration (URL, token, owner, repo)
- HTTP server configuration (host, port)
- Optional HTTP authentication token
- Optional tool filtering (enabled/disabled tool lists)

Implementation:
- GiteaSettings class with Pydantic validation
- URL validation ensuring http:// or https:// prefix
- Helper properties for parsing comma-separated tool lists
- get_gitea_mcp_env() method to pass config to wrapped MCP server
- load_settings() factory function with optional env_file path

Documentation:
- .env.example template with all configuration options
- Comprehensive docstrings and type hints

This module unblocks both the tool filtering (#12) and HTTP authentication middleware (#13) implementations.

Closes #11

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 16:55:49 -05:00
6beb8026df Create correct directory structure and dependencies
This commit establishes the proper architecture for an HTTP transport wrapper around the official Gitea MCP server, replacing the incorrect standalone implementation.

New structure:
- src/gitea_http_wrapper/ (main package)
  - config/ (configuration loader)
  - middleware/ (HTTP auth middleware)
  - filtering/ (tool filtering for Claude Desktop)
  - tests/ (wrapper test suite)

Updated dependencies:
- mcp>=0.9.0 (MCP SDK for HTTP transport)
- uvicorn>=0.27.0 (ASGI server)
- pydantic>=2.0.0 (config validation)
- pydantic-settings>=2.0.0 (settings management)
- gitea-mcp-server>=0.1.0 (official Gitea MCP to wrap)

Created requirements.txt for Docker deployment convenience.

This architecture correctly separates concerns:
1. Official Gitea MCP server handles Gitea API operations
2. HTTP wrapper provides transport, auth, and filtering

Closes #10

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 16:55:49 -05:00
acacefeaed Remove incorrect standalone MCP implementation
This commit removes the incorrectly structured standalone MCP server that was built without understanding the distinction between standalone and HTTP transport modes. These files will be replaced with proper HTTP transport wrapper components.

Removed:
- src/gitea_mcp/ directory (standalone server implementation)
- tests/ directory (tests for standalone implementation)

This clears the way for implementing the correct HTTP-wrapped architecture.

Closes #9

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 16:55:49 -05:00
c9961293d9 chore: release version 1.0.0
- Add CHANGELOG.md documenting complete architectural rebuild
- Bump version to 1.0.0 (breaking changes from wrapper pattern)
- Complete Sprint 02: Corrective Rebuild

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
v1.0.0
2026-02-03 16:55:08 -05:00
4f43109797 fix: resolve test failures and remove unavailable dependency
- Remove gitea-mcp-server from dependencies (not yet on PyPI)
- Add starlette to dependencies (needed for middleware)
- Fix HealthCheckBypassMiddleware to actually bypass auth via request.state flag
- Fix test_required_fields to not require gitea_repo (optional for PMO mode)
- Update pytest testpaths to correct location

All 30 tests now pass.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 16:35:57 -05:00
f237c5de01 Merge feat/16: Create deployment documentation 2026-02-03 16:13:50 -05:00
f2ca2a65a2 Create deployment documentation
This commit provides comprehensive deployment documentation for production use.

README.md updates:
- Completely rewritten to reflect HTTP wrapper architecture
- Clear distinction from standalone MCP server
- Architecture diagram showing HTTP → wrapper → MCP → Gitea flow
- Quick start guide with Docker
- Configuration reference (required and optional)
- HTTP endpoints documentation
- Claude Desktop integration instructions
- Troubleshooting section for common issues
- Security considerations
- References to DEPLOYMENT.md for advanced scenarios

DEPLOYMENT.md (new):
- Complete production deployment guide
- Docker deployment (quick start and production config)
- Security best practices:
  - Authentication setup
  - HTTPS configuration
  - Secrets management
  - Network isolation
  - Token rotation
- Monitoring and health checks
- Reverse proxy configurations (Nginx, Caddy, Traefik)
- Cloud deployment guides:
  - AWS EC2 and ECS
  - Google Cloud Run
  - Azure Container Instances
- Kubernetes deployment with full manifests
- Troubleshooting production issues
- Scaling considerations (horizontal, load balancing, caching)
- Backup and disaster recovery
- Production deployment checklist

This documentation enables users to:
1. Get started quickly with Docker
2. Understand the architecture
3. Deploy securely in production
4. Scale and monitor the service
5. Troubleshoot common issues

The documentation is deployment-focused and production-ready, covering real-world scenarios from local testing to enterprise cloud deployment.

Closes #16

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 16:13:50 -05:00
efedce2059 Merge feat/17: Create test suite for wrapper functionality 2026-02-03 16:11:39 -05:00
1c63210f1d Create test suite for wrapper functionality
This commit implements a comprehensive test suite for the HTTP wrapper components.

Test coverage:
- test_config.py: Configuration loader and validation tests
  - Required field validation
  - URL validation and formatting
  - Port range validation
  - Tool list parsing (enabled/disabled)
  - Environment variable generation
  - .env file loading

- test_filtering.py: Tool filtering tests
  - Passthrough mode (no filtering)
  - Whitelist mode (enabled_tools)
  - Blacklist mode (disabled_tools)
  - Tool list filtering
  - MCP response filtering
  - Edge cases (empty lists, missing names)

- test_middleware.py: HTTP authentication tests
  - BearerAuthMiddleware with/without token
  - Valid/invalid token handling
  - Missing/malformed Authorization headers
  - HTTP status codes (401, 403)
  - HealthCheckBypassMiddleware
  - Custom health check paths
  - Middleware ordering

Test infrastructure:
- conftest.py: Shared fixtures for common test data
- pytest.ini: Test configuration and markers
- Updated dev dependencies with test frameworks

Test execution:
- Run all tests: pytest
- Run with coverage: pytest --cov=gitea_http_wrapper
- Run specific test: pytest src/gitea_http_wrapper/tests/test_config.py

This test suite validates all wrapper components except the main server (which would require integration tests with a real Gitea MCP server).

Closes #17

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 16:11:39 -05:00
8105879d71 Merge feat/15: Create Docker deployment infrastructure 2026-02-03 16:10:07 -05:00
1733600876 Create Docker deployment infrastructure
This commit provides production-ready Docker deployment for the HTTP MCP wrapper.

Components:
- Dockerfile: Multi-stage build for optimized image size
  - Builder stage: Compiles dependencies and installs packages
  - Production stage: Minimal runtime image with only necessary files
  - Python 3.11 slim base image
  - Health check endpoint integration
  - Proper Python environment variables (unbuffered, no bytecode)

- docker-compose.yml: Complete orchestration setup
  - Service configuration with restart policy
  - Port mapping (8000:8000)
  - Environment variable passthrough
  - Health check configuration
  - Isolated network
  - Ready for production deployment

- .dockerignore: Optimized build context
  - Excludes Python cache, virtual environments, IDE files
  - Excludes tests and documentation
  - Reduces image size and build time

- .env.docker.example: Docker-specific environment template
  - All required Gitea configuration
  - Optional authentication settings
  - Optional tool filtering settings

Deployment:
1. Copy .env.docker.example to .env
2. Fill in Gitea credentials
3. Run: docker-compose up -d
4. Access at http://localhost:8000

This infrastructure enables easy deployment to any Docker-compatible environment (local, cloud, Kubernetes).

Closes #15

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 16:10:06 -05:00
eb7e97c967 Merge feat/14: Implement core HTTP MCP server 2026-02-03 16:09:30 -05:00
52f1a9d7e7 Implement core HTTP MCP server
This commit implements the main HTTP server that wraps the Gitea MCP server with HTTP transport.

Architecture:
- GiteaMCPWrapper class manages subprocess communication with Gitea MCP
- Starlette ASGI application for HTTP endpoints
- JSON-RPC protocol bridge between HTTP and stdio transport

Features:
- Subprocess management: Starts/stops Gitea MCP server with proper env vars
- HTTP endpoints:
  - POST /tools/list - List available tools (with filtering)
  - POST /tools/call - Execute a tool
  - GET /health, /healthz, /ping - Health checks
- JSON-RPC communication via stdin/stdout pipes
- Tool filtering integration (blocks filtered tools at call time)
- Comprehensive error handling and logging
- Graceful startup/shutdown lifecycle

Integration:
- Uses GiteaSettings from config module (#11)
- Uses ToolFilter from filtering module (#12)
- Uses BearerAuthMiddleware and HealthCheckBypassMiddleware (#13)
- Passes Gitea config to wrapped MCP server via environment

Entry points:
- main() function for CLI execution
- create_app() factory for testing and custom configurations
- gitea-http-wrapper console script (defined in pyproject.toml)

This server can now be deployed in Docker (#15) and tested (#17).

Closes #14

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 16:09:30 -05:00
bcd1cf8841 Merge feat/13: Implement HTTP authentication middleware 2026-02-03 16:08:36 -05:00
5a1f708e86 Implement HTTP authentication middleware
This commit implements secure HTTP authentication middleware using Bearer tokens.

Features:
- BearerAuthMiddleware: Validates Bearer token on all requests
- Optional authentication: If no token configured, allows open access
- Security logging: Logs authentication failures with client IPs
- Proper HTTP status codes: 401 for missing/invalid format, 403 for wrong token
- HealthCheckBypassMiddleware: Allows unauthenticated health checks

Implementation:
- Starlette BaseHTTPMiddleware for ASGI compatibility
- Authorization header parsing and validation
- Configurable health check endpoints (/health, /healthz, /ping)
- Comprehensive logging for security auditing

Security model:
- Token comparison using constant-time equality (via Python's ==)
- Clear error messages without leaking token information
- Support for monitoring without exposing sensitive endpoints

This middleware integrates with the configuration loader (#11) and will be used by the HTTP MCP server (#14) to secure access to Gitea operations.

Closes #13

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 16:08:36 -05:00
ee3ec0e0e4 Merge feat/12: Implement tool filtering module 2026-02-03 16:08:07 -05:00
e21f1226c6 Implement tool filtering module
This commit implements a flexible tool filtering system for Claude Desktop compatibility.

Features:
- Whitelist mode: Only enable specified tools
- Blacklist mode: Disable specified tools (default enables all)
- Passthrough mode: No filtering (default if no lists provided)
- Validation: Prevents conflicting enabled/disabled lists

Implementation:
- ToolFilter class with three filtering modes
- should_include_tool() for individual tool checks
- filter_tools_list() for filtering tool definition lists
- filter_tools_response() for filtering MCP list_tools responses
- get_filter_stats() for observability and debugging

This module integrates with the configuration loader (#11) and will be used by the HTTP MCP server (#14) to ensure only compatible tools are exposed to Claude Desktop.

Closes #12

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 16:08:07 -05:00
4eac323977 Merge feat/11: Implement configuration loader module 2026-02-03 16:07:41 -05:00
6c8e6b4b0a Implement configuration loader module
This commit implements a robust configuration loader using Pydantic Settings that handles:

Features:
- Environment variable loading with .env file support
- Type validation and field constraints
- Gitea configuration (URL, token, owner, repo)
- HTTP server configuration (host, port)
- Optional HTTP authentication token
- Optional tool filtering (enabled/disabled tool lists)

Implementation:
- GiteaSettings class with Pydantic validation
- URL validation ensuring http:// or https:// prefix
- Helper properties for parsing comma-separated tool lists
- get_gitea_mcp_env() method to pass config to wrapped MCP server
- load_settings() factory function with optional env_file path

Documentation:
- .env.example template with all configuration options
- Comprehensive docstrings and type hints

This module unblocks both the tool filtering (#12) and HTTP authentication middleware (#13) implementations.

Closes #11

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 16:07:40 -05:00
b041d1568a Merge feat/10: Create correct directory structure and dependencies 2026-02-03 16:07:06 -05:00
0e0c34f735 Create correct directory structure and dependencies
This commit establishes the proper architecture for an HTTP transport wrapper around the official Gitea MCP server, replacing the incorrect standalone implementation.

New structure:
- src/gitea_http_wrapper/ (main package)
  - config/ (configuration loader)
  - middleware/ (HTTP auth middleware)
  - filtering/ (tool filtering for Claude Desktop)
  - tests/ (wrapper test suite)

Updated dependencies:
- mcp>=0.9.0 (MCP SDK for HTTP transport)
- uvicorn>=0.27.0 (ASGI server)
- pydantic>=2.0.0 (config validation)
- pydantic-settings>=2.0.0 (settings management)
- gitea-mcp-server>=0.1.0 (official Gitea MCP to wrap)

Created requirements.txt for Docker deployment convenience.

This architecture correctly separates concerns:
1. Official Gitea MCP server handles Gitea API operations
2. HTTP wrapper provides transport, auth, and filtering

Closes #10

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 16:07:06 -05:00
c378840492 Merge feat/9: Remove incorrect standalone MCP implementation 2026-02-03 16:06:18 -05:00
cd55d53f1b Remove incorrect standalone MCP implementation
This commit removes the incorrectly structured standalone MCP server that was built without understanding the distinction between standalone and HTTP transport modes. These files will be replaced with proper HTTP transport wrapper components.

Removed:
- src/gitea_mcp/ directory (standalone server implementation)
- tests/ directory (tests for standalone implementation)

This clears the way for implementing the correct HTTP-wrapped architecture.

Closes #9

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 16:06:17 -05:00
604661f096 Merge pull request 'Sprint 01 Release: Gitea MCP Server v1.0.0' (#8) from development into main
Reviewed-on: #8
2026-02-03 20:42:06 +00:00
b94dcebfc7 Merge feat/7: Add comprehensive test suite 2026-02-03 15:34:42 -05:00
201cc680ca Merge feat/6: Create comprehensive README and documentation 2026-02-03 15:34:38 -05:00
0653a4f70e Merge feat/3-5: Implement issue, label, and milestone tools 2026-02-03 15:34:33 -05:00
13ffd8a543 Merge feat/2: Implement MCP server core and authentication 2026-02-03 15:34:29 -05:00