@@ -6,7 +6,9 @@ Never mention Claude or Claude Code in your PRs, diffs, etc.
66
77## Project Overview
88
9- MCP Gateway (ContextForge) is a production-grade gateway, proxy, and registry for Model Context Protocol (MCP) servers and A2A Agents. It federates MCP and REST services, providing unified discovery, auth, rate-limiting, observability, virtual servers, multi-transport protocols, and an optional Admin UI.
9+ MCP Gateway (ContextForge) is a production-grade gateway, proxy, and registry for Model Context Protocol (MCP) servers
10+ and A2A Agents. It federates MCP and REST services, providing unified discovery, auth, rate-limiting, observability,
11+ virtual servers, multi-transport protocols, and an optional Admin UI.
1012
1113## Essential Commands
1214
@@ -45,121 +47,15 @@ make doctest test htmlcov smoketest lint-web flake8 bandit interrogate pylint ve
4547make doctest test htmlcov # Doctests + unit tests + coverage (→ docs/docs/coverage/index.html)
4648make smoketest # End-to-end container testing
4749
48- # Testing individual files (activate env first )
49- . /home/cmihai/.venv/mcpgateway/bin/activate && pytest --cov-report=annotate tests/unit/mcpgateway/test_translate.py
50+ # Testing individual files (using uv environment manager )
51+ uv run pytest --cov-report=annotate tests/unit/mcpgateway/test_translate.py
5052```
5153
52- ## Performance Configuration
53-
54- ### Response Compression
55-
56- The gateway includes automatic response compression middleware (Brotli, Zstd, GZip) that reduces bandwidth usage by 30-70% for text-based responses (JSON, HTML, CSS, JS).
57-
58- ** Configuration** (` .env.example ` ):
59- ``` bash
60- # Enable/disable compression
61- COMPRESSION_ENABLED=true # Default: true
62-
63- # Minimum response size to compress (bytes)
64- COMPRESSION_MINIMUM_SIZE=500 # Default: 500 bytes
65-
66- # Compression quality levels
67- COMPRESSION_GZIP_LEVEL=6 # GZip: 1-9 (default: 6 balanced)
68- COMPRESSION_BROTLI_QUALITY=4 # Brotli: 0-11 (default: 4 balanced)
69- COMPRESSION_ZSTD_LEVEL=3 # Zstd: 1-22 (default: 3 fast)
70- ```
71-
72- ** Algorithm Priority** : Brotli (best) > Zstd (fast) > GZip (universal)
73-
74- ** Testing Compression** (requires running server):
75- ``` bash
76- # Start server
77- make dev
78-
79- # Test Brotli compression (best compression ratio)
80- curl -H " Accept-Encoding: br" http://localhost:8000/openapi.json -v 2>&1 | grep -i " content-encoding"
81- # Should show: content-encoding: br
82-
83- # Test GZip compression (universal fallback)
84- curl -H " Accept-Encoding: gzip" http://localhost:8000/openapi.json -v 2>&1 | grep -i " content-encoding"
85- # Should show: content-encoding: gzip
86-
87- # Test Zstd compression (fastest)
88- curl -H " Accept-Encoding: zstd" http://localhost:8000/openapi.json -v 2>&1 | grep -i " content-encoding"
89- # Should show: content-encoding: zstd
90-
91- # Verify Vary header (for cache compatibility)
92- curl -H " Accept-Encoding: br" http://localhost:8000/openapi.json -v 2>&1 | grep -i " vary"
93- # Should show: vary: Accept-Encoding
94-
95- # Test minimum size threshold (small responses not compressed)
96- curl -H " Accept-Encoding: br" http://localhost:8000/health -v 2>&1 | grep -i " content-encoding"
97- # Should NOT show content-encoding (response too small)
98-
99- # Measure compression ratio
100- curl -w " %{size_download}\n" -o /dev/null -s http://localhost:8000/openapi.json # Uncompressed
101- curl -H " Accept-Encoding: br" -w " %{size_download}\n" -o /dev/null -s http://localhost:8000/openapi.json # Brotli
102- ```
103-
104- ** Implementation Details** :
105- - Middleware location: ` mcpgateway/main.py:888-907 `
106- - Config settings: ` mcpgateway/config.py:379-384 `
107- - Only compresses responses > ` COMPRESSION_MINIMUM_SIZE ` bytes
108- - Automatically negotiates algorithm based on client ` Accept-Encoding ` header
109- - Adds ` Vary: Accept-Encoding ` header for proper cache behavior
110- - No client changes required (browsers handle decompression automatically)
111-
112- ### JSON Serialization (orjson)
113-
114- The gateway uses ** orjson** for high-performance JSON serialization, providing ** 5-6x faster serialization** and ** 1.5-2x faster deserialization** compared to Python's standard library.
115-
116- ** Performance Benefits** :
117- - ** Serialization** : 5-6x faster (550-623% speedup)
118- - ** Deserialization** : 1.5-2x faster (55-115% speedup)
119- - ** Output size** : 7% smaller (more compact JSON)
120- - ** Zero configuration** : Drop-in replacement, works automatically
121-
122- ** Why orjson?**
123- - Rust-based implementation for maximum performance
124- - RFC 8259 compliant (strict JSON specification)
125- - Native support for datetime, UUID, numpy arrays
126- - Used by major companies (Reddit, Stripe, etc.)
127-
128- ** Testing JSON Serialization** (requires running server):
129- ``` bash
130- # Start server
131- make dev
132-
133- # Benchmark JSON serialization performance
134- python scripts/benchmark_json_serialization.py
135-
136- # Test endpoint response times
137- time curl -s http://localhost:8000/tools > /dev/null
138-
139- # Verify orjson unit tests
140- pytest tests/unit/mcpgateway/utils/test_orjson_response.py -v --cov=mcpgateway.utils.orjson_response --cov-report=term-missing
141- ```
142-
143- ** Implementation Details** :
144- - Response class: ` mcpgateway/utils/orjson_response.py `
145- - FastAPI config: ` mcpgateway/main.py:408 ` (default_response_class=ORJSONResponse)
146- - Benchmark script: ` scripts/benchmark_json_serialization.py `
147- - Options: OPT_NON_STR_KEYS (allows int keys), OPT_SERIALIZE_NUMPY (numpy support)
148- - Datetime format: RFC 3339 (ISO 8601 with timezone)
149- - No client changes required (standard JSON, fully compatible)
150-
151- ** Performance Impact** :
152- - Large endpoints (GET /tools, GET /servers): 20-40% faster response time
153- - Bulk exports: 50-60% faster serialization
154- - API throughput: 15-30% higher requests/second
155- - CPU usage: 10-20% lower per request
156-
157- ** Documentation** : See ` docs/docs/testing/performance.md ` for detailed benchmarks
158-
15954## Architecture Overview
16055
16156### Technology Stack
16257- ** FastAPI** with ** Pydantic** validation and ** SQLAlchemy** ORM
58+ - FastAPI is build on Starlette ASGI framework
16359- ** HTMX + Alpine.js** for admin UI
16460- ** SQLite** default, ** PostgreSQL** support, ** Redis** for caching/federation
16561- ** Alembic** for database migrations
@@ -315,45 +211,6 @@ make security-scan # Trivy + Grype vulnerability scans
3152114. Implement hooks: pre/post request/response
3162125. Test: ` pytest tests/unit/mcpgateway/plugins/`
317213
318- # # A2A (Agent-to-Agent) Integration
319-
320- A2A agents are external AI agents (OpenAI, Anthropic, custom) integrated as tools within virtual servers.
321-
322- # ## Integration Workflow
323- 1. ** Register Agent** : Add via ` /a2a` API or Admin UI
324- 2. ** Associate with Server** : Include agent ID in virtual server' s `associated_a2a_agents`
325- 3. **Auto-Tool Creation**: Gateway creates tools for associated agents
326- 4. **Tool Invocation**: Standard tool invocation routes to A2A agents
327- 5. **Metrics Collection**: Comprehensive interaction tracking
328-
329- ### Configuration Effects
330- - `MCPGATEWAY_A2A_ENABLED=false`: Disables all A2A features (API 404, UI hidden)
331- - `MCPGATEWAY_A2A_METRICS_ENABLED=false`: Disables metrics collection only
332-
333- ## API Endpoints Overview
334-
335- ### Core MCP Protocol
336- - `POST /` - JSON-RPC endpoint for MCP protocol
337- - `GET /servers/{id}/sse` - Server-Sent Events transport
338- - `WS /servers/{id}/ws` - WebSocket transport
339- - `GET /.well-known/mcp` - Well-known URI handler
340-
341- ### Admin APIs (when `MCPGATEWAY_ADMIN_API_ENABLED=true`)
342- - `GET/POST /tools` - Tool management and invocation
343- - `GET/POST /resources` - Resource management
344- - `GET/POST /prompts` - Prompt templates
345- - `GET/POST /servers` - Virtual server management
346- - `GET/POST /gateways` - Peer gateway federation
347- - `GET/POST /a2a` - A2A agent management
348- - `GET/POST /tags` - Tag management system
349- - `POST /bulk-import` - Bulk import operations
350- - `GET /admin` - Admin UI dashboard
351-
352- ### Observability
353- - `GET /health` - Health check endpoint
354- - `GET /metrics` - Prometheus metrics (when enabled)
355- - `GET /openapi.json` - OpenAPI specification
356-
357214# # Development Guidelines
358215
359216# ## Git & Commit Standards
@@ -379,6 +236,7 @@ A2A agents are external AI agents (OpenAI, Anthropic, custom) integrated as tool
379236### CLI Tools Available
380237- `gh` for GitHub operations: `gh issue view 586`, `gh pr create`
381238- `make` for all build/test operations
239+ - uv for managing virtual environments
382240- Standard development tools: pytest, black, isort, etc.
383241
384242## Quick Reference
@@ -400,3 +258,49 @@ make autoflake isort black pre-commit
400258# Complete quality pipeline
401259make doctest test htmlcov smoketest lint-web flake8 bandit interrogate pylint verify
402260```
261+
262+ ## Documentation Quick Links
263+
264+ ### Getting Started
265+ - [Developer Onboarding](docs/docs/development/developer-onboarding.md) - Complete setup guide for new contributors
266+ - [Building & Testing](docs/docs/development/building.md) - Build system, testing workflows, coverage
267+ - [Configuration Reference](docs/docs/manage/configuration.md) - Environment variables and settings
268+
269+ ### API & Protocol Reference
270+ - [REST API Usage](docs/docs/manage/api-usage.md) - Comprehensive REST API guide with curl examples
271+ - [MCP JSON-RPC Guide](docs/docs/development/mcp-developer-guide-json-rpc.md) - Low-level MCP protocol implementation
272+ - [OpenAPI Interactive Docs](http://localhost:4444/docs) - Swagger UI (requires running server)
273+ - [OpenAPI Schema](http://localhost:4444/openapi.json) - Machine-readable API specification
274+
275+ ### Core Features
276+ - [A2A Agent Integration](docs/docs/using/agents/a2a.md) - Agent-to-Agent setup, authentication, monitoring
277+ - [Plugin Development](docs/docs/architecture/plugins.md) - Plugin framework, hooks, creating custom plugins
278+ - [Virtual Servers](docs/docs/manage/virtual-servers.md) - Creating and managing composite MCP servers
279+ - [Export/Import Reference](docs/docs/manage/export-import-reference.md) - Bulk operations and configuration migration
280+
281+ ### Architecture & Design
282+ - [Architecture Overview](docs/docs/architecture/README.md) - System design, components, data flow
283+ - [ADR Index](docs/docs/architecture/adr/README.md) - Architecture Decision Records
284+ - [Security Architecture](docs/docs/architecture/security.md) - Authentication, authorization, security features
285+ - [Multi-Transport Design](docs/docs/architecture/adr/003-expose-multi-transport-endpoints.md) - HTTP, WebSocket, SSE, STDIO
286+
287+ ### Operations & Management
288+ - [Logging & Monitoring](docs/docs/manage/logging.md) - Log configuration, rotation, analysis
289+ - [Performance Tuning](docs/docs/testing/performance.md) - Benchmarks, optimization, profiling
290+ - [Scaling & High Availability](docs/docs/manage/scaling.md) - Horizontal scaling, load balancing, federation
291+ - [Well-Known URIs](docs/docs/manage/well-known-uris.md) - Standard endpoints (robots.txt, security.txt)
292+
293+ ### Deployment
294+ - [Docker/Podman Deployment](docs/docs/deployment/docker.md) - Container setup and configuration
295+ - [Kubernetes Deployment](docs/docs/deployment/kubernetes.md) - K8s manifests and Helm charts
296+ - [Cloud Deployments](docs/docs/deployment/) - AWS, Azure, GCP, Fly.io guides
297+
298+ ### Testing & Quality
299+ - [Testing Guide](docs/docs/testing/basic.md) - Unit, integration, E2E, security testing
300+ - [Security Testing](docs/docs/testing/security.md) - Vulnerability scanning, penetration testing
301+ - [Documentation Standards](docs/docs/development/documentation.md) - Writing and maintaining docs
302+
303+ ### Integration Guides
304+ - [Agent Frameworks](docs/docs/using/agents/) - LangChain, CrewAI, LangGraph, AutoGen
305+ - [MCP Clients](docs/docs/using/clients/) - Claude Desktop, Continue, Zed, OpenWebUI
306+ - [MCP Servers](docs/docs/using/servers/) - Example server integrations
0 commit comments