=== NEW SERVERS ADDED (7) === - servers/closebot — 119 tools, 14 modules, 4,656 lines TS (Stage 7) - servers/google-console — Google Search Console MCP (Stage 7) - servers/meta-ads — Meta/Facebook Ads MCP (Stage 8) - servers/twilio — Twilio communications MCP (Stage 8) - servers/competitor-research — Competitive intel MCP (Stage 6) - servers/n8n-apps — n8n workflow MCP apps (Stage 6) - servers/reonomy — Commercial real estate MCP (Stage 1) === FACTORY INFRASTRUCTURE ADDED === - infra/factory-tools — mcp-jest, mcp-validator, mcp-add, MCP Inspector - 60 test configs, 702 auto-generated test cases - All 30 servers score 100/100 protocol compliance - infra/command-center — Pipeline state, operator playbook, dashboard config - infra/factory-reviews — Automated eval reports === DOCS ADDED === - docs/MCP-FACTORY.md — Factory overview - docs/reports/ — 5 pipeline evaluation reports - docs/research/ — Browser MCP research === RULES ESTABLISHED === - CONTRIBUTING.md — All MCP work MUST go in this repo - README.md — Full inventory of 37 servers + infra docs - .gitignore — Updated for Python venvs TOTAL: 37 MCP servers + full factory pipeline in one repo. This is now the single source of truth for all MCP work.
Copyright (c) 2025 Scott Wilcox
SPDX-License-Identifier: AGPL-3.0-or-later
MCP Protocol Versions
This directory contains the implementation of different MCP protocol versions for the testing framework. Each version implements the specific requirements and capabilities of that protocol version.
Components
- base.py: Base protocol class defining common functionality across versions
- v2024_11_05.py: Implementation of the 2024-11-05 protocol version
- v2025_03_26.py: Implementation of the 2025-03-26 protocol version
Protocol Interface
Each protocol version extends the base MCPProtocol class, which defines a common interface for interacting with different protocol versions:
class MCPProtocol:
def get_version(self):
"""Get the protocol version string."""
pass
def get_initialize_params(self):
"""Get parameters for the initialize request."""
pass
def check_initialization_response(self, response):
"""Validate an initialization response."""
pass
def validate_tool_list(self, tools_list):
"""Validate a tools list response."""
pass
def get_spec_requirements(self):
"""Get a list of specification requirements for this version."""
pass
Protocol Version Features
2024-11-05 (Initial Version)
The initial protocol version with:
- Basic synchronous tool calls
- Simple initialization/shutdown flow
- Base tool requirements
2025-03-26 (Latest Version)
The updated protocol version adding:
- Asynchronous tool support with toolCallId and status
- Session management via sessionId
- Resources API capabilities
- Enhanced error handling
Adding New Protocol Versions
To add a new protocol version:
- Create a new file (e.g.,
v2026_01_15.py) - Extend the
MCPProtocolbase class - Implement all required methods
- Add specific tests for new features in that version
- Update
__init__.pyto expose the new version
Example of a new protocol version implementation:
from .base import MCPProtocol
class MCP2026_01_15Protocol(MCPProtocol):
def get_version(self):
return "2026-01-15"
def get_initialize_params(self):
params = {
"protocolVersion": self.get_version(),
"clientInfo": {
"name": "MCP Testing Framework",
"version": "1.0.0"
},
"capabilities": {
"tools": {
"asyncSupported": True
},
"resources": True,
"newFeature": True # New capability introduced in this version
}
}
return params
# ... other method implementations ...
Usage Example
from mcp_testing.protocols import get_protocol
from mcp_testing.transports import HTTPTransport
# Get the protocol implementation for a specific version
protocol = get_protocol("2025-03-26")
# Create a transport
transport = HTTPTransport("http://localhost:9000/mcp")
# Use the protocol with the transport
initialize_params = protocol.get_initialize_params()
success, response = transport.initialize(initialize_params)
# Validate the response according to protocol requirements
if protocol.check_initialization_response(response):
print("Server successfully initialized with protocol version", protocol.get_version())