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 Eval & RAG — 38 tools

REMOTE · WWW.IA-QA.COM

LLM & RAG evals: hallucination, eval contracts, semantic tests, tokens & model info. Free, no key.

Available components

+5 this week 78 Trust /100

Last scanned (23 hours ago)

Scores higher than 76% of remote servers

Reachable. Last reached 4 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 Usability81
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 7511 tokens (~197/item across 38 items; 38 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Tools include usage examples.Pass
Stability & Change Management30
  • Stability observed for 9 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage99
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 96% 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 2 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 39 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 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.

  • 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 +1
    • 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_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_generate” 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 +3
    • The server rewrote its instructions, which are the text every model session reads security
    • Tool “generate_ci_workflow” 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 “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 “test_skill” rewrote its description, which is the text the model reads security
    • Schema quality: 221 → 197 ▲ functional
    • Schema quality: fail → pass ▲ functional
    • “hallucination_check” added an optional parameter “cases” 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
    • “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
    • “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
    • “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
    • “hallucination_check” made “answer” optional cosmetic
    • “hallucination_check” made “context” optional cosmetic
  • 31 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 13 to 17. That category is still filling its 30-day observation window: 4 days of observed history at the previous scan, 5 at this one. The score rises as the window fills, whether or not the server changes.

  • 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 +1
    • Tool “ab_test_report” 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
  • 27 Oct 26 0
    • Stability: unverified → 0.03 ▲ functional
  • 26 Oct 26 72

    First indexed and scored.

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 4 Nov 2026 · Probed https://www.ia-qa.com/mcp/eval

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/eval Verified 200
http (plaintext) http://www.ia-qa.com/mcp/eval HTTPS enforced 301 https://www.ia-qa.com/mcp/eval
MCP tools · 38 exposed · ~6,986 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_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."}]}
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?"}
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"}]}
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_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."}
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"}
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"}
find_tool ~194

Search available MCP tools by keyword or category before calling them. Returns matching tool names, descriptions, and optionally their inputSchemas. Queries are logged 90 days, screened for credentials and personal data. Categories: data, encoding, text, llm, qa, rag, dev, security, web.

NameTypeReqDescription
categorystring–Optional: filter by category — data | encoding | text | llm | qa | rag | dev | security | web
max_resultsnumber–Maximum tools to return (default 10, max 50). Results are ranked by IDF-weighted relevance, so common words like "test" do not inflate the list.
querystringyesKeyword(s) to search in tool name and description (e.g. "cors", "token", "vector", "json")
with_schemaboolean–Set true to include inputSchema in results (default: false)
NameTypeReqDescription
category–––
countnumber––
hint–––
query–––
score–––
tool–––
toolsarray––
total_matchesnumber––
truncatedboolean––
{"query":"leaked api key"}
generate_ci_workflow ~380

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 provider key as a repo secret), "cli_checks" runs deterministic tools via npx @ia-qa/cli and fails the build on their verdict, "selector_drift" gates E2E selectors with @ia-qa/self-healing. Deterministic template, no LLM. Returns the YAML, the secrets to create and the next steps. Pair with generate_eval_yaml for the contract.

NameTypeReqDescription
app_base_urlstring–[selector_drift] Default http://127.0.0.1:3000; must match .ia-qa/config.json.
app_start_commandstring–[selector_drift] Boots the app, e.g. "npm run start:ci". Never guessed: omitted, the step is a TODO.
cli_toolsarray–Tools to gate on, e.g. ["secret_scan","prompt_injection_scan"].
contract_pathstring–Default evals/smoke.ia-eval.yaml.
cronstring–For schedule (default '0 6 * * 1').
fail_on_failboolean–Default true; false reports without gating.
gatestring–Default eval_contract. both = CLI checks + eval; all = CLI checks, drift, eval.
min_scorenumber–Override the contract min_score (0-100).
node_versionstring–Default "20".
providerstring–Decides which repo secret is wired (default groq).
triggersarray–Default push + pull_request.
workflow_namestring––
NameTypeReqDescription
gatestring––
next_stepsarray––
notesarray––
pathstring––
secrets_requiredarray––
yamlstring––
{}
generate_eval_yaml ~192

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, no API key needed). Returns ready-to-run YAML for the LLM Test Runner (run_eval_contract). Picks appropriate evaluators (cosine_similarity, contains_check, hallucination_check, etc.) based on the task type.

NameTypeReqDescription
descriptionstringyesPlain-language description of what the LLM under test should do. Be specific: describe inputs, expected behaviour, and constraints.
scenario_countnumber–Number of scenarios to generate (default: 5). Covers happy path + edge cases + adversarial.
system_promptstring–Optional system prompt of the LLM under test. Helps generate more accurate test cases.
task_typestring–Optional task type hint to guide evaluator selection.
NameTypeReqDescription
model_usedstring––
scenario_countnumber––
task_typestring––
yamlstring––
{"description":"Summarize a customer support ticket in one sentence."}
get_testing_guidelines ~227

Query the IA-QA methodology knowledge base. Returns structured testing guidelines, assertion strategies, thresholds, best practices, and relevant MCP tools for a given topic. Call without a topic to list all available topics. Topics: llm-unit-testing, rag-pipeline, prompt-stability, prompt-ab-testing, embedding-quality, eval-framework, semantic-testing, auto-testing, security, api-testing, ci-cd, multimodal, llm-data-security, agent-observability, pro-tips, learning-paths, golden-dataset, selector-drift, qa-recipes, playbooks. Not sure where to start testing an LLM, RAG pipeline or agent? Call without a topic (or with "start-here"): it maps what you are testing to the tools to call and the output field to gate CI on. A plain question such as "how do I test my RAG" also resolves to the right topic.

NameTypeReqDescription
topicstring–The testing topic to retrieve guidelines for. Omit to get the start-here map and the full list of available topics.
NameTypeReqDescription
available_topicsarray––
keywordsarray––
start_hereobject––
tipstring––
topic–––
usagestring––
{"topic":"rag-pipeline"}
hallucination_check ~247

Lexical hallucination check: verifies an LLM answer's words, numbers and polarity against the provided source/context. Fast, deterministic, no API key needed. Each answer sentence is aligned to its best-matching source sentence, so a number only counts as support when it sits on the SAME statement ("founded in 1998" is not grounded by "sold 1998 units"), and a negation or antonym flip against that sentence returns verdict "contradicted" — the corrupted-fact hallucination that reuses source vocabulary. Limitations: still lexical — it cannot follow a paraphrase, a synonym, or multi-sentence reasoning, so a "well_grounded" verdict means "nothing lexical found", never "verified true". For entailment use run_semantic_tests (NLI/embedding) or a calibrated judge.

NameTypeReqDescription
answerstring–The LLM answer to verify (with context).
casesarray–Batch instead of answer + context: one result per case, and the worst gate overall.
contextstring–The source text that should ground it.
strictboolean–Every sentence must be supported (default false).
NameTypeReqDescription
analysis–––
contradictions–––
detailstring––
entities–––
groundedboolean––
grounded_countnumber––
grounding_score–––
matched_wordsnumber––
messagestring––
numbers–––
overlapnumber––
sentence–––
total_sentencesnumber––
total_wordsnumber––
unbound_claims–––
ungrounded_countnumber––
unsupported_claims–––
verdictstring––
{"answer":"Le remboursement prend plus de 7 jours ouvrés.","context":"Le remboursement prend plus de 7 jours ouvrés."}
list_llm_models ~137

List all LLM models available on ia-qa.com with their provider, API endpoint, and capabilities. Filter by provider name (e.g. "Groq", "HuggingFace", "OpenAI") or return the full catalog. Use this to discover which models are available before calling an LLM API, or to compare providers.

NameTypeReqDescription
providerstring–Filter by provider name (case-insensitive). E.g. "Groq", "HuggingFace", "OpenAI", "Anthropic", "Google", "DeepSeek", "xAI", "Ollama". Omit for full catalog.
NameTypeReqDescription
filter–––
models–––
providers–––
totalnumber––
{"provider":"groq"}
llm_format_check ~92

Validate that an LLM output matches an expected format: JSON, Markdown, code block, bullet list, numbered list, table, YAML, XML, or custom regex. Essential for structured output testing.

NameTypeReqDescription
expected_formatstringyesExpected format
outputstringyesThe LLM output to validate
regex_patternstring–Custom regex pattern (only when expected_format is "regex")
NameTypeReqDescription
checks–––
expected_format–––
failed–––
passed–––
total_checksnumber––
validboolean––
{"expected_format":"yaml","output":"a: 1\nb: [1, 2]"}
llm_generate ~275

Generate text with an open-source model hosted on Groq, on the server's key — no API key needed. Models: openai/gpt-oss-20b, openai/gpt-oss-120b, qwen/qwen3.8-27b (default "openai/gpt-oss-20b"). HuggingFace models are not served on the server key. A reasoning model that spends max_tokens thinking is retried once at 4096. Rate-limited.

NameTypeReqDescription
max_tokensnumber–Maximum tokens to generate (default: 2048, max: 4096)
modelstring–Model ID (default: "openai/gpt-oss-20b"). Server-keyed whitelist only — Groq: openai/gpt-oss-20b, openai/gpt-oss-120b, qwen/qwen3.8-27b. Other ids from list_llm_models, HuggingFace ones included, are…
promptstringyesThe user prompt / instruction to send to the model
systemstring–Optional system prompt to set context or persona
temperaturenumber–Sampling temperature 0.0–1.5 (default: 0.7)
NameTypeReqDescription
content–––
latency_msnumber––
model–––
provider–––
usage–––
{"prompt":"Reply with the single word OK."}
llm_json_schema_check ~85

Validate that an LLM JSON output matches a JSON Schema definition. Tests required fields, types, enums, nested objects, and arrays. Critical for function-calling and structured output testing.

NameTypeReqDescription
outputstringyesThe LLM JSON output (raw string, will be parsed)
schemaobjectyesJSON Schema (draft-07 subset) to validate against
NameTypeReqDescription
error_countnumber––
errorsarray––
parse_error–––
parsed_type–––
validboolean––
{"output":"{\"name\":\"a\",\"age\":3}","schema":{"properties":{"age":{"minimum":0,"type":"integer"},"name":{"type":"string"},"role":{"enum":["admin","user"]}},"required":["name","age"],"type":"object"}}
llm_output_validator ~240

Validate an LLM response against QA criteria: format checks (JSON, code, markdown), content rules (must-include, must-not-include), length constraints, language detection, and safety patterns. Essential for QA testing LLM-powered features.

NameTypeReqDescription
check_json_schemastring–If expected_format is JSON, provide required keys as comma-separated list to validate the structure
check_safetyboolean–Check for PII patterns (emails, phones, SSN), profanity signals, and prompt leakage
expected_formatstring–Expected output format
expected_languagestring–Expected language of the output (en, fr, es, de…). Checks for common words.
max_lengthnumber–Maximum character length for the output
min_lengthnumber–Minimum character length for the output
must_includestring–Comma-separated strings that MUST appear in the output
must_not_includestring–Comma-separated strings that must NOT appear (e.g. "TODO, FIXME, undefined, NaN")
outputstringyesThe LLM output text to validate
NameTypeReqDescription
checks–––
failed–––
passed–––
totalnumber––
verdict–––
{"expected_format":"json","must_include":"a","must_not_include":"TODO","output":"{\"a\":1}"}
metamorphic_check ~299

Reference-free stability check: does an assistant's answer stay the same when the QUESTION is transformed (case, typo, paraphrase, reorder, translation)? You bring the outputs; no model is called (tfidf mode is deterministic and free). Default thresholds: case .95, typo .90, paraphrase .80, reorder .80, translation .75 (embeddings only), specialization .60 (advisory, never gated). Returns PASS / FAIL / INVALID — INVALID when the BASE answer is a refusal or too short, so a model that refuses everything never scores 1.0. Pair with run_semantic_tests for correctness.

NameTypeReqDescription
api_keystring–OpenAI key, embeddings mode only.
baseobjectyesThe original run.
baseline_guardobject–Floor on the BASE answer; failing it returns INVALID.
modestring–tfidf (default, lexical: gate on case/typo, read paraphrase as a trend) or embeddings (OpenAI, needs api_key; required for translation).
require_allboolean–Default true: every gated variant must pass. Keep it for a gate — false lets one easy typo row hold the run at PASS while a paraphrase fails.
thresholdsobject–Per-relation overrides, 0-1. Calibrate on your own data before gating.
variantsarrayyesAnswers to transformed versions of the question.
NameTypeReqDescription
baselineobject––
modestring––
summaryobject––
thresholdsobject––
variantsarray––
verdictstring––
warningsarray––
weakestobject––
{"base":{"output":"Paris is the capital and largest city of France."},"variants":[{"output":"Paris is the capital and largest city of France.","relation":"case"}]}
model_info ~110

Get detailed specs for an AI model: context window, pricing per 1K tokens, knowledge cutoff, provider, multimodal support, reasoning capabilities, and feature list. Covers 30+ models from OpenAI, Anthropic, Google, DeepSeek, Meta, Mistral, Cohere, xAI.

NameTypeReqDescription
modelstringyesModel name (e.g. "gpt-4o", "claude-3.5-sonnet", "gemini-3.1-pro-preview")
NameTypeReqDescription
model–––
pricing_per_1kobject––
{"model":"gpt-4o"}
needle_haystack_generate ~171

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 retrieval accuracy. Returns the full haystack, the question to ask, and metadata. No API key needed.

NameTypeReqDescription
needlestringyesThe fact to hide (e.g. "The secret code is ALPHA-42")
positionstring–Where to insert the needle: "start", "middle", "end", "random" (default: "middle")
questionstringyesThe question to ask the LLM (e.g. "What is the secret code?")
tokensinteger–Target haystack size in tokens (default: 5000, max: 100000)
NameTypeReqDescription
estimated_tokens–––
haystack–––
insert_block–––
needle–––
position–––
question–––
total_blocksnumber––
{"needle":"The code is 4242.","position":"middle","question":"What is the code?","tokens":2000}
prompt_test_suite ~201

Define a test suite for a prompt: provide the system prompt, user prompt, and expected output criteria. Returns a test plan with scored rubric — use this as input for manual or automated LLM evaluation.

NameTypeReqDescription
adversarial_promptsboolean–Auto-generate adversarial test variants (jailbreak, injection, edge cases)
check_safetyboolean–Include safety/PII checks in the rubric
expected_behaviorstring–Description of what the LLM should do (free text)
expected_formatstring–Expected output format
max_tokensnumber–Max token budget for the test
must_includestring–Required content (comma-separated)
must_not_includestring–Forbidden content (comma-separated)
system_promptstringyesThe system prompt under test
temperaturenumber–Temperature to use
user_promptstringyesThe user prompt to send
NameTypeReqDescription
categoriesarray––
instructionsstring––
rubric–––
test_suite_namestring––
total_testsnumber––
{"system_prompt":"You are a helpful assistant.","user_prompt":"Say hi"}
rag_relevance_rank ~81

Rank an array of text chunks by relevance to a query using TF-IDF scoring. Simulates retrieval ranking for RAG testing without needing embeddings or an API.

NameTypeReqDescription
chunksarrayyesArray of text chunks to rank
querystringyesThe user query
top_knumber–Return top K results (default: all)
NameTypeReqDescription
chunk_preview–––
index–––
keyword_overlap–––
query–––
ranknumber––
results–––
returnednumber––
scorestring––
total_chunksnumber––
{"chunks":["a b c","d e f"],"query":"quantum"}
rate_tool ~308

Give honest usage feedback on an IA-QA MCP tool. Give a score (1-5) and a comment. Rate low (1-2) if the tool was wrong, irrelevant, or a poor fit; rate high (4-5) only if it genuinely solved your need. Maintainers read ratings, one vote per agent and tool a month: comments and per-tool scores are not published, only the overall average and vote count. Comments are screened: one carrying a credential is not stored, personal data becomes placeholders — describe what happened, not what a model should do. Skip routine successes: signal, not praise. Example: rate_tool({ tool_name: "format_json", score: 2, comment: "Tried to pretty-print a JSON5 file, it rejected trailing commas — not usable for my case." })

NameTypeReqDescription
commentstring–Strongly encouraged — explain what you were trying to do and whether the tool got you there. Be specific about what was missing, wrong, or a poor fit. This is the most valuable part of the rating. Up…
scorenumberyesRating from 1 (poor) to 5 (excellent)
tool_namestringyesName of the MCP tool to rate (e.g. "format_json", "shield_analyze")
NameTypeReqDescription
comment–––
messagestring––
okboolean––
rated_atstring––
score–––
stored_charsnumber––
tool_name–––
truncatedboolean––
{"comment":"Formatted a 2 MB payload correctly.","score":4,"tool_name":"format_json"}
rerank_evaluate ~195

Evaluate RAG retrieval: rank passages against a query, compute Precision@k / Recall@k and a PASS/FAIL verdict from your relevance labels. Modes: (1) give every passage the `score` YOUR reranker produced — deterministic, offline, the mode to gate CI on; (2) no scores, no key — a local BM25 keyword baseline, never a judgement of a neural reranker; (3) api_key for an NVIDIA account that still has reranking (NVIDIA retired the hosted endpoints on 2026-05-18).

NameTypeReqDescription
api_keystring–NVIDIA key, used only when no passage has a score; never stored.
passagesarrayyes2 to 20 passages.
querystringyes–
thresholdnumber–Minimum Precision@k to PASS (default 0.5).
top_kinteger–Default 3.
NameTypeReqDescription
has_ground_truthboolean––
knumber––
latency_msnumber––
modestring––
modelstring––
precision_at_knumber––
rankedarray––
recall_at_knumber––
thresholdnumber––
total_passagesnumber––
verdictstring––
{"api_key":"\u003cyour-api-key\u003e","passages":[{"relevant":true,"text":"Paris is the capital of France."},{"relevant":false,"text":"Bananas are rich in potassium."}],"query":"capital of France"}
response_quality_score ~189

Score an LLM response against the criteria you pass: coverage of expected_keywords and compliance with max_length. Returns a 0-100 score over the criteria actually measured — or total_score null with the reason when none is given, because relevance and correctness cannot be read off word overlap (a correct one-word answer shares no words with its question). For meaning against a reference answer, use run_semantic_tests. Also returns unscored signals: question-term overlap, average sentence length, markdown.

NameTypeReqDescription
expected_keywordsarray–Keywords a correct answer must contain, as whole words (case-insensitive; a plural in -s/-es counts). Scored as coverage.
max_lengthnumber–Maximum character length. Scored as a proportional penalty beyond it.
questionstringyesThe original question/prompt
responsestringyesThe LLM response to score
NameTypeReqDescription
breakdownobject––
grade–––
max_scorenumber––
not_measuredarray––
reasonstring––
signalsobject––
statsobject––
total_score–––
{"question":"q","response":"anything"}
run_eval_contract ~244

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, PARTIAL). Expectations are assertions that fail a scenario whatever its score; evaluators give the score. Hosted: pass inline_contract. validate_only calls no model.

NameTypeReqDescription
api_keysobject–Your keys per provider. Only Groq falls back to the server key; any other provider needs yours.
contract_pathstring–A .ia-eval.yaml under the server's working directory (local use).
inline_contractobject–The contract as an object: "metadata" ({name, version, model?, provider?}), "expectations", "evaluators" and "scenarios" ([{id, input, expectations?}]). generate_eval_yaml scaffolds one.
overridesobject–Override contract defaults
validate_onlyboolean–Check the contract against the IA-EVAL schema and stop: no model call, no key, deterministic. Returns valid + issues instead of throwing. Gate a PR that edits a contract on valid.
NameTypeReqDescription
contract_path–––
issues–––
metadataobject––
scenario_results–––
summaryobject––
validboolean––
warnings–––
{"inline_contract":{"expectations":{"contains":["Paris"],"min_score":70},"metadata":{"name":"smoke","version":"1.0"},"scenarios":[{"ground_truth":"Paris","id":"capital","input":"Capital of France? One word."}]}}
run_semantic_tests ~216

Semantic assertion primitive: compare actual vs expected text pairs using cosine similarity + ROUGE-L. Two modes: tfidf (default, free, no API key) or embeddings (OpenAI text-embedding-3-small, BYOK, true semantic similarity). Returns per-case PASS/FAIL verdicts and an overall verdict. CI-ready: pipe the JSON verdict field to gate a build.

NameTypeReqDescription
api_keystring–OpenAI API key — required only when mode is embeddings.
casesarrayyesArray of (actual, expected) pairs to evaluate.
modestring–tfidf (default): fast, free, lexical. embeddings: OpenAI text-embedding-3-small, true semantic similarity, requires api_key.
require_allboolean–If true (default), all cases must pass for overall PASS. If false, at least one case passing returns PASS.
thresholdsobject–Pass/fail thresholds (defaults: cosine 0.75, rouge_l 0.5).
NameTypeReqDescription
failednumber––
modestring––
passednumber––
resultsarray––
totalnumber––
verdictstring––
{"cases":[{"actual":"Paris is the capital of France","expected":"The capital of France is Paris"}]}
run_vlm_test_suite ~209

Test a vision model (OpenAI, Anthropic or Gemini) on one image: each test case asks a question and asserts on the answer (contains, not_contains, json_format, min_length, max_length, semantic_contains = TF-IDF cosine ≥ 0.4). Returns per-case PASS/FAIL, the pass rate, an overall PASS/WARNING/FAIL against threshold, and latency. BYOK: your key for the model's provider; the image is fetched only from a public address.

NameTypeReqDescription
api_keystringyesKey for the model's provider.
image_base64string––
image_mime_typestring–For image_base64 (default image/jpeg).
image_urlstring–Public image URL (or image_base64).
modelstringyes–
system_promptstring––
test_casesarrayyes–
thresholdnumber–Pass rate for an overall PASS (default 80).
NameTypeReqDescription
failednumber––
modelstring––
passednumber––
resultsarray––
totalnumber––
verdictstring––
{"api_key":"\u003cyour-api-key\u003e","image_url":"https://www.ia-qa.com/media/discover-report-poster.png","model":"gemini-2.5-flash","test_cases":[{"assertion_type":"contains","assertion_value":"yes","question":"Does the image contain text? Answer yes or no."}]}
similarity_score ~206

Compute text similarity between reference and hypothesis using multiple metrics: Cosine (BoW, TF-IDF), Jaccard, ROUGE-1, ROUGE-2, ROUGE-L, and BLEU. No API key needed. Ideal for LLM eval (expected vs actual), RAG quality checks, and NLG benchmarking. Supports batch mode.

NameTypeReqDescription
batcharray–Batch mode: array of {reference, hypothesis} pairs.
hypothesisstring–Hypothesis / actual text (LLM output)
metricsarray–Metrics to compute (default: all). Options: "cosine_bow", "cosine_tfidf", "jaccard", "rouge1", "rouge2", "rougeL", "bleu"
referencestring–Reference / expected text (ground truth)
thresholdnumber–Optional pass/fail threshold (0-1). Applies to ROUGE-L F1 score.
NameTypeReqDescription
countnumber––
f1number––
modestring––
precisionnumber––
recallnumber––
results–––
{"hypothesis":"the cat sat on the mat","reference":"the cat sat on the mat","threshold":0.5}
test_skill ~323

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 sees only the names + descriptions of this skill and its neighbours and picks which to load (temperature 0); trigger_accuracy PASS ≥80, FIX ≥50, else BLOCK. Your own scenarios give a reproducible gate; generated ones are a signal. Unanswered requests make the run INCONCLUSIVE; so do scenarios left when a call reaches its 22 s budget (split long runs). Default model: Groq on the server key.

NameTypeReqDescription
api_keystring–Key for the chosen model's provider; not needed for the default.
dir_namestring–Folder holding the SKILL.md; name must match it.
lint_onlyboolean–Format check only: no model, no key. The CI gate for a SKILL.md.
modelstring–e.g. gpt-4o-mini. Default openai/gpt-oss-20b (Groq, server key).
other_skillsarray–The skills installed next to this one. Default: six generic built-ins.
scenario_countnumber–Requests to generate when scenarios is omitted (default 6).
scenariosarray–Fixed requests, near misses included (should_trigger false). Max 20.
skill_mdstringyesFull content of the SKILL.md file to test, YAML frontmatter included.
NameTypeReqDescription
lintobject––
scenariosarray––
scenarios_sourcestring––
scorenumber––
step_adherencenumber––
trigger_accuracynumber––
verdictstring––
{"skill_md":"---\nname: json-formatter\ndescription: Pretty-print a JSON string the user pastes.\n---\nFormat the JSON with 2-space indentation."}
Install

How do I install the IA-QA Eval & RAG — 38 tools MCP server?

IA-QA Eval & RAG — 38 tools is a hosted endpoint at https://www.ia-qa.com/mcp/eval, 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-eval 'https://www.ia-qa.com/mcp/eval'
Common questions

What is the IA-QA Eval & RAG — 38 tools MCP server?

IA-QA Eval & RAG — 38 tools is an MCP server listed in the public MCP registry as io.github.JcJamet/ia-qa-eval. LLM & RAG evals: hallucination, eval contracts, semantic tests, tokens & model info. Free, no key. This page covers its hosted endpoint (https://www.ia-qa.com/mcp/eval).

Is the IA-QA Eval & RAG — 38 tools MCP server safe to use?

IA-QA Eval & RAG — 38 tools scores 78 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 Eval & RAG — 38 tools MCP server expose?

IA-QA Eval & RAG — 38 tools exposes 38 tools: get_testing_guidelines, find_tool, hallucination_check, run_eval_contract, run_semantic_tests, and 33 more. Their descriptions and schemas cost roughly 6,986 tokens of context every time the server is loaded.

Does the IA-QA Eval & RAG — 38 tools MCP server require authentication?

No. We connected to IA-QA Eval & RAG — 38 tools without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

Is the IA-QA Eval & RAG — 38 tools MCP server still maintained?

IA-QA Eval & RAG — 38 tools is still listed as active in the MCP registry. We last reached this channel on 4 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.