Example Fixtures
+
+ Ready-to-use fixture examples for every mock type. Copy any example to get started
+ quickly, or use fixtures/examples/full-suite.json as a complete config
+ template.
+
LLM Fixtures
+ +Embeddings
+Matching on inputText and returning a vector.
{
+ "fixtures": [
+ {
+ "match": { "inputText": "hello world" },
+ "response": {
+ "embedding": [0.0023064255, -0.009327292, 0.015797347]
+ }
+ }
+ ]
+}
+ Streaming Physics
+
+ Realistic streaming timing with ttft, tps, and
+ jitter.
+
{
+ "fixtures": [
+ {
+ "match": { "userMessage": "explain gravity" },
+ "response": {
+ "content": "Gravity is a fundamental force of nature that attracts objects with mass toward one another. It keeps planets in orbit around the sun and holds galaxies together."
+ },
+ "streamingProfile": {
+ "ttft": 200,
+ "tps": 40,
+ "jitter": 0.1
+ }
+ }
+ ]
+}
+ Error Injection
+Rate limit error response for any message.
+{
+ "fixtures": [
+ {
+ "match": { "userMessage": ".*" },
+ "response": {
+ "error": {
+ "message": "Rate limit exceeded. Please retry after 30 seconds.",
+ "type": "rate_limit_error",
+ "code": "rate_limit_exceeded"
+ },
+ "status": 429
+ }
+ }
+ ]
+}
+ Sequential Responses
+Stateful multi-turn responses using sequenceIndex.
{
+ "fixtures": [
+ {
+ "match": { "userMessage": "tell me a joke", "sequenceIndex": 0 },
+ "response": {
+ "content": "Why did the programmer quit his job? Because he didn't get arrays!"
+ }
+ },
+ {
+ "match": { "userMessage": "tell me a joke", "sequenceIndex": 1 },
+ "response": { "content": "Why do Java developers wear glasses? Because they can't C#!" }
+ },
+ {
+ "match": { "userMessage": "tell me a joke", "sequenceIndex": 2 },
+ "response": {
+ "content": "A SQL query walks into a bar, sees two tables, and asks: 'Can I join you?'"
+ }
+ }
+ ]
+}
+ Protocol Configs
+ +MCP
+Tools and resources for the Model Context Protocol mock.
+{
+ "mcp": {
+ "tools": [
+ {
+ "name": "search",
+ "description": "Search the web",
+ "inputSchema": {
+ "type": "object",
+ "properties": {
+ "query": { "type": "string" }
+ },
+ "required": ["query"]
+ },
+ "result": "No results found for the given query."
+ }
+ ],
+ "resources": [
+ {
+ "uri": "file:///readme",
+ "name": "README",
+ "mimeType": "text/plain",
+ "text": "# My Project\n\nThis is the project README."
+ }
+ ]
+ }
+}
+ A2A
+Agent registration and streaming tasks for the Agent-to-Agent protocol mock.
+{
+ "a2a": {
+ "agents": [
+ {
+ "name": "research-agent",
+ "description": "An agent that researches topics and returns summaries",
+ "version": "1.0.0",
+ "skills": [
+ {
+ "id": "web-research",
+ "name": "Web Research",
+ "description": "Search the web and summarize findings",
+ "tags": ["research", "search"]
+ }
+ ],
+ "capabilities": { "streaming": true },
+ "messages": [
+ {
+ "pattern": "research",
+ "parts": [{ "text": "Here is a summary of my research findings on the topic." }]
+ }
+ ],
+ "streamingTasks": [
+ {
+ "pattern": "deep-research",
+ "events": [
+ { "type": "status", "state": "TASK_STATE_WORKING" },
+ {
+ "type": "artifact",
+ "name": "research-report",
+ "parts": [{ "text": "## Research Report\n\nFindings from deep research..." }],
+ "lastChunk": true
+ },
+ { "type": "status", "state": "TASK_STATE_COMPLETED" }
+ ],
+ "delayMs": 100
+ }
+ ]
+ }
+ ]
+ }
+}
+ AG-UI
+Text response and tool call event stream for the AG-UI protocol mock.
+{
+ "agui": {
+ "fixtures": [
+ {
+ "match": { "message": "hello" },
+ "text": "Hi! How can I help you today?"
+ },
+ {
+ "match": { "message": "search" },
+ "events": [
+ { "type": "RUN_STARTED", "threadId": "t1", "runId": "r1" },
+ { "type": "TOOL_CALL_START", "toolCallId": "tc1", "toolCallName": "web_search" },
+ {
+ "type": "TOOL_CALL_ARGS",
+ "toolCallId": "tc1",
+ "delta": "{\"query\": \"latest news\"}"
+ },
+ { "type": "TOOL_CALL_END", "toolCallId": "tc1" },
+ {
+ "type": "TEXT_MESSAGE_START",
+ "messageId": "m1",
+ "role": "assistant"
+ },
+ {
+ "type": "TEXT_MESSAGE_CONTENT",
+ "messageId": "m1",
+ "delta": "Here are the latest results..."
+ },
+ { "type": "TEXT_MESSAGE_END", "messageId": "m1" },
+ { "type": "RUN_FINISHED", "threadId": "t1", "runId": "r1" }
+ ]
+ }
+ ]
+ }
+}
+ Vector
+Collection with vectors and query results for the vector database mock.
+{
+ "vector": {
+ "collections": [
+ {
+ "name": "documents",
+ "dimension": 3,
+ "vectors": [
+ {
+ "id": "doc-1",
+ "values": [0.1, 0.2, 0.3],
+ "metadata": { "title": "Getting Started", "category": "tutorial" }
+ },
+ {
+ "id": "doc-2",
+ "values": [0.4, 0.5, 0.6],
+ "metadata": { "title": "API Reference", "category": "reference" }
+ }
+ ],
+ "queryResults": [
+ {
+ "id": "doc-1",
+ "score": 0.95,
+ "metadata": { "title": "Getting Started", "category": "tutorial" }
+ },
+ {
+ "id": "doc-2",
+ "score": 0.82,
+ "metadata": { "title": "API Reference", "category": "reference" }
+ }
+ ]
+ }
+ ]
+ }
+}
+ Testing & Operations
+ +Chaos Testing
+Configure drop, malformed, and disconnect rates for chaos testing.
+{
+ "llm": {
+ "fixtures": "fixtures/example-greeting.json",
+ "chaos": {
+ "dropRate": 0.1,
+ "malformedRate": 0.05,
+ "disconnectRate": 0.02
+ }
+ }
+}
+ Record & Replay
+Provider URLs for proxy mode to record live API traffic.
+{
+ "llm": {
+ "record": {
+ "providers": {
+ "openai": "https://api.openai.com/v1",
+ "anthropic": "https://api.anthropic.com"
+ },
+ "fixturePath": "./recorded-fixtures"
+ }
+ }
+}
+ Full Suite
+ +Complete Config
+A complete configuration running all mocks on one port.
+{
+ "port": 4000,
+ "host": "127.0.0.1",
+ "metrics": true,
+ "strict": true,
+
+ "llm": {
+ "fixtures": "fixtures/example-greeting.json",
+ "chaos": {
+ "dropRate": 0.01,
+ "malformedRate": 0.005,
+ "disconnectRate": 0.002
+ }
+ },
+
+ "mcp": {
+ "serverInfo": { "name": "full-suite-mcp", "version": "1.0.0" },
+ "tools": [
+ {
+ "name": "search",
+ "description": "Search the knowledge base",
+ "inputSchema": {
+ "type": "object",
+ "properties": {
+ "query": { "type": "string" },
+ "limit": { "type": "number" }
+ },
+ "required": ["query"]
+ },
+ "result": "Found 3 results for your query."
+ }
+ ],
+ "resources": [
+ {
+ "uri": "file:///config",
+ "name": "Configuration",
+ "mimeType": "application/json",
+ "text": "{\"version\": \"1.0\", \"environment\": \"test\"}"
+ }
+ ],
+ "prompts": [
+ {
+ "name": "summarize",
+ "description": "Summarize a document",
+ "arguments": [{ "name": "text", "description": "The text to summarize", "required": true }],
+ "result": {
+ "messages": [
+ {
+ "role": "assistant",
+ "content": { "type": "text", "text": "Here is a summary of the provided text." }
+ }
+ ]
+ }
+ }
+ ]
+ },
+
+ "a2a": {
+ "agents": [
+ {
+ "name": "assistant",
+ "description": "A general-purpose assistant agent",
+ "version": "1.0.0",
+ "skills": [{ "id": "qa", "name": "Q&A", "description": "Answer questions" }],
+ "capabilities": { "streaming": true },
+ "messages": [
+ {
+ "pattern": ".*",
+ "parts": [{ "text": "I can help you with that." }]
+ }
+ ]
+ }
+ ]
+ },
+
+ "agui": {
+ "fixtures": [
+ {
+ "match": { "message": "hello" },
+ "text": "Hello from the full-suite mock!"
+ },
+ {
+ "match": { "toolName": "get_data" },
+ "events": [
+ { "type": "RUN_STARTED", "threadId": "t1", "runId": "r1" },
+ { "type": "TOOL_CALL_START", "toolCallId": "tc1", "toolCallName": "get_data" },
+ { "type": "TOOL_CALL_ARGS", "toolCallId": "tc1", "delta": "{}" },
+ { "type": "TOOL_CALL_END", "toolCallId": "tc1" },
+ { "type": "RUN_FINISHED", "threadId": "t1", "runId": "r1" }
+ ]
+ }
+ ]
+ },
+
+ "vector": {
+ "collections": [
+ {
+ "name": "knowledge-base",
+ "dimension": 384,
+ "queryResults": [
+ {
+ "id": "kb-001",
+ "score": 0.97,
+ "metadata": { "source": "docs", "title": "Quick Start Guide" }
+ }
+ ]
+ }
+ ]
+ },
+
+ "services": {
+ "search": true,
+ "rerank": true,
+ "moderate": true
+ }
+}
+