Decide Test MCP
Claude-driven testing workflow that generates test cases from decision tables, provides intelligent guidance for test planning, and generates executable test code.
Features
- 🤖 Claude-Driven Test Planning: Works with Claude via MCP for intelligent test guidance
- 📊 Decision Table Parsing: Supports CSV, JSON, and Markdown formats
- 🎭 Playwright Integration: Generates executable Playwright tests
- 🔌 API Testing: Creates API test suites with proper authentication
- 🔧 MCP Server: Integrates seamlessly with Claude Code
- 📝 TypeScript Support: Generates type-safe test code
- 💰 Zero Cost: No external API keys required
Installation
As MCP Server (for Claude Code)
- Build the package:
pnpm install
pnpm build
- Add to Claude Code MCP config (
~/.claude-code/mcp.json):
{
"mcpServers": {
"decide-test": {
"command": "node",
"args": ["/absolute/path/to/dist/index.js"]
}
}
}
- Restart Claude Code
As Standalone Package
pnpm install
pnpm build
Usage
Via Claude Code
Once the MCP server is installed, you can use it in Claude Code:
Generate test cases from the decision table at docs/examples/decision-tables/login-decision-table.csv
Claude Code will:
- Parse the decision table
- Explore each test case with AI agents
- Generate Playwright test code
- Save to
tests/e2e/generated/
Programmatic Usage
import {
decisionTableParser,
WebAgent,
testCodeGenerator
} from 'decide-test-mcp';
// 1. Parse decision table
const table = await decisionTableParser.parse(
'docs/examples/decision-tables/login-decision-table.csv'
);
// 2. Get guidance for test planning (you provide the steps)
const webAgent = new WebAgent();
const testSteps = [];
for (const testCase of table.test_cases) {
// Get guidance (example steps and recommendations)
const guidance = webAgent.getExplorationGuidance({
url: 'http://localhost:3000',
test_case: testCase,
objective: testCase.name,
});
console.log(guidance.suggested_approach);
console.log('Example steps:', guidance.example_steps);
// You define the actual test steps based on guidance
const steps = [
{ action: 'navigate', target: 'http://localhost:3000/login', description: 'Go to login' },
{ action: 'fill', selector: 'input[name="email"]', value: 'test@example.com', description: 'Enter email' },
{ action: 'click', selector: 'button[type="submit"]', description: 'Click login' },
];
testSteps.push({
test_case_id: testCase.id,
type: 'web',
steps,
});
}
// 3. Generate test code
const generated = await testCodeGenerator.generate({
test_cases: table.test_cases,
steps: testSteps,
framework: 'playwright',
output_path: 'tests/e2e/generated/',
language: 'typescript',
});
console.log(`Generated ${generated.files_generated.length} test files`);
MCP Tools
1. parse_decision_table
Parse a decision table and generate test case specifications.
Example:
{
"table_path": "docs/examples/decision-tables/login-decision-table.csv",
"format": "csv"
}
2. get_web_test_guidance
Get guidance and example steps for planning web tests. Claude uses this to understand what test steps to create.
Example:
{
"url": "http://localhost:3000",
"test_case": {...},
"objective": "Login with valid credentials"
}
Returns: Suggested approach, example steps, and guidance for Claude to plan the actual test steps.
3. execute_web_test
Execute predefined web test steps using Playwright.
Example:
{
"url": "http://localhost:3000",
"test_case": {...},
"objective": "Login with valid credentials",
"steps": [
{ "action": "navigate", "target": "http://localhost:3000/login", "description": "Go to login" },
{ "action": "fill", "selector": "input[name='email']", "value": "test@example.com", "description": "Enter email" },
{ "action": "click", "selector": "button[type='submit']", "description": "Click login" }
],
"headless": true,
"screenshot_dir": "./screenshots"
}
4. get_api_test_guidance
Get guidance and example steps for planning API tests.
Example:
{
"base_url": "http://localhost:3000/api",
"test_case": {...},
"objective": "Create trip via API",
"auth": {
"type": "bearer",
"credentials": {"token": "..."}
}
}
Returns: Suggested approach, example API steps, and guidance for Claude to plan the actual API test steps.
5. execute_api_test
Execute predefined API test steps.
Example:
{
"base_url": "http://localhost:3000/api",
"test_case": {...},
"objective": "Create trip via API",
"steps": [
{ "method": "POST", "endpoint": "/auth/login", "body": {...}, "expected_status": 200 },
{ "method": "POST", "endpoint": "/trips", "body": {...}, "expected_status": 201 }
],
"auth": {
"type": "bearer"
}
}
6. generate_test_code
Generate executable test code from test cases and steps.
Example:
{
"test_cases": [...],
"steps": [...],
"framework": "playwright",
"output_path": "tests/e2e/generated/",
"language": "typescript"
}
7. run_generated_tests
Execute generated tests and return results.
Example:
{
"test_path": "tests/e2e/generated/login.spec.ts",
"framework": "playwright",
"reporter": "list"
}
Decision Table Formats
CSV Format
Email,Password,Action,Expected Result,Priority
valid@example.com,ValidPass123,Click Login,Login successful,high
invalid@example.com,ValidPass123,Click Login,Show error message,medium
JSON Format
{
"feature": "User Login",
"rules": [
{
"id": "TC001",
"conditions": {
"email": "valid",
"password": "valid"
},
"actions": ["click_login"],
"expected": ["redirect_to_dashboard"]
}
]
}
Markdown Format
# User Login
| Email | Password | Action | Expected Result |
|-------|----------|--------|----------------|
| valid | valid | Click Login | Login successful |
| invalid | valid | Click Login | Show error |
Examples
See docs/examples/decision-tables/ for complete examples:
login-decision-table.csv- User authentication teststrip-creation-decision-table.json- Trip creation with tier limitscollaboration-decision-table.md- Collaboration & permissions
Development
# Install dependencies
pnpm install
# Build
pnpm build
# Run in development mode
pnpm dev
# Run tests
pnpm test
Architecture
┌─────────────────────────────────────┐
│ MCP Server │
│ (Model Context Protocol) │
└─────────────────────────────────────┘
│
┌─────────┼─────────┐
│ │ │
▼ ▼ ▼
┌────────┐ ┌──────┐ ┌──────────┐
│ Parser │ │Agents│ │Generator │
└────────┘ └──────┘ └──────────┘
Troubleshooting
MCP Server Not Appearing in Claude Code
- Check MCP config path is correct
- Verify Node.js is accessible
- Check server logs:
~/.claude-code/logs/mcp-ai-testing.log - Restart Claude Code
Test Execution Failing
- Check application is running at specified URL
- Review test steps for correctness
- Try with
headless: falseto see browser in action - Check selector specificity
Test Generation Issues
- Ensure test cases and steps are complete
- Check output directory permissions
- Review generated code for syntax errors
License
MIT
Support
For issues and questions:
- Documentation:
docs/AI_TESTING_WORKFLOW.md