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/examples/llm/embeddings.json json
{
  "fixtures": [
    {
      "match": { "inputText": "hello world" },
      "response": {
        "embedding": [0.0023064255, -0.009327292, 0.015797347]
      }
    }
  ]
}

Streaming Physics

Realistic streaming timing with ttft, tps, and jitter.

fixtures/examples/llm/streaming-physics.json json
{
  "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/examples/llm/error-injection.json json
{
  "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/examples/llm/sequential-responses.json json
{
  "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.

fixtures/examples/mcp/mcp-config.json json
{
  "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.

fixtures/examples/a2a/a2a-config.json json
{
  "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.

fixtures/examples/agui/agui-text-response.json json
{
  "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.

fixtures/examples/vector/vector-config.json json
{
  "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.

fixtures/examples/chaos/chaos-config.json json
{
  "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.

fixtures/examples/record-replay/record-config.json json
{
  "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.

fixtures/examples/full-suite.json json
{
  "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
  }
}