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
Last scanned (23 hours ago)
Scores higher than 76% of remote servers
Reachable. Last reached 4 Nov 2026.
Category Testing and QA
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
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- No authorisation is required to call this server. Every tool declares its destructiveHint and none is destructive, so open access doesn't expose one. See how to fix → View diagnostics → Partial
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
- DNSSEC is configured correctly; the domain's records validate against the full chain to the root. View diagnostics → Pass
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
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
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.
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 |
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 →
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.
| Name | Type | Req | Description |
|---|---|---|---|
| variant_a | object | yes | First variant configuration with name and score array |
| variant_b | object | yes | Second variant configuration with name and score array |
| Name | Type | Req | Description |
|---|---|---|---|
| count | number | – | – |
| improvement_percent | – | – | – |
| max | – | – | – |
| mean | string | – | – |
| median | string | – | – |
| min | – | – | – |
| recommendation | number | – | – |
| std_dev | string | – | – |
| variant_a | object | – | – |
| variant_b | object | – | – |
| 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.
| Name | Type | Req | Description |
|---|---|---|---|
| reference | string | – | Optional ground-truth answer. If set, each output is also ranked by closeness to it and the closest one is named. |
| responses | array | yes | The outputs to analyze (same task, N models/prompts/versions). Each item is a plain string or { "label": "GPT-4o", "text": "..." }. At least 2 required. |
| Name | Type | Req | Description |
|---|---|---|---|
| consensus | – | – | – |
| count | – | – | – |
| reference_ranking | – | – | – |
| summary | string | – | – |
{"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.
| Name | Type | Req | Description |
|---|---|---|---|
| b | number | – | Length normalization factor (default: 0.75) |
| documents | array | yes | Array of documents to rank |
| k1 | number | – | Term frequency saturation (default: 1.5) |
| query | string | yes | The search query |
| top_k | number | – | Return top K results (default: all) |
| Name | Type | Req | Description |
|---|---|---|---|
| avg_doc_length | number | – | – |
| b | – | – | – |
| bm25_score | number | – | – |
| doc_length | number | – | – |
| doc_preview | – | – | – |
| documents_count | number | – | – |
| 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.
| Name | Type | Req | Description |
|---|---|---|---|
| chunks | array | yes | Retrieved context chunks with .text (required), .source (optional), .score (optional) |
| cite_sources | boolean | – | Add [1], [2] citation numbers (default: true) |
| language | string | – | Response language instruction (e.g. "French", "Spanish") |
| max_context_tokens | number | – | Max tokens for context section (default: 2000) |
| query | string | yes | The user question to answer |
| system_instruction | string | – | Custom system instruction (default: standard RAG grounding instruction) |
| Name | Type | Req | Description |
|---|---|---|---|
| chunks_included | number | – | – |
| chunks_truncated | number | – | – |
| context_tokens_estimate | number | – | – |
| included_chunks | – | – | – |
| prompt | – | – | – |
| system_prompt | – | – | – |
| total_tokens_estimate | number | – | – |
{"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.
| Name | Type | Req | Description |
|---|---|---|---|
| models | array | yes | Array of 2-5 model names (e.g. ["gpt-5","claude-sonnet-4-6","gemini-3.5-flash"]) |
| Name | Type | Req | Description |
|---|---|---|---|
| cheapest | – | – | – |
| largest_context | – | – | – |
| models_compared | number | – | – |
| 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.
| Name | Type | Req | Description |
|---|---|---|---|
| api_key | string | – | Optional API key for the judge model (BYOK). Used only for the judge call; never stored. |
| check_json | boolean | – | Try to parse as JSON and compare structurally (keys, types, values) |
| label_a | string | – | Label for output A (e.g. "GPT-4o", "v1.0") |
| label_b | string | – | Label for output B (e.g. "GPT-5-nano", "v1.1") |
| model | string | – | Optional judge model id (BYOK). When set with api_key, an LLM judge picks a qualitative winner. |
| reference | string | – | Optional ground-truth / expected answer. If set, each output is scored against it and the closer one wins (deterministic). |
| response_a | string | yes | First output (e.g. model A's answer) |
| response_b | string | yes | Second output (e.g. model B's answer) |
| task | string | – | The task/prompt both outputs were answering — used by the LLM judge for context |
| Name | Type | Req | Description |
|---|---|---|---|
| judge | – | – | – |
| labelA | – | – | – |
| labelB | – | – | – |
| metrics | – | – | – |
| summary | string | – | – |
| 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.
| Name | Type | Req | Description |
|---|---|---|---|
| check_facts | boolean | – | Check for contradictory numbers/facts across responses (default: true) |
| responses | array | yes | Array of 2+ LLM responses to compare (same prompt, different runs) |
| Name | Type | Req | Description |
|---|---|---|---|
| avg_similarity | – | – | – |
| fact_contradiction | – | – | – |
| fact_drift | – | – | – |
| length_variance_percent | – | – | – |
| pairwise_scores | – | – | – |
| response_count | number | – | – |
| 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.
| Name | Type | Req | Description |
|---|---|---|---|
| max_output_tokens | number | – | Reserved tokens for output (default: 4096) |
| messages | array | yes | Array of messages (system/user/assistant) |
| model | string | yes | Model id from list_llm_models (e.g. gpt-6.1-sol, claude-sonnet-5-5) |
| Name | Type | Req | Description |
|---|---|---|---|
| breakdown | object | – | – |
| chars | number | – | – |
| context_window | – | – | – |
| fits | – | – | – |
| index | – | – | – |
| message_count | number | – | – |
| model | – | – | – |
| per_message | – | – | – |
| reserved_output_tokens | – | – | – |
| role | – | – | – |
| tokens | – | – | – |
| total_input_tokens | – | – | – |
| total_tokens | – | – | – |
| utilization_percent | string | – | – |
| 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.
| Name | Type | Req | Description |
|---|---|---|---|
| messages | array | yes | Conversation messages in order |
| Name | Type | Req | Description |
|---|---|---|---|
| assistant_messages | number | – | – |
| avg_response_length | number | – | – |
| context_retention | – | – | – |
| has_system_prompt | boolean | – | – |
| repetition_detected | boolean | – | – |
| repetitions | – | – | – |
| topic_drift | – | – | – |
| turn_count | number | – | – |
| user_messages | number | – | – |
{"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.
| Name | Type | Req | Description |
|---|---|---|---|
| expected_conclusion | string | – | Expected final answer to check against (optional) |
| reasoning | string | yes | The CoT / reasoning trace text (e.g. from <think> tags or step-by-step output) |
| Name | Type | Req | Description |
|---|---|---|---|
| backtracking_signals | – | – | – |
| conclusion_matches_expected | – | – | – |
| has_conclusion | boolean | – | – |
| markers | – | – | – |
| reasoning_depth | – | – | – |
| reasoning_depth_label | – | – | – |
| step_count | number | – | – |
| total_chars | number | – | – |
| total_lines | number | – | – |
{"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.
| Name | Type | Req | Description |
|---|---|---|---|
| input | string | yes | Text to count tokens for |
| Name | Type | Req | Description |
|---|---|---|---|
| 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.
| Name | Type | Req | Description |
|---|---|---|---|
| batch | array | – | Batch mode: array of { text_a, text_b } pairs. Overrides text_a/text_b if provided. |
| methods | array | – | Algorithms to use (default: all three). Options: "bow", "tfidf", "ngram" |
| text_a | string | – | First text to compare (single-pair mode) |
| text_b | string | – | Second text to compare (single-pair mode) |
| Name | Type | Req | Description |
|---|---|---|---|
| count | number | – | – |
| mode | string | – | – |
| 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.
| Name | Type | Req | Description |
|---|---|---|---|
| input_tokens | number | yes | Number of input/prompt tokens |
| model | string | yes | Model name, e.g. "gpt-4o", "claude-3.5-sonnet", "deepseek-v3" |
| output_tokens | number | – | Number of output/completion tokens (default: 0) |
| Name | Type | Req | Description |
|---|---|---|---|
| input_cost_usd | string | – | – |
| input_tokens | – | – | – |
| model | – | – | – |
| output_cost_usd | string | – | – |
| output_tokens | – | – | – |
| rates | object | – | – |
| total_cost_usd | string | – | – |
{"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.
| Name | Type | Req | Description |
|---|---|---|---|
| input | string | yes | Raw text (e.g., LLM output) that may contain a JSON object or array |
| Name | Type | Req | Description |
|---|---|---|---|
| json | – | – | – |
| source | string | – | – |
{"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.
| Name | Type | Req | Description |
|---|---|---|---|
| category | string | – | Optional: filter by category — data | encoding | text | llm | qa | rag | dev | security | web |
| max_results | number | – | 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. |
| query | string | yes | Keyword(s) to search in tool name and description (e.g. "cors", "token", "vector", "json") |
| with_schema | boolean | – | Set true to include inputSchema in results (default: false) |
| Name | Type | Req | Description |
|---|---|---|---|
| category | – | – | – |
| count | number | – | – |
| hint | – | – | – |
| query | – | – | – |
| score | – | – | – |
| tool | – | – | – |
| tools | array | – | – |
| total_matches | number | – | – |
| truncated | boolean | – | – |
{"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.
| Name | Type | Req | Description |
|---|---|---|---|
| app_base_url | string | – | [selector_drift] Default http://127.0.0.1:3000; must match .ia-qa/config.json. |
| app_start_command | string | – | [selector_drift] Boots the app, e.g. "npm run start:ci". Never guessed: omitted, the step is a TODO. |
| cli_tools | array | – | Tools to gate on, e.g. ["secret_scan","prompt_injection_scan"]. |
| contract_path | string | – | Default evals/smoke.ia-eval.yaml. |
| cron | string | – | For schedule (default '0 6 * * 1'). |
| fail_on_fail | boolean | – | Default true; false reports without gating. |
| gate | string | – | Default eval_contract. both = CLI checks + eval; all = CLI checks, drift, eval. |
| min_score | number | – | Override the contract min_score (0-100). |
| node_version | string | – | Default "20". |
| provider | string | – | Decides which repo secret is wired (default groq). |
| triggers | array | – | Default push + pull_request. |
| workflow_name | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| gate | string | – | – |
| next_steps | array | – | – |
| notes | array | – | – |
| path | string | – | – |
| secrets_required | array | – | – |
| yaml | string | – | – |
{} 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.
| Name | Type | Req | Description |
|---|---|---|---|
| description | string | yes | Plain-language description of what the LLM under test should do. Be specific: describe inputs, expected behaviour, and constraints. |
| scenario_count | number | – | Number of scenarios to generate (default: 5). Covers happy path + edge cases + adversarial. |
| system_prompt | string | – | Optional system prompt of the LLM under test. Helps generate more accurate test cases. |
| task_type | string | – | Optional task type hint to guide evaluator selection. |
| Name | Type | Req | Description |
|---|---|---|---|
| model_used | string | – | – |
| scenario_count | number | – | – |
| task_type | string | – | – |
| yaml | string | – | – |
{"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.
| Name | Type | Req | Description |
|---|---|---|---|
| topic | string | – | The testing topic to retrieve guidelines for. Omit to get the start-here map and the full list of available topics. |
| Name | Type | Req | Description |
|---|---|---|---|
| available_topics | array | – | – |
| keywords | array | – | – |
| start_here | object | – | – |
| tip | string | – | – |
| topic | – | – | – |
| usage | string | – | – |
{"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.
| Name | Type | Req | Description |
|---|---|---|---|
| answer | string | – | The LLM answer to verify (with context). |
| cases | array | – | Batch instead of answer + context: one result per case, and the worst gate overall. |
| context | string | – | The source text that should ground it. |
| strict | boolean | – | Every sentence must be supported (default false). |
| Name | Type | Req | Description |
|---|---|---|---|
| analysis | – | – | – |
| contradictions | – | – | – |
| detail | string | – | – |
| entities | – | – | – |
| grounded | boolean | – | – |
| grounded_count | number | – | – |
| grounding_score | – | – | – |
| matched_words | number | – | – |
| message | string | – | – |
| numbers | – | – | – |
| overlap | number | – | – |
| sentence | – | – | – |
| total_sentences | number | – | – |
| total_words | number | – | – |
| unbound_claims | – | – | – |
| ungrounded_count | number | – | – |
| unsupported_claims | – | – | – |
| verdict | string | – | – |
{"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.
| Name | Type | Req | Description |
|---|---|---|---|
| provider | string | – | Filter by provider name (case-insensitive). E.g. "Groq", "HuggingFace", "OpenAI", "Anthropic", "Google", "DeepSeek", "xAI", "Ollama". Omit for full catalog. |
| Name | Type | Req | Description |
|---|---|---|---|
| filter | – | – | – |
| models | – | – | – |
| providers | – | – | – |
| total | number | – | – |
{"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.
| Name | Type | Req | Description |
|---|---|---|---|
| expected_format | string | yes | Expected format |
| output | string | yes | The LLM output to validate |
| regex_pattern | string | – | Custom regex pattern (only when expected_format is "regex") |
| Name | Type | Req | Description |
|---|---|---|---|
| checks | – | – | – |
| expected_format | – | – | – |
| failed | – | – | – |
| passed | – | – | – |
| total_checks | number | – | – |
| valid | boolean | – | – |
{"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.
| Name | Type | Req | Description |
|---|---|---|---|
| max_tokens | number | – | Maximum tokens to generate (default: 2048, max: 4096) |
| model | string | – | 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… |
| prompt | string | yes | The user prompt / instruction to send to the model |
| system | string | – | Optional system prompt to set context or persona |
| temperature | number | – | Sampling temperature 0.0–1.5 (default: 0.7) |
| Name | Type | Req | Description |
|---|---|---|---|
| content | – | – | – |
| latency_ms | number | – | – |
| 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.
| Name | Type | Req | Description |
|---|---|---|---|
| output | string | yes | The LLM JSON output (raw string, will be parsed) |
| schema | object | yes | JSON Schema (draft-07 subset) to validate against |
| Name | Type | Req | Description |
|---|---|---|---|
| error_count | number | – | – |
| errors | array | – | – |
| parse_error | – | – | – |
| parsed_type | – | – | – |
| valid | boolean | – | – |
{"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.
| Name | Type | Req | Description |
|---|---|---|---|
| check_json_schema | string | – | If expected_format is JSON, provide required keys as comma-separated list to validate the structure |
| check_safety | boolean | – | Check for PII patterns (emails, phones, SSN), profanity signals, and prompt leakage |
| expected_format | string | – | Expected output format |
| expected_language | string | – | Expected language of the output (en, fr, es, de…). Checks for common words. |
| max_length | number | – | Maximum character length for the output |
| min_length | number | – | Minimum character length for the output |
| must_include | string | – | Comma-separated strings that MUST appear in the output |
| must_not_include | string | – | Comma-separated strings that must NOT appear (e.g. "TODO, FIXME, undefined, NaN") |
| output | string | yes | The LLM output text to validate |
| Name | Type | Req | Description |
|---|---|---|---|
| checks | – | – | – |
| failed | – | – | – |
| passed | – | – | – |
| total | number | – | – |
| 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.
| Name | Type | Req | Description |
|---|---|---|---|
| api_key | string | – | OpenAI key, embeddings mode only. |
| base | object | yes | The original run. |
| baseline_guard | object | – | Floor on the BASE answer; failing it returns INVALID. |
| mode | string | – | tfidf (default, lexical: gate on case/typo, read paraphrase as a trend) or embeddings (OpenAI, needs api_key; required for translation). |
| require_all | boolean | – | 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. |
| thresholds | object | – | Per-relation overrides, 0-1. Calibrate on your own data before gating. |
| variants | array | yes | Answers to transformed versions of the question. |
| Name | Type | Req | Description |
|---|---|---|---|
| baseline | object | – | – |
| mode | string | – | – |
| summary | object | – | – |
| thresholds | object | – | – |
| variants | array | – | – |
| verdict | string | – | – |
| warnings | array | – | – |
| weakest | object | – | – |
{"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.
| Name | Type | Req | Description |
|---|---|---|---|
| model | string | yes | Model name (e.g. "gpt-4o", "claude-3.5-sonnet", "gemini-3.1-pro-preview") |
| Name | Type | Req | Description |
|---|---|---|---|
| model | – | – | – |
| pricing_per_1k | object | – | – |
{"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.
| Name | Type | Req | Description |
|---|---|---|---|
| needle | string | yes | The fact to hide (e.g. "The secret code is ALPHA-42") |
| position | string | – | Where to insert the needle: "start", "middle", "end", "random" (default: "middle") |
| question | string | yes | The question to ask the LLM (e.g. "What is the secret code?") |
| tokens | integer | – | Target haystack size in tokens (default: 5000, max: 100000) |
| Name | Type | Req | Description |
|---|---|---|---|
| estimated_tokens | – | – | – |
| haystack | – | – | – |
| insert_block | – | – | – |
| needle | – | – | – |
| position | – | – | – |
| question | – | – | – |
| total_blocks | number | – | – |
{"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.
| Name | Type | Req | Description |
|---|---|---|---|
| adversarial_prompts | boolean | – | Auto-generate adversarial test variants (jailbreak, injection, edge cases) |
| check_safety | boolean | – | Include safety/PII checks in the rubric |
| expected_behavior | string | – | Description of what the LLM should do (free text) |
| expected_format | string | – | Expected output format |
| max_tokens | number | – | Max token budget for the test |
| must_include | string | – | Required content (comma-separated) |
| must_not_include | string | – | Forbidden content (comma-separated) |
| system_prompt | string | yes | The system prompt under test |
| temperature | number | – | Temperature to use |
| user_prompt | string | yes | The user prompt to send |
| Name | Type | Req | Description |
|---|---|---|---|
| categories | array | – | – |
| instructions | string | – | – |
| rubric | – | – | – |
| test_suite_name | string | – | – |
| total_tests | number | – | – |
{"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.
| Name | Type | Req | Description |
|---|---|---|---|
| chunks | array | yes | Array of text chunks to rank |
| query | string | yes | The user query |
| top_k | number | – | Return top K results (default: all) |
| Name | Type | Req | Description |
|---|---|---|---|
| chunk_preview | – | – | – |
| index | – | – | – |
| keyword_overlap | – | – | – |
| query | – | – | – |
| rank | number | – | – |
| results | – | – | – |
| returned | number | – | – |
| score | string | – | – |
| total_chunks | number | – | – |
{"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." })
| Name | Type | Req | Description |
|---|---|---|---|
| comment | string | – | 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… |
| score | number | yes | Rating from 1 (poor) to 5 (excellent) |
| tool_name | string | yes | Name of the MCP tool to rate (e.g. "format_json", "shield_analyze") |
| Name | Type | Req | Description |
|---|---|---|---|
| comment | – | – | – |
| message | string | – | – |
| ok | boolean | – | – |
| rated_at | string | – | – |
| score | – | – | – |
| stored_chars | number | – | – |
| tool_name | – | – | – |
| truncated | boolean | – | – |
{"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).
| Name | Type | Req | Description |
|---|---|---|---|
| api_key | string | – | NVIDIA key, used only when no passage has a score; never stored. |
| passages | array | yes | 2 to 20 passages. |
| query | string | yes | – |
| threshold | number | – | Minimum Precision@k to PASS (default 0.5). |
| top_k | integer | – | Default 3. |
| Name | Type | Req | Description |
|---|---|---|---|
| has_ground_truth | boolean | – | – |
| k | number | – | – |
| latency_ms | number | – | – |
| mode | string | – | – |
| model | string | – | – |
| precision_at_k | number | – | – |
| ranked | array | – | – |
| recall_at_k | number | – | – |
| threshold | number | – | – |
| total_passages | number | – | – |
| verdict | string | – | – |
{"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.
| Name | Type | Req | Description |
|---|---|---|---|
| expected_keywords | array | – | Keywords a correct answer must contain, as whole words (case-insensitive; a plural in -s/-es counts). Scored as coverage. |
| max_length | number | – | Maximum character length. Scored as a proportional penalty beyond it. |
| question | string | yes | The original question/prompt |
| response | string | yes | The LLM response to score |
| Name | Type | Req | Description |
|---|---|---|---|
| breakdown | object | – | – |
| grade | – | – | – |
| max_score | number | – | – |
| not_measured | array | – | – |
| reason | string | – | – |
| signals | object | – | – |
| stats | object | – | – |
| 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.
| Name | Type | Req | Description |
|---|---|---|---|
| api_keys | object | – | Your keys per provider. Only Groq falls back to the server key; any other provider needs yours. |
| contract_path | string | – | A .ia-eval.yaml under the server's working directory (local use). |
| inline_contract | object | – | The contract as an object: "metadata" ({name, version, model?, provider?}), "expectations", "evaluators" and "scenarios" ([{id, input, expectations?}]). generate_eval_yaml scaffolds one. |
| overrides | object | – | Override contract defaults |
| validate_only | boolean | – | 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. |
| Name | Type | Req | Description |
|---|---|---|---|
| contract_path | – | – | – |
| issues | – | – | – |
| metadata | object | – | – |
| scenario_results | – | – | – |
| summary | object | – | – |
| valid | boolean | – | – |
| 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.
| Name | Type | Req | Description |
|---|---|---|---|
| api_key | string | – | OpenAI API key — required only when mode is embeddings. |
| cases | array | yes | Array of (actual, expected) pairs to evaluate. |
| mode | string | – | tfidf (default): fast, free, lexical. embeddings: OpenAI text-embedding-3-small, true semantic similarity, requires api_key. |
| require_all | boolean | – | If true (default), all cases must pass for overall PASS. If false, at least one case passing returns PASS. |
| thresholds | object | – | Pass/fail thresholds (defaults: cosine 0.75, rouge_l 0.5). |
| Name | Type | Req | Description |
|---|---|---|---|
| failed | number | – | – |
| mode | string | – | – |
| passed | number | – | – |
| results | array | – | – |
| total | number | – | – |
| verdict | string | – | – |
{"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.
| Name | Type | Req | Description |
|---|---|---|---|
| api_key | string | yes | Key for the model's provider. |
| image_base64 | string | – | – |
| image_mime_type | string | – | For image_base64 (default image/jpeg). |
| image_url | string | – | Public image URL (or image_base64). |
| model | string | yes | – |
| system_prompt | string | – | – |
| test_cases | array | yes | – |
| threshold | number | – | Pass rate for an overall PASS (default 80). |
| Name | Type | Req | Description |
|---|---|---|---|
| failed | number | – | – |
| model | string | – | – |
| passed | number | – | – |
| results | array | – | – |
| total | number | – | – |
| verdict | string | – | – |
{"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.
| Name | Type | Req | Description |
|---|---|---|---|
| batch | array | – | Batch mode: array of {reference, hypothesis} pairs. |
| hypothesis | string | – | Hypothesis / actual text (LLM output) |
| metrics | array | – | Metrics to compute (default: all). Options: "cosine_bow", "cosine_tfidf", "jaccard", "rouge1", "rouge2", "rougeL", "bleu" |
| reference | string | – | Reference / expected text (ground truth) |
| threshold | number | – | Optional pass/fail threshold (0-1). Applies to ROUGE-L F1 score. |
| Name | Type | Req | Description |
|---|---|---|---|
| count | number | – | – |
| f1 | number | – | – |
| mode | string | – | – |
| precision | number | – | – |
| recall | number | – | – |
| 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.
| Name | Type | Req | Description |
|---|---|---|---|
| api_key | string | – | Key for the chosen model's provider; not needed for the default. |
| dir_name | string | – | Folder holding the SKILL.md; name must match it. |
| lint_only | boolean | – | Format check only: no model, no key. The CI gate for a SKILL.md. |
| model | string | – | e.g. gpt-4o-mini. Default openai/gpt-oss-20b (Groq, server key). |
| other_skills | array | – | The skills installed next to this one. Default: six generic built-ins. |
| scenario_count | number | – | Requests to generate when scenarios is omitted (default 6). |
| scenarios | array | – | Fixed requests, near misses included (should_trigger false). Max 20. |
| skill_md | string | yes | Full content of the SKILL.md file to test, YAML frontmatter included. |
| Name | Type | Req | Description |
|---|---|---|---|
| lint | object | – | – |
| scenarios | array | – | – |
| scenarios_source | string | – | – |
| score | number | – | – |
| step_adherence | number | – | – |
| trigger_accuracy | number | – | – |
| verdict | string | – | – |
{"skill_md":"---\nname: json-formatter\ndescription: Pretty-print a JSON string the user pastes.\n---\nFormat the JSON with 2-space indentation."} 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
claude mcp add --transport http jcjamet-ia-qa-eval 'https://www.ia-qa.com/mcp/eval'
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.