Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

IA-QA — 152 QA & Dev Tools for AI Agents

REMOTE · WWW.IA-QA.COM

152 free QA tools for agents: injection scan, evals, RAG, web audits. Smaller packs: /mcp/{pack}.

Available components

+2 this week 89 Trust /100

Last scanned (2 hours ago)

Scores higher than 97% of remote servers

Reachable. Last reached 5 Nov 2026.

Category Testing and QA

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →

Endpoint Security83
Transport & Reachability100
Schema Quality & AI Usability86
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 22973 tokens (~151/item across 152 items; 152 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Tools include usage examples.Pass
Stability & Change Management100
  • Stability check failed: schema churn in the 30 days we've observed: 0 tool removals, 1 breaking changes, 0 auth/transport breaks, 0 additions. See how to fix → Fail
Tool Coverage99
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 97% of tool parameters carry a description.Partial
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety75
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • 0 of 5 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "run_eval_contract" implies "eval" and declares readOnlyHint instead, contradicting what its own name says it does. See how to fix → Fail
  • An AI judge read all 153 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a current MCP spec version (2026-07-28).Pass
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 5 Nov 26 0
    • The server rewrote its instructions, which are the text every model session reads security
    • Tool “cors_test” rewrote its description, which is the text the model reads security
    • Tool “mcp_server_evaluate” rewrote its description, which is the text the model reads security
    • MCP protocol: Implements a current MCP spec version (2026-07-28). functional
    • MCP protocol version: 2025-11-25 → 2026-07-28 functional
    • “mcp_server_evaluate” added an optional parameter “test_tool_args” cosmetic
    • “mcp_server_evaluate” reworded the description of “test_tool_name” cosmetic
  • 4 Nov 26 0
    • Tool “find_tool” rewrote its description, which is the text the model reads security
    • Tool “rate_tool” rewrote its description, which is the text the model reads security
    • Tool “run_eval_contract” rewrote its description, which is the text the model reads security
    • “run_eval_contract” reworded the description of “inline_contract” cosmetic
  • 3 Nov 26 0
    • Tool “compare_models” rewrote its description, which is the text the model reads security
    • Tool “estimate_llm_cost” rewrote its description, which is the text the model reads security
    • Tool “llm_fit_finder” rewrote its description, which is the text the model reads security
    • Tool “llm_generate” rewrote its description, which is the text the model reads security
    • Tool “token_budget_calculator” rewrote its description, which is the text the model reads security
    • “compare_models” reworded the description of “models” cosmetic
    • “context_window_check” reworded the description of “model” cosmetic
    • “llm_fit_finder” reworded the description of “top_n” cosmetic
    • “llm_fit_finder” reworded the description of “use_case” cosmetic
    • “llm_generate” reworded the description of “model” cosmetic
    • “shield_analyze” reworded the description of “model” cosmetic
    • “token_budget_calculator” reworded the description of “model” cosmetic
    • “compare_models” dropped the optional parameter “use_case” cosmetic
  • 1 Nov 26 +2
    • Stability: pass → fail ▼ security
    • A breaking change shipped without a version bump: still 1.0.0 ▼ security
    • The server rewrote its instructions, which are the text every model session reads security
    • Tool “detect_secrets” rewrote its description, which is the text the model reads security
    • Tool “generate_ci_workflow” rewrote its description, which is the text the model reads security
    • Tool “jira_to_test_suite” rewrote its description, which is the text the model reads security
    • Tool “mcp_schema_lint” rewrote its description, which is the text the model reads security
    • Tool “metamorphic_check” rewrote its description, which is the text the model reads security
    • Tool “multimodal_eval_guide” rewrote its description, which is the text the model reads security
    • Tool “prompt_injection_scan” rewrote its description, which is the text the model reads security
    • Tool “rerank_evaluate” rewrote its description, which is the text the model reads security
    • Tool “run_eval_contract” rewrote its description, which is the text the model reads security
    • Tool “run_vlm_test_suite” rewrote its description, which is the text the model reads security
    • Tool “run_vlm_test_suite_batch” rewrote its description, which is the text the model reads security
    • Tool “secret_scan” rewrote its description, which is the text the model reads security
    • Tool “shield_analyze” rewrote its description, which is the text the model reads security
    • Tool “test_skill” rewrote its description, which is the text the model reads security
    • Tool “validate_agent_trajectory” rewrote its description, which is the text the model reads security
    • “secret_scan” changed the type of “input”: string → string|array ▼ functional
    • Schema quality: fail → pass ▲ functional
    • “hallucination_check” added an optional parameter “cases” cosmetic
    • “json_schema_generate” added an optional parameter “samples” cosmetic
    • “generate_ci_workflow” reworded the description of “app_base_url” cosmetic
    • “generate_ci_workflow” reworded the description of “app_start_command” cosmetic
    • “generate_ci_workflow” reworded the description of “cli_tools” cosmetic
    • “generate_ci_workflow” reworded the description of “contract_path” cosmetic
    • “generate_ci_workflow” reworded the description of “cron” cosmetic
    • “generate_ci_workflow” reworded the description of “fail_on_fail” cosmetic
    • “generate_ci_workflow” reworded the description of “gate” cosmetic
    • “generate_ci_workflow” reworded the description of “min_score” cosmetic
    • “generate_ci_workflow” reworded the description of “node_version” cosmetic
    • “generate_ci_workflow” reworded the description of “provider” cosmetic
    • “generate_ci_workflow” reworded the description of “triggers” cosmetic
    • “generate_ci_workflow” reworded the description of “workflow_name” cosmetic
    • “hallucination_check” reworded the description of “answer” cosmetic
    • “hallucination_check” reworded the description of “context” cosmetic
    • “hallucination_check” reworded the description of “strict” cosmetic
    • “jira_to_test_suite” reworded the description of “api_key” cosmetic
    • “jira_to_test_suite” reworded the description of “confluence_pages” cosmetic
    • “jira_to_test_suite” reworded the description of “issue” cosmetic
    • “jira_to_test_suite” reworded the description of “issue_key” cosmetic
    • “jira_to_test_suite” reworded the description of “jira_base_url” cosmetic
    • “jira_to_test_suite” reworded the description of “jira_email” cosmetic
    • “jira_to_test_suite” reworded the description of “jira_token” cosmetic
    • “jira_to_test_suite” reworded the description of “max_tokens” cosmetic
    • “jira_to_test_suite” reworded the description of “model” cosmetic
    • “json_schema_generate” reworded the description of “required_all” cosmetic
    • “metamorphic_check” reworded the description of “api_key” cosmetic
    • “metamorphic_check” reworded the description of “base” cosmetic
    • “metamorphic_check” reworded the description of “baseline_guard” cosmetic
    • “metamorphic_check” reworded the description of “mode” cosmetic
    • “metamorphic_check” reworded the description of “require_all” cosmetic
    • “metamorphic_check” reworded the description of “thresholds” cosmetic
    • “metamorphic_check” reworded the description of “variants” cosmetic
    • “multimodal_eval_guide” reworded the description of “action” cosmetic
    • “multimodal_eval_guide” reworded the description of “api_key” cosmetic
    • “multimodal_eval_guide” reworded the description of “clip” cosmetic
    • “multimodal_eval_guide” reworded the description of “fid” cosmetic
    • “multimodal_eval_guide” reworded the description of “generated_images” cosmetic
    • “multimodal_eval_guide” reworded the description of “image_base64” cosmetic
    • “multimodal_eval_guide” reworded the description of “image_mime_type” cosmetic
    • “multimodal_eval_guide” reworded the description of “image_url” cosmetic
    • “multimodal_eval_guide” reworded the description of “metric” cosmetic
    • “multimodal_eval_guide” reworded the description of “model” cosmetic
    • “multimodal_eval_guide” reworded the description of “real_images” cosmetic
    • “multimodal_eval_guide” reworded the description of “score” cosmetic
    • “multimodal_eval_guide” reworded the description of “system_prompt” cosmetic
    • “multimodal_eval_guide” reworded the description of “test_cases” cosmetic
    • “multimodal_eval_guide” reworded the description of “text” cosmetic
    • “multimodal_eval_guide” reworded the description of “vqa” cosmetic
    • “rerank_evaluate” reworded the description of “api_key” cosmetic
    • “rerank_evaluate” reworded the description of “passages” cosmetic
    • “rerank_evaluate” reworded the description of “query” cosmetic
    • “rerank_evaluate” reworded the description of “threshold” cosmetic
    • “rerank_evaluate” reworded the description of “top_k” cosmetic
    • “response_quality_score” reworded the description of “expected_keywords” cosmetic
    • “run_eval_contract” reworded the description of “api_keys” cosmetic
    • “run_eval_contract” reworded the description of “contract_path” cosmetic
    • “run_eval_contract” reworded the description of “inline_contract” cosmetic
    • “run_vlm_test_suite” reworded the description of “api_key” cosmetic
    • “run_vlm_test_suite” reworded the description of “image_base64” cosmetic
    • “run_vlm_test_suite” reworded the description of “image_mime_type” cosmetic
    • “run_vlm_test_suite” reworded the description of “image_url” cosmetic
    • “run_vlm_test_suite” reworded the description of “model” cosmetic
    • “run_vlm_test_suite” reworded the description of “system_prompt” cosmetic
    • “run_vlm_test_suite” reworded the description of “test_cases” cosmetic
    • “run_vlm_test_suite” reworded the description of “threshold” cosmetic
    • “run_vlm_test_suite_batch” reworded the description of “api_keys” cosmetic
    • “run_vlm_test_suite_batch” reworded the description of “image_base64” cosmetic
    • “run_vlm_test_suite_batch” reworded the description of “image_mime_type” cosmetic
    • “run_vlm_test_suite_batch” reworded the description of “image_url” cosmetic
    • “run_vlm_test_suite_batch” reworded the description of “models” cosmetic
    • “run_vlm_test_suite_batch” reworded the description of “system_prompt” cosmetic
    • “run_vlm_test_suite_batch” reworded the description of “test_cases” cosmetic
    • “run_vlm_test_suite_batch” reworded the description of “threshold” cosmetic
    • “secret_scan” reworded the description of “input” cosmetic
    • “secret_scan” reworded the description of “types” cosmetic
    • “shield_analyze” reworded the description of “model” cosmetic
    • “shield_analyze” reworded the description of “prompt” cosmetic
    • “shield_analyze” reworded the description of “response” cosmetic
    • “shield_analyze” reworded the description of “rules” cosmetic
    • “shield_analyze” reworded the description of “source” cosmetic
    • “test_skill” reworded the description of “api_key” cosmetic
    • “test_skill” reworded the description of “dir_name” cosmetic
    • “test_skill” reworded the description of “lint_only” cosmetic
    • “test_skill” reworded the description of “model” cosmetic
    • “test_skill” reworded the description of “other_skills” cosmetic
    • “test_skill” reworded the description of “scenario_count” cosmetic
    • “test_skill” reworded the description of “scenarios” cosmetic
    • “validate_agent_trajectory” reworded the description of “assertions” cosmetic
    • “validate_agent_trajectory” reworded the description of “format” cosmetic
    • “validate_agent_trajectory” reworded the description of “trace” cosmetic
    • “hallucination_check” made “answer” optional cosmetic
    • “hallucination_check” made “context” optional cosmetic
  • 29 Oct 26 0
    • Tool “llm_generate” rewrote its description, which is the text the model reads security
    • “llm_generate” reworded the description of “model” cosmetic
  • 28 Oct 26 0
    • Tool “ab_test_report” rewrote its description, which is the text the model reads security
    • Tool “function_call_validate” rewrote its description, which is the text the model reads security
    • Tool “json_schema_validate” rewrote its description, which is the text the model reads security
    • Tool “prompt_injection_scan” rewrote its description, which is the text the model reads security
    • Tool “rate_tool” rewrote its description, which is the text the model reads security
    • Tool “redact_pii” rewrote its description, which is the text the model reads security
    • Tool “toxicity_scan” rewrote its description, which is the text the model reads security
    • Tool “validate_agent_trajectory” rewrote its description, which is the text the model reads security
    • “function_call_validate” reworded the description of “allowed_functions” cosmetic
    • “redact_pii” reworded the description of “types” cosmetic
  • 26 Oct 26 0
    • “compare_models” reworded the description of “models” cosmetic
    • “jira_to_test_suite” reworded the description of “model” cosmetic
    • “llm_generate” reworded the description of “model” cosmetic
    • “model_info” reworded the description of “model” cosmetic
    • “token_budget_calculator” reworded the description of “model” cosmetic

    5 cosmetic changes on this day. Switch on “Show cosmetic changes” to see them.

  • 24 Oct 26 0
    • Tool “mcp_server_evaluate” rewrote its description, which is the text the model reads security
    • Tool “mcp_server_health_check” rewrote its description, which is the text the model reads security
    • “mcp_server_evaluate” reworded the description of “test_tool_name” cosmetic
    • “mcp_server_evaluate” reworded the description of “url” cosmetic
    • “mcp_server_health_check” reworded the description of “manifest” cosmetic
    • “mcp_server_health_check” reworded the description of “strict” cosmetic
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 5 Nov 2026 · Probed https://www.ia-qa.com/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=www.ia-qa.com CN=YR2,O=Let's Encrypt,C=US 10 Oct 2026 8 Jan 2027 RSA 2048 SHA256-RSA 660e1d6981514e1320131b13dbf4a910775
SANs: www.ia-qa.com
CN=YR2,O=Let's Encrypt,C=US (CA) CN=Root YR,O=ISRG,C=US 3 Sept 2025 2 Sept 2028 RSA 2048 SHA256-RSA 4ebd24947e24d394802d84a52fd5b319
CN=Root YR,O=ISRG,C=US (CA) CN=ISRG Root X1,O=Internet Security Research Group,C=US 13 May 2026 2 Sept 2032 RSA 4096 SHA256-RSA f24b6d17f9d9ad7cb1c9fea78782699f

Background: What to check on a remote MCP endpoint →

DNSSEC secure

Validation of www.ia-qa.com. — Secure

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
com. present 19718 13 Verified
ia-qa.com. present 52852 8 Verified
www.ia-qa.com. Verified address RRset verified with the apex keys
Authentication No authorisation required

The endpoint answered without asking for a token. Anyone who knows the URL can reach it.

Result No authorisation required
HTTP status 200
Header Value
strict-transport-security max-age=63072000; includeSubDomains; preload
content-security-policy default-src 'self';script-src 'self' 'unsafe-inline' 'unsafe-eval' https://www.googletagmanager.com;style-src 'self' 'unsafe-inline' https://fonts.googleapis.com;img-src 'self' data: blob: https:;font-src 'self' https://fonts.gstatic.com data:;connect-src 'self' https: wss: http://localhost:11434 data:;media-src 'self' blob:;object-src 'none';frame-ancestors 'self';base-uri 'self';form-action 'self';script-src-attr 'none';upgrade-insecure-requests
x-content-type-options nosniff
x-frame-options SAMEORIGIN
referrer-policy no-referrer
permissions-policy camera=(), microphone=(), geolocation=(), payment=(), usb=(), display-capture=()

Background: How OAuth 2.1 works in the 2026 MCP spec →

Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://www.ia-qa.com/mcp Verified 200
http (plaintext) http://www.ia-qa.com/mcp HTTPS enforced 301 https://www.ia-qa.com/mcp
MCP tools · 152 exposed · ~22,457 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
ab_test_report ~114

Generate an A/B test report comparing two prompts or model configurations. Accepts arrays of scores and returns mean, median, std deviation, improvement percentage, and a Welch t-test at 95 %: `winner` names a variant only when the difference is significant — otherwise "no_significant_difference", or "insufficient_samples" under 2 scores per variant.

NameTypeReqDescription
variant_aobjectyesFirst variant configuration with name and score array
variant_bobjectyesSecond variant configuration with name and score array
NameTypeReqDescription
countnumber––
improvement_percent–––
max–––
meanstring––
medianstring––
min–––
recommendationnumber––
std_devstring––
variant_aobject––
variant_bobject––
winner–––
{"variant_a":{"name":"A","scores":[70,71,69]},"variant_b":{"name":"B","scores":[70,71,69]}}
analyze_diff_bugs ~188

Pattern-based diff linter: flags a fixed set of risky shapes in changed code — query-string interpolation (SQL/Cypher/Mongo injection shape), shell interpolation, eval/new Function, empty catch blocks, regex built from a variable, fewer catch blocks than before, and named authorization guards that disappeared. Every finding cites the line that produced it. It does NOT do data-flow analysis: it cannot follow a value to a sink, across functions or files, and an empty result is not a safety verdict (the response lists what it did not analyse). Advisory triage — use a static analyser for a real security gate.

NameTypeReqDescription
contextstring–Optional PR title or feature context for better analysis
version1string–Original code (before changes). If omitted, only the new version is analysed.
version2stringyesNew/modified code (after changes)
NameTypeReqDescription
bugsarray––
disclaimerstring––
notAnalysedarray––
overallRiskstring––
rulesAppliednumber––
scannedLinesnumber––
totalSuggestionsnumber––
{"version1":"if (amount \u003e 0) charge(amount);","version2":"if (amount \u003e= 0) charge(amount);"}
analyze_responses ~227

Semantically analyze N already-produced model outputs for the SAME task (the MCP counterpart to the LLM Sandbox). Without a reference: computes consensus — pairwise cosine agreement, the most-representative output, and the outlier. With a `reference` (ground truth): also ranks every output by closeness (token cosine + ROUGE-L composite) and names the closest. No LLM, no key, runs locally. The reference mode is gate-able in CI; the consensus/outlier mode is a signal (no reference to fail against). You bring the outputs (2+). For a 2-way head-to-head with structural JSON diff use compare_responses instead.

NameTypeReqDescription
referencestring–Optional ground-truth answer. If set, each output is also ranked by closeness to it and the closest one is named.
responsesarrayyesThe outputs to analyze (same task, N models/prompts/versions). Each item is a plain string or { "label": "GPT-4o", "text": "..." }. At least 2 required.
NameTypeReqDescription
consensus–––
count–––
reference_ranking–––
summarystring––
{"reference":"Paris is the capital of France.","responses":[{"label":"A","text":"Lyon is the capital."},{"label":"B","text":"Paris is the capital of France."}]}
base64_decode ~55

Decode a Base64 string back to UTF-8 text. Use for inspecting Base64-encoded API responses, JWT payload claims, config file values, or attachment data.

NameTypeReqDescription
inputstringyesBase64 string to decode
NameTypeReqDescription
decoded–––
{"input":"aMOpbGxvIPCfjI0="}
base64_encode ~58

Encode a UTF-8 string to Base64. Use when you need to embed binary data, multi-line text, or special characters safely inside JSON fields, HTTP headers, or data URIs.

NameTypeReqDescription
inputstringyesText to encode
NameTypeReqDescription
encodedstring––
{"input":"héllo 🌍"}
bias_detect ~86

Analyse a set of LLM responses generated from the same prompt template but with different demographic variants (gender, origin, age, tone). Returns a bias score (0-100), sentiment analysis per variant, pairwise Jaccard similarity, and a human-readable verdict. No API key needed — runs entirely locally.

NameTypeReqDescription
responsesarrayyesArray of variant responses to compare for bias
NameTypeReqDescription
avgSimilaritynumber––
biasScorenumber––
lengthCVnumber––
minSimilaritynumber––
pairwiseSimilaritiesarray––
sentimentVariancenumber––
sentimentsarray––
verdictstring––
{"responses":["He is great.","She is great."]}
bm25_score ~127

Compute BM25 relevance score between a query and one or more documents. BM25 is the industry-standard keyword-based ranking algorithm used in Elasticsearch, OpenSearch, and Weaviate hybrid search. Returns ranked results with normalized scores.

NameTypeReqDescription
bnumber–Length normalization factor (default: 0.75)
documentsarrayyesArray of documents to rank
k1number–Term frequency saturation (default: 1.5)
querystringyesThe search query
top_knumber–Return top K results (default: all)
NameTypeReqDescription
avg_doc_lengthnumber––
b–––
bm25_scorenumber––
doc_lengthnumber––
doc_preview–––
documents_countnumber––
index–––
k1–––
query–––
results–––
{"documents":["shipping times","refund for damaged items","office hours"],"query":"refund damaged"}
build_rag_prompt ~163

Assemble a complete RAG (Retrieval-Augmented Generation) prompt from retrieved context chunks and a user query. Handles token budgeting, citation numbering, system instruction injection, and source attribution.

NameTypeReqDescription
chunksarrayyesRetrieved context chunks with .text (required), .source (optional), .score (optional)
cite_sourcesboolean–Add [1], [2] citation numbers (default: true)
languagestring–Response language instruction (e.g. "French", "Spanish")
max_context_tokensnumber–Max tokens for context section (default: 2000)
querystringyesThe user question to answer
system_instructionstring–Custom system instruction (default: standard RAG grounding instruction)
NameTypeReqDescription
chunks_includednumber––
chunks_truncatednumber––
context_tokens_estimatenumber––
included_chunks–––
prompt–––
system_prompt–––
total_tokens_estimatenumber––
{"chunks":[{"source":"a.md","text":"c1 text"}],"query":"q?"}
calculate_readability ~59

Calculate readability scores: Flesch Reading Ease, Flesch-Kincaid Grade Level, Coleman-Liau Index, and Automated Readability Index. Useful for evaluating LLM output quality.

NameTypeReqDescription
inputstringyesText to analyze for readability
NameTypeReqDescription
automated_readability_indexnumber––
coleman_liau_indexnumber––
flesch_kincaid_gradenumber––
flesch_reading_ease–––
level–––
statsobject––
{"input":"The cat sat on the mat. The dog ran."}
case_convert ~106

Convert a string between naming conventions: camelCase, PascalCase, snake_case, kebab-case, UPPER_SNAKE_CASE, dot.case, Title Case. Essential for code generation and refactoring.

NameTypeReqDescription
inputstringyesString to convert (e.g., "myVariableName", "my-css-class")
tostringyesTarget case: "camel", "pascal", "snake", "kebab", "upper_snake", "dot", "title"
NameTypeReqDescription
from_words–––
result–––
target_case–––
{"input":"helloWorld fooBar","to":"snake"}
check_contrast_ratio ~72

Calculate WCAG 2.1 contrast ratio between two colors. Returns ratio and compliance for AA/AAA normal and large text.

NameTypeReqDescription
backgroundstringyesBackground color in hex (e.g., "#ffffff")
foregroundstringyesForeground color in hex (e.g., "#333333")
NameTypeReqDescription
AAA_largeboolean––
AAA_normalboolean––
AA_largeboolean––
AA_normalboolean––
backgroundobject––
foregroundobject––
ratio–––
ratio_textstring––
{"background":"#fff","foreground":"#000"}
color_convert ~109

Convert a color between HEX, RGB, and HSL formats. Use when translating design tokens between CSS notations, verifying color accessibility, or normalizing color values from user input. Accepts #rrggbb, #rgb, rgb(r,g,b), or hsl(h,s%,l%).

NameTypeReqDescription
inputstringyesColor value to convert, e.g. "#ff6b6b", "rgb(255,107,107)", "hsl(0,100%,71%)"
NameTypeReqDescription
b–––
g–––
hex–––
hslstring––
input–––
r–––
rgbstring––
{"input":"rgb(18, 52, 86)"}
compare_models ~107

Put 2-5 AI models side by side: price per 1k tokens, context window, multimodal, reasoning, provider, pricing page. Facts only: names the cheapest and the largest context, never a "best model" — run your cases on each to choose.

NameTypeReqDescription
modelsarrayyesArray of 2-5 model names (e.g. ["gpt-5","claude-sonnet-4-6","gemini-3.5-flash"])
NameTypeReqDescription
cheapest–––
largest_context–––
models_comparednumber––
prices_as_of–––
rows–––
{"models":["gpt-6.1-sol","claude-sonnet-5-5"]}
compare_responses ~350

Compare two ALREADY-PRODUCED outputs (e.g. model A vs model B on the same task) side by side. Returns deterministic metrics (token cosine, ROUGE-L, Jaccard, length/structure deltas, JSON diff) and a verdict. If a `reference` (ground truth) is given, scores each output against it and picks the closer one. If `model` + `api_key` are given, an LLM judge also picks a qualitative winner for the task. No re-execution — you bring the outputs.

NameTypeReqDescription
api_keystring–Optional API key for the judge model (BYOK). Used only for the judge call; never stored.
check_jsonboolean–Try to parse as JSON and compare structurally (keys, types, values)
label_astring–Label for output A (e.g. "GPT-4o", "v1.0")
label_bstring–Label for output B (e.g. "GPT-5-nano", "v1.1")
modelstring–Optional judge model id (BYOK). When set with api_key, an LLM judge picks a qualitative winner.
referencestring–Optional ground-truth / expected answer. If set, each output is scored against it and the closer one wins (deterministic).
response_astringyesFirst output (e.g. model A's answer)
response_bstringyesSecond output (e.g. model B's answer)
taskstring–The task/prompt both outputs were answering — used by the LLM judge for context
NameTypeReqDescription
judge–––
labelA–––
labelB–––
metrics–––
summarystring––
verdict–––
{"response_a":"Paris is the capital.","response_b":"Paris is the capital."}
consistency_check ~143

Compare multiple LLM responses to the same prompt and detect inconsistencies using Jaccard word-overlap similarity and fact drift (number comparison). Fast, deterministic, no API key needed. Limitations: relies on surface-level word matching — "Paris is the capital of France" vs "Paris is the French capital" may score low despite semantic equivalence. For true semantic consistency, use run_semantic_tests with embedding mode. Essential for determinism testing.

NameTypeReqDescription
check_factsboolean–Check for contradictory numbers/facts across responses (default: true)
responsesarrayyesArray of 2+ LLM responses to compare (same prompt, different runs)
NameTypeReqDescription
avg_similarity–––
fact_contradiction–––
fact_drift–––
length_variance_percent–––
pairwise_scores–––
response_countnumber––
verdict–––
{"responses":["The capital of France is Paris.","Paris is the capital of France."]}
context_window_check ~112

Given an array of message objects [{role, content}], estimate total token usage and check if it fits in the target model's context window. Warns about truncation risk.

NameTypeReqDescription
max_output_tokensnumber–Reserved tokens for output (default: 4096)
messagesarrayyesArray of messages (system/user/assistant)
modelstringyesModel id from list_llm_models (e.g. gpt-6.1-sol, claude-sonnet-5-5)
NameTypeReqDescription
breakdownobject––
charsnumber––
context_window–––
fits–––
index–––
message_countnumber––
model–––
per_message–––
reserved_output_tokens–––
role–––
tokens–––
total_input_tokens–––
total_tokens–––
utilization_percentstring––
warnings–––
{"messages":[{"content":"hi","role":"user"}],"model":"gpt-4o"}
conversation_analyze ~53

Analyze a multi-turn conversation for context retention, topic drift, instruction following, and repetition. Accepts messages array [{role, content}]. Essential for chatbot QA.

NameTypeReqDescription
messagesarrayyesConversation messages in order
NameTypeReqDescription
assistant_messagesnumber––
avg_response_lengthnumber––
context_retention–––
has_system_promptboolean––
repetition_detectedboolean––
repetitions–––
topic_drift–––
turn_countnumber––
user_messagesnumber––
{"messages":[{"content":"What is your refund policy?","role":"user"},{"content":"Refunds are available within 30 days.","role":"assistant"}]}
cookie_security_audit ~160

Audit the security attributes of cookies set by any URL. Fetches the URL and inspects all Set-Cookie headers for: HttpOnly, Secure, SameSite, Domain scope, Path scope, Max-Age/Expires, __Host-/__Secure- prefixes. Flags insecure patterns: missing HttpOnly on session cookies, missing Secure flag, SameSite=None without Secure, overly broad Domain, and excessive TTL. Returns per-cookie grades and an overall security score (0–100) — the score is the WEAKEST cookie, not the average, so one leaking session cookie cannot be averaged into a green result (average_score is reported separately).

NameTypeReqDescription
urlstringyesFull URL to audit (e.g. https://example.com/login)
NameTypeReqDescription
cookiesarray––
cookies_foundnumber––
domain–––
host_prefix–––
httpOnly–––
issues–––
max_age–––
messagestring––
name–––
path–––
sameSite–––
scorenumber––
secure–––
secure_prefix–––
url–––
{"url":"https://www.ia-qa.com"}
cors_checker ~114

Check the CORS configuration of a URL the same way a browser would. Returns the main response status, all Access-Control-* headers, the tested origin, and the preflight OPTIONS response. Use this for direct CORS debugging, not just security auditing.

NameTypeReqDescription
methodstring–HTTP method to simulate (default: GET)
originstring–Origin header to simulate (default: https://yourdomain.com)
urlstringyesFull URL to test, e.g. https://api.example.com/resource
NameTypeReqDescription
allHeaders–––
corsHeaders–––
method–––
preflight–––
status–––
testedOrigin–––
url–––
{"url":"https://www.ia-qa.com/mcp"}
cors_test ~164

Test a URL for CORS misconfigurations. Sends preflight (OPTIONS) requests with various Origin headers to detect: wildcard origins with credentials, origin reflection (echoing any origin), null origin acceptance, subdomain wildcard bypass, and missing Vary headers. Returns risk level (safe/low/medium/high/critical) plus per-origin results. "unknown" means nothing was tested: every origin failed to connect, answered 5xx, or was refused on both requests with no CORS header (a 404, a firewall); never read it as "safe".

NameTypeReqDescription
originstring–Custom Origin header to test (default: tests multiple origins automatically)
urlstringyesFull URL to test (e.g. https://api.example.com/endpoint)
NameTypeReqDescription
errorstring––
origins_conclusivenumber––
origins_inconclusivenumber––
origins_reachablenumber––
origins_testednumber––
risk_level–––
tests–––
total_findingsnumber––
url–––
warningstring––
{"origin":"https://other.example","url":"https://www.ia-qa.com/mcp"}
cot_analyzer ~104

Analyze a Chain-of-Thought (CoT) or reasoning trace from an LLM. Detects step count, logical flow, conclusion presence, backtracking, and estimates reasoning depth. Useful for o1/o3/DeepSeek-R1 evaluation.

NameTypeReqDescription
expected_conclusionstring–Expected final answer to check against (optional)
reasoningstringyesThe CoT / reasoning trace text (e.g. from <think> tags or step-by-step output)
NameTypeReqDescription
backtracking_signals–––
conclusion_matches_expected–––
has_conclusionboolean––
markers–––
reasoning_depth–––
reasoning_depth_label–––
step_countnumber––
total_charsnumber––
total_linesnumber––
{"expected_conclusion":"7","reasoning":"Step 1: 12 apples minus 5 eaten.\nStep 2: 12 - 5 = 7.\nTherefore, the answer is 7."}
count_code_lines ~109

Count lines of code: total, code lines, comment lines, blank lines, and comment density. Supports JS/TS, Python, Java/C/C++, Ruby, Go, Shell, HTML/XML, and CSS.

NameTypeReqDescription
inputstringyesSource code to analyze
languagestring–Language hint: "js", "ts", "py", "java", "c", "rb", "go", "sh", "html", "css" (auto-detect if omitted)
NameTypeReqDescription
blank_lines–––
code_lines–––
code_to_comment_ratiostring––
comment_density–––
comment_lines–––
language–––
total_lines–––
{"input":"// c\nconst a = 1; // x\n\n/* b\n c */\nlet b;","language":"javascript"}
count_tokens ~77

Estimate the token count of a text string using the cl100k_base approximation (~4 chars/token). Call this BEFORE sending any text to an LLM API to check if it fits within the model context window and to estimate cost. Returns token estimate, character count, and word count.

NameTypeReqDescription
inputstringyesText to count tokens for
NameTypeReqDescription
chars–––
tokens_estimate–––
words–––
{"input":"Hello world, this is a test."}
create_confluence_page ~237

Create a new Confluence page from the output of jira_to_test_suite. Formats Gherkin, E2E steps, API tests, and test data as a properly structured Confluence page with code blocks and tables. STATEFUL — creates a new page in the specified space.

NameTypeReqDescription
confluence_base_urlstringyesAtlassian base URL
confluence_emailstringyesAtlassian account email
confluence_tokenstringyesAtlassian API token
issue_keystring–Source Jira issue key (for the page title and source link)
issue_urlstring–Source Jira issue URL (added as a link in the page)
parent_page_idstring–Optional parent page ID — page will be created as a child of this page
space_keystringyesConfluence space key where the page will be created, e.g. "QA", "ENG"
test_suiteobjectyesThe test_suite object from jira_to_test_suite result
titlestring–Page title. Defaults to "Test Plan: {issue_key}"
NameTypeReqDescription
page_idstring––
page_urlstring––
successboolean––
titlestring––
{"confluence_base_url":"https://yourcompany.atlassian.net","confluence_email":"you@example.com","confluence_token":"\u003cyour-atlassian-token\u003e","space_key":"QA","test_suite":{"acceptance_criteria":["A reset link expires 30 minutes after it is sent."]}}
cron_parse ~63

Parse a cron expression into a human-readable schedule description. Supports standard 5-field cron (minute hour day month weekday).

NameTypeReqDescription
expressionstringyesCron expression (e.g., "0 9 * * 1-5", "*/15 * * * *")
NameTypeReqDescription
expression–––
fieldsobject––
human_readablestring––
{"expression":"*/5 * * * *"}
cron_validator ~106

Validate a 5-field cron expression, explain the schedule, and preview the next execution times. Use this to debug cron jobs before they reach production. Returns parsed fields, a human-readable description, and upcoming ISO timestamps.

NameTypeReqDescription
expressionstringyesCron expression with 5 fields, e.g. "*/15 9-18 * * 1-5"
next_runs_countnumber–How many upcoming runs to return (1-50, default: 10)
NameTypeReqDescription
expression–––
fieldsobject––
human_readable–––
next_runs–––
validboolean––
{"expression":"0 0 29 2 *","next_runs_count":1}
decode_jwt ~80

Decode a JWT (JSON Web Token) and return its header and payload without verifying the signature. Also reports whether the token is expired and the exact expiry date. Use to inspect claims (sub, iss, exp, roles) during debugging or when integrating with an auth provider.

NameTypeReqDescription
tokenstringyesThe JWT string to decode (header.payload.signature)
NameTypeReqDescription
expired–––
expiresAt–––
header–––
notestring––
payload–––
{"token":"eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjQxMDI0NDQ4MDB9.sig"}
detect_language ~80

Detect the natural language of a text using n-gram frequency analysis and common word markers. Supports 15 languages: English, French, Spanish, German, Italian, Portuguese, Dutch, Russian, Chinese, Japanese, Korean, Arabic, Polish, Turkish, Swedish.

NameTypeReqDescription
inputstringyesText to detect language from (min 20 chars for accuracy)
NameTypeReqDescription
confidencenumber––
lang–––
languagestring––
matched–––
methodstring––
namestring––
score–––
top_candidatesarray––
{"input":"Il rilascio è fallito perché la migrazione del database è scaduta dopo dieci minuti."}
detect_secrets ~108

Scan code or config files for hardcoded secrets: AWS keys, GitHub tokens, OpenAI/Anthropic API keys, Stripe secrets, JWTs, Slack/Teams/Discord webhook URLs, session cookies, database connection strings, and generic passwords. Returns findings with severity. Run before every commit.

NameTypeReqDescription
filenamestring–Optional filename for context (e.g. ".env", "config.js")
inputstringyesCode or config content to scan (max 500KB)
NameTypeReqDescription
filename–––
findings–––
recommendation–––
risk_level–––
total_findingsnumber––
{"input":"redis://cache:6379"}
diff_mappings ~199

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, ambiguous, lost, added, rebound). Pure and deterministic — provide two mappings as JSON with "elements" arrays of {role, name, selector, context?}. Use the companion @ia-qa/self-healing package (npm install -g @ia-qa/self-healing) to capture mappings from your app via its local MCP server ia-qa-heal-mcp, or paste the snippet from ia-qa.com/devtools/selector-drift into your browser console.

NameTypeReqDescription
afterobjectyesCurrent page mapping: same shape as before, captured after the UI change.
beforeobjectyesBaseline page mapping: { page, url, capturedAt, elements: [{role, name, selector, context?}] }. Captured before a UI change.
NameTypeReqDescription
addedarray––
countsobject––
rowsarray––
verdict–––
{"after":{"elements":[{"name":"Log in","role":"button","selector":"#submit"}],"page":"login"},"before":{"elements":[{"name":"Sign in","role":"button","selector":"#submit"}],"page":"login"}}
diff_text ~116

Compute a unified line-by-line diff between two text strings (LCS algorithm). Returns added/removed/unchanged line counts and formatted diff hunks with configurable context lines (0–20). Use to compare versions of prompts, configs, code snippets, or any text where you need to see exactly what changed.

NameTypeReqDescription
astringyesOriginal (before) text
bstringyesModified (after) text
contextnumber–Context lines around each change (0–20, default: 3)
NameTypeReqDescription
addednumber––
diffstring––
removednumber––
unchangednumber––
{"a":"a\nb\nc","b":"a\nB\nc"}
embedding_similarity ~186

Compute text similarity using local algorithms (Bag of Words, TF-IDF, Character N-grams). No API key needed — runs entirely in-process. NOT real embeddings: for true semantic similarity with vector embeddings, use run_semantic_tests with mode="embeddings" and your OpenAI API key. Supports single pair or batch mode with pipe-separated pairs. Useful for RAG retrieval testing, semantic search evaluation, and text deduplication.

NameTypeReqDescription
batcharray–Batch mode: array of { text_a, text_b } pairs. Overrides text_a/text_b if provided.
methodsarray–Algorithms to use (default: all three). Options: "bow", "tfidf", "ngram"
text_astring–First text to compare (single-pair mode)
text_bstring–Second text to compare (single-pair mode)
NameTypeReqDescription
countnumber––
modestring––
results–––
scores–––
text_a–––
text_b–––
{"text_a":"the cat sat","text_b":"quantum field theory"}
env_parse ~93

Parse a .env file content into a JSON object. Handles quoted values (single and double), inline comments, export prefix, and escaped sequences (\n, \t inside double quotes). Returns all key-value pairs. Use in CI/CD pipelines, agent config loaders, or when processing dotenv files programmatically.

NameTypeReqDescription
inputstringyes.env file content to parse (e.g. the output of `cat .env`)
NameTypeReqDescription
countnumber––
vars–––
{"input":"PORT=3000"}
escape_html ~67

Escape HTML special characters (&, <, >, ", ') to their safe HTML entities. ALWAYS call this before inserting any user-provided or LLM-generated content into an HTML template to prevent cross-site scripting (XSS) attacks.

NameTypeReqDescription
inputstringyesString to HTML-escape
NameTypeReqDescription
escaped–––
original_lengthstring––
{"input":"\u003ca href=\"x\"\u003e'\u0026'\u003c/a\u003e"}
estimate_llm_cost ~120

Estimate the API cost in USD for a given model and token counts, at the price read daily from the provider's own pricing page (prices_as_of, price_status). Any model from list_llm_models.

NameTypeReqDescription
input_tokensnumberyesNumber of input/prompt tokens
modelstringyesModel name, e.g. "gpt-4o", "claude-3.5-sonnet", "deepseek-v3"
output_tokensnumber–Number of output/completion tokens (default: 0)
NameTypeReqDescription
input_cost_usdstring––
input_tokens–––
model–––
output_cost_usdstring––
output_tokens–––
ratesobject––
total_cost_usdstring––
{"input_tokens":1000000,"model":"gpt-4o","output_tokens":1000000}
extract_json_from_text ~88

Extract the first valid JSON object or array embedded in chaotic LLM output (surrounded by markdown fences, prose, or explanatory text). Handles ```json blocks and inline JSON. Call this whenever an LLM returns structured data mixed with explanation text instead of raw JSON.

NameTypeReqDescription
inputstringyesRaw text (e.g., LLM output) that may contain a JSON object or array
NameTypeReqDescription
json–––
sourcestring––
{"input":"Here:\n```json\n{\"a\":[1,2]}\n```\nthanks"}
extract_json_path ~101

Extract a value from a JSON string using dot-notation path (e.g., "user.address.city", "items.0.name", "meta.tags"). Supports array index access via numeric path segments.

NameTypeReqDescription
inputstring|object|arrayyesThe JSON to traverse — a JSON string, or the object/array itself.
pathstringyesDot-notation path, e.g. "user.address.city" or "items.0.name"
NameTypeReqDescription
path–––
type–––
value–––
{"input":{"a":{"b":[{"c":1},{"c":2}]}},"path":"a.b.0.c"}
extract_links ~69

Extract all URLs, email addresses, and domain names from text. Returns categorized and deduplicated results. Useful for content auditing, link checking, and web scraping validation.

NameTypeReqDescription
inputstringyesText to extract links from
typesarray–Types to extract (default: all three)
NameTypeReqDescription
total–––
{"input":"nothing here"}
extract_todos ~111

Extract TODO, FIXME, HACK, BUG, NOTE, OPTIMIZE, and custom tags from any source code or text. Returns line numbers, tag types, and message text. Essential for technical debt auditing.

NameTypeReqDescription
include_contextboolean–Include full line text (default: true)
inputstringyesCode or text to scan
tagsarray–Custom tags to add (default set: TODO, FIXME, HACK, NOTE, BUG, OPTIMIZE, XXX)
NameTypeReqDescription
counts–––
has_criticalboolean––
items–––
totalnumber––
{"input":"// todo: refactor\n// todo(jc): rename"}
fetch_confluence_page ~200

Fetch a Confluence page and return its content as clean Markdown. Accepts a numeric page_id or a full page URL. Optionally lists direct child pages. BYOK — credentials transit in-memory only, never stored.

NameTypeReqDescription
confluence_base_urlstringyesAtlassian base URL, e.g. "https://mycompany.atlassian.net"
confluence_emailstringyesAtlassian account email (same credentials as Jira)
confluence_tokenstringyesAtlassian API token
include_childrenboolean–List direct child pages (id + title) (default: false)
page_idstring–Confluence page ID (numeric string), e.g. "123456789"
page_urlstring–Full Confluence page URL (alternative to page_id), e.g. "https://mycompany.atlassian.net/wiki/spaces/ENG/pages/123456789"
NameTypeReqDescription
childrenarray––
markdownstring––
page_idstring––
titlestring––
urlstring––
{"confluence_base_url":"https://yourcompany.atlassian.net","confluence_email":"you@example.com","confluence_token":"\u003cyour-atlassian-token\u003e","page_id":"123456"}
fetch_jira_issue ~201

Fetch a complete Jira issue: summary, description converted to Markdown, status, assignee, priority, labels, custom fields, and optionally comments and attachment metadata. BYOK — credentials transit in-memory only, never stored on ia-qa.com.

NameTypeReqDescription
fieldsarray–Specific Jira field names to return. Omit for all standard fields.
include_attachmentsboolean–Include attachment metadata list (default: false)
include_commentsboolean–Include issue comments, up to 20 (default: true)
issue_keystringyesJira issue key, e.g. "PROJ-123"
jira_base_urlstringyesAtlassian base URL, e.g. "https://mycompany.atlassian.net"
jira_emailstringyesAtlassian account email
jira_tokenstringyesAtlassian API token (from id.atlassian.com > Security > API tokens)
NameTypeReqDescription
assigneestring––
descriptionstring––
keystring––
labelsarray––
prioritystring––
reporterstring––
statusstring––
summarystring––
typestring––
urlstring––
{"issue_key":"PROJ-1","jira_base_url":"https://yourcompany.atlassian.net","jira_email":"you@example.com","jira_token":"\u003cyour-atlassian-token\u003e"}
fetch_veille_feed ~167

Fetch the latest QA & AI/LLM articles aggregated from curated RSS sources (Google Testing Blog, DEV.to Testing/QA/AI/LLM/Agents, Hugging Face Blog, Simon Willison). Perfect for agents monitoring the QA & AI landscape. Each article carries summary_source — the XML tag the summary was read from, or "none" when the feed publishes titles and links only; an empty summary with summary_source "none" is a property of that feed, not a parse failure.

NameTypeReqDescription
categorystring–Filter: "qa" (testing/quality), "ai" (AI/LLM/agents), "all" (default — both)
limitnumber–Max articles to return (default: 20, max: 50)
NameTypeReqDescription
articlesarray––
category–––
sources_queriednumber––
total_foundnumber––
{}
few_shot_formatter ~107

Format few-shot examples for LLM prompts. Converts example pairs into formatted blocks. Supports chat format (User/Assistant), XML tags, Markdown, or plain text.

NameTypeReqDescription
examplesarrayyesArray of {input, output} pairs
formatstring–Output format (default: chat)
input_labelstring–Label for input (default: User / <input>)
output_labelstring–Label for output (default: Assistant / <output>)
NameTypeReqDescription
example_countnumber––
format–––
formatted–––
token_estimatenumber––
{"examples":[{"input":"a","output":"b"},{"input":"c","output":"d"}]}
Install

How do I install the IA-QA — 152 QA & Dev Tools for AI Agents MCP server?

IA-QA — 152 QA & Dev Tools for AI Agents is a hosted endpoint at https://www.ia-qa.com/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

remote · www.ia-qa.com

# add to Claude Code
claude mcp add --transport http jcjamet-ia-qa-toolbox 'https://www.ia-qa.com/mcp'
Common questions

What is the IA-QA — 152 QA & Dev Tools for AI Agents MCP server?

IA-QA — 152 QA & Dev Tools for AI Agents is an MCP server listed in the public MCP registry as io.github.JcJamet/ia-qa-toolbox. 152 free QA tools for agents: injection scan, evals, RAG, web audits. Smaller packs: /mcp/{pack}. This page covers its hosted endpoint (https://www.ia-qa.com/mcp).

Is the IA-QA — 152 QA & Dev Tools for AI Agents MCP server safe to use?

IA-QA — 152 QA & Dev Tools for AI Agents scores 89 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the IA-QA — 152 QA & Dev Tools for AI Agents MCP server expose?

IA-QA — 152 QA & Dev Tools for AI Agents exposes 152 tools: get_testing_guidelines, find_tool, generate_test_cases, jira_to_test_suite, analyze_diff_bugs, and 147 more. Their descriptions and schemas cost roughly 22,457 tokens of context every time the server is loaded.

Does the IA-QA — 152 QA & Dev Tools for AI Agents MCP server require authentication?

No. We connected to IA-QA — 152 QA & Dev Tools for AI Agents without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

Is the IA-QA — 152 QA & Dev Tools for AI Agents MCP server still maintained?

IA-QA — 152 QA & Dev Tools for AI Agents is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.