Unified mock server for AI-Protocol runtimes - HTTP provider and MCP JSON-RPC mocking
Project description
ai-protocol-mock
Unified mock server for AI-Protocol runtimes. Provides HTTP provider mock (OpenAI and Anthropic formats) and MCP JSON-RPC mock for testing ai-lib-python, ai-lib-rust, and other runtimes.
Features
- Manifest-driven HTTP mock: Generates responses in OpenAI or Anthropic format based on provider manifests
- STT / TTS / Rerank mock: Simulates speech-to-text, text-to-speech, and document reranking endpoints (OpenAI/Cohere compliant)
- MCP JSON-RPC mock: Implements
tools/list,tools/call,capabilities,initialize - Configurable: Response delay, error rate, mock content via environment variables
- Docker: One-command startup with
docker-compose up
Quick Start
# Install and run
pip install -e .
python scripts/sync_manifests.py --force # Sync manifests from ai-protocol
uvicorn ai_protocol_mock.main:app --host 0.0.0.0 --port 4010
Or with Docker:
docker-compose up -d
Configuration
| Variable | Default | Description |
|---|---|---|
| HTTP_PORT | 4010 | Port for HTTP and MCP (MCP at /mcp) |
| MANIFEST_DIR | manifests | Directory for synced manifests |
| MANIFEST_SYNC_URL | https://raw.githubusercontent.com/hiddenpath/ai-protocol/main/ | Source for manifest sync |
| RESPONSE_DELAY | 0 | Delay in seconds before responding |
| ERROR_RATE | 0 | Probability (0-1) of returning 429/500/503 |
| MOCK_CONTENT | Mock response from ai-protocol-mock | Default response content |
Endpoints
POST /v1/chat/completions- OpenAI-format chatPOST /v1/messages- Anthropic-format chatPOST /v1/audio/transcriptions- STT (OpenAI Whisper format), returns{"text": "..."}POST /v1/audio/speech- TTS (OpenAI format), returnsaudio/mpegbytesPOST /v2/rerank- Rerank (Cohere v2 format), request{query, documents, top_n}, returns{results, id, meta}POST /mcp- MCP JSON-RPC (tools/list,tools/call,capabilities,initialize)GET /health- Health checkGET /status- Status with manifest sync metadataGET /providers- Provider contracts from manifests (provider_id, api_style, chat_path)
Using with ai-lib-python
import os
os.environ["MOCK_HTTP_URL"] = "http://localhost:4010"
from ai_lib_python.client import AiClient
from ai_lib_python.types.message import Message
client = await AiClient.create(
"openai/gpt-4o",
api_key="sk-test",
base_url="http://localhost:4010"
)
response = await client.chat().messages([Message.user("Hi")]).execute()
print(response.content)
Or run tests with mock:
MOCK_HTTP_URL=http://localhost:4010 MOCK_MCP_URL=http://localhost:4010/mcp pytest tests/ -v
Using with ai-lib-rust
export MOCK_HTTP_URL=http://localhost:4010
cargo run --example basic_usage
Or run mock integration tests:
MOCK_HTTP_URL=http://localhost:4010 cargo test -- --ignored --nocapture
Or in code:
let client = AiClientBuilder::new()
.base_url_override("http://localhost:4010")
.build("openai/gpt-4o")
.await?;
Manifest Sync
Sync manifests from the ai-protocol repository:
python scripts/sync_manifests.py [--force] [--url URL] [--tag REF]
--force- Overwrite existing files--tag REF- Pin to a specific ai-protocol ref (e.g.v0.7.1,main)--url URL- Custom base URL (default: ai-protocol main)
Run before starting the server to ensure manifests are up to date. Docker Compose runs sync automatically on startup. A GitHub Action runs sync daily to validate the script.
Development
pip install -e ".[dev]"
pytest tests/ -v
ruff check src tests scripts
License
MIT OR Apache-2.0
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ai_protocol_mock-0.1.4.tar.gz.
File metadata
- Download URL: ai_protocol_mock-0.1.4.tar.gz
- Upload date:
- Size: 14.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9c2bc8b37347242b033d5004bbbc0e466318a2ec6283f817ad144f9f4fe1f6bc
|
|
| MD5 |
e5a4c6fc29cdd476b86a5af6fdc90723
|
|
| BLAKE2b-256 |
1d1cb7e0c34ef90f26a56f1f24501d86d4576a639590303423bdfd079380cc22
|
File details
Details for the file ai_protocol_mock-0.1.4-py3-none-any.whl.
File metadata
- Download URL: ai_protocol_mock-0.1.4-py3-none-any.whl
- Upload date:
- Size: 15.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8dc15cdf353915f17535b242272a9d788a416bffa8c478700f0038341e9fa42f
|
|
| MD5 |
a1881860aa4c51b25ee8049731b6957e
|
|
| BLAKE2b-256 |
ac8ca29af2330d62061c97711fb3bb7106bed32f66cba60ddc7ae5ca64734d13
|