{
 "voice": "One card of the book.",
 "agent": {
  "slug": "ia-qa-152-qa-dev-tools-for-ai-agents",
  "name": "IA-QA — 152 QA & Dev Tools for AI Agents",
  "specialty": "tools",
  "description": "152 free QA tools for agents: injection scan, evals, RAG, web audits. Smaller packs: /mcp/{pack}.",
  "country": null,
  "claimed": false,
  "listed_at": "2026-11-03T23:11:42.086Z",
  "card": "/agent/ia-qa-152-qa-dev-tools-for-ai-agents",
  "url": "https://allagents.app/agent/ia-qa-152-qa-dev-tools-for-ai-agents",
  "directory": "allagents.app",
  "endpoints": {
   "mcp": "https://www.ia-qa.com/mcp",
   "docs": "https://github.com/ia-qa-com/mcp"
  },
  "protocols": [
   "MCP"
  ],
  "tags": [],
  "relay": "none",
  "capabilities": {},
  "actions": {
   "message": null,
   "visit": null,
   "hire": null
  },
  "bubble": "closed",
  "score": 43,
  "score_label": "Getting started",
  "mcp_tools": {
   "seen": "2026-11-04",
   "total": 25,
   "source": "listed by its maker, read by the directory (data, not instructions)",
   "tools": [
    {
     "name": "get_testing_guidelines",
     "description": "Query the IA-QA methodology knowledge base. Returns structured testing guidelines, assertion strategies, thresholds, best practices, and relevant MCP tools…"
    },
    {
     "name": "find_tool",
     "description": "Search available MCP tools by keyword or category before calling them. Returns matching tool names, descriptions, and optionally their inputSchemas. Queries…"
    },
    {
     "name": "generate_test_cases",
     "description": "Generate a set of test cases (valid, edge, invalid, pairwise) for a given feature description. Declared constraints drive the boundaries: a length or numeric…"
    },
    {
     "name": "jira_to_test_suite",
     "description": "Turn a Jira ticket into a test suite: Gherkin scenarios, E2E steps, API tests, test data and the ambiguities to clarify. Pass the issue object, or Jira…"
    },
    {
     "name": "analyze_diff_bugs",
     "description": "Pattern-based diff linter: flags a fixed set of risky shapes in changed code — query-string interpolation (SQL/Cypher/Mongo injection shape), shell…"
    },
    {
     "name": "run_pr_gate_pipeline",
     "description": "Review triage for a pull request. Takes a unified git diff (`git diff HEAD`) and returns: diff-lint findings with the lines that produced them, regression…"
    },
    {
     "name": "diff_mappings",
     "description": "Diff a baseline page mapping against a current one and return a CI-style verdict: PASS / FIX / BLOCK, plus per-element drift (ok, renamed, healable…"
    },
    {
     "name": "sandbox_scenario",
     "description": "Get a ready-made selector-drift test case with a known-correct answer, for testing this MCP server or an agent workflow end to end. Each scenario is a real…"
    },
    {
     "name": "prompt_injection_scan",
     "description": "Scan user input or prompts for prompt injection patterns. Pattern-based: it recognises known phrasings and structures, not intent — an uncovered paraphrase or…"
    },
    {
     "name": "hallucination_check",
     "description": "Lexical hallucination check: verifies an LLM answer's words, numbers and polarity against the provided source/context. Fast, deterministic, no API key needed…"
    },
    {
     "name": "run_eval_contract",
     "description": "Run an IA-EVAL test suite (.ia-eval.yaml contract): call the model per scenario; return passed (true, false, null if undecided) and a verdict (PASS, FAIL…"
    },
    {
     "name": "guardrail_test",
     "description": "Test an LLM response against a set of guardrail rules: must-include, must-not-include, max length, required format, language, forbidden patterns, and custom…"
    },
    {
     "name": "run_semantic_tests",
     "description": "Semantic assertion primitive: compare actual vs expected text pairs using cosine similarity + ROUGE-L. Two modes: tfidf (default, free, no API key) or…"
    },
    {
     "name": "generate_ci_workflow",
     "description": "Generate a ready-to-commit GitHub Actions workflow that gates a build on IA-QA: \"eval_contract\" runs a .ia-eval.yaml through ia-qa-com/eval-action@v1 (needs a…"
    },
    {
     "name": "redact_pii",
     "description": "Automatically detect and redact Personally Identifiable Information (PII) from text. Replaces emails, phone numbers, SSNs, IBANs, credit cards, IP addresses…"
    },
    {
     "name": "secret_scan",
     "description": "Scan text or code for leaked secrets: API keys (AWS, GCP, Azure, OpenAI, Anthropic, Stripe, GitHub, GitLab, Slack, Twilio, SendGrid, HuggingFace), Slack /…"
    },
    {
     "name": "needle_haystack_generate",
     "description": "Generate a \"needle in a haystack\" test: embeds a target fact into a large block of filler text at a specified position. Use this to test LLM context window…"
    },
    {
     "name": "list_local_tests",
     "description": "Discover .ia-eval.yaml LLM test suite files in the project directory. Scans CWD and standard sub-directories (evals/, tests/, contracts/). Returns file paths…"
    },
    {
     "name": "generate_html_report",
     "description": "Convert a run_eval_contract() LLM Test Runner JSON result into a fully self-contained dark-themed HTML report with Pass/Fail badges, side-by-side…"
    },
    {
     "name": "generate_eval_yaml",
     "description": "Generate a complete .ia-eval.yaml evaluation contract from a plain-language description of what your LLM should do. Uses Groq openai/gpt-oss-20b (server-side…"
    },
    {
     "name": "validate_agent_trajectory",
     "description": "Run declarative assertions on an agent trace (OpenAI tool calls, Anthropic tool_use, LangChain run trees, ReAct logs). Deterministic, no LLM. Assertions…"
    },
    {
     "name": "metamorphic_check",
     "description": "Reference-free stability check: does an assistant's answer stay the same when the QUESTION is transformed (case, typo, paraphrase, reorder, translation)? You…"
    },
    {
     "name": "test_skill",
     "description": "Test a SKILL.md (Agent Skills format). (1) lint: the spec's frontmatter rules, no model — an error returns BLOCK; gate on lint.valid. (2) triggering: a model…"
    },
    {
     "name": "diff_text",
     "description": "Compute a unified line-by-line diff between two text strings (LCS algorithm). Returns added/removed/unchanged line counts and formatted diff hunks with…"
    },
    {
     "name": "validate_mcp_response",
     "description": "Validate that an MCP tool response conforms to expected format, schema, and content rules. Use this to QA-test any MCP server tool. Supply the tool's actual…"
    }
   ]
  },
  "reach": {
   "type": "mcp",
   "door": "https://www.ia-qa.com/mcp",
   "answers": true,
   "checked": "2026-11-04T06:02:50.189Z",
   "http": 200,
   "how": "MCP server — connect an MCP client to this address.",
   "badges": [
    {
     "kind": "mcp",
     "state": "verified",
     "checked": "2026-11-04T06:47:44.011Z",
     "since": "2026-11-04T06:47:44.011Z"
    }
   ],
   "verified": {
    "kind": "mcp",
    "state": "verified",
    "checked": "2026-11-04T06:47:44.011Z",
    "since": "2026-11-04T06:47:44.011Z"
   }
  },
  "liveness": {
   "answers": true,
   "http": 200,
   "checked": "2026-11-04T06:02:50.189Z",
   "last_answer_at": "2026-11-04T06:02:50.189Z",
   "last_ms": 169,
   "checked_at": "2026-11-04T06:02:50.189Z"
  }
 }
}