Production-quality MCP server for detecting conflicting and inconsistent information across connected sources including documentation, GitHub PRs, websites, and configuration files
The Contradiction MCP server defines 19 tools with consistent naming patterns and reasonable descriptions. However, critical gaps exist: input schemas are not visible in the provided source code, parameter descriptions are present but lack detail on constraints/formats, and output schemas are undocumented. Tool descriptions are well-structured and contextual (averaging ~150-200 chars), meeting the 10-1024 char baseline. Naming follows verb-noun convention (health.check, sources.list, claims.extract) but some tools combine multiple responsibilities (contradiction.analyze.contradictions handles both detection and ranking). Risk categorization is explicit (READ_ONLY, WRITE, DESTRUCTIVE), which aids LLM reasoning. The primary deficiency is schema visibility, without inspectable JSON Schema definitions for inputs and outputs, parameter validation and LLM planning suffer. The server demonstrates moderate quality suitable for internal use but lacks the rigorous schema documentation expected of production systems.
Performs comprehensive contradiction detection across all ingested claims using multi-stage matching and confidence scoring. Identifies conflicting facts, temporal inconsistencies, and incompatible statements. Returns a ranked list of contradictions with severity levels and detailed explanations.
Identifies documentation drift by comparing claims from document sources against operational reality (e.g., GitHub commits, website content, actual configuration files). Reports outdated statements, stale examples, and deprecated information with severity and freshness metrics.
Detects patterns of inconsistency within a single source or across sources, such as outdated documentation, version conflicts, or divergent interpretations of the same entity. Returns detailed findings with cross-reference information and confidence metrics.
Extracts structured claims (subject-predicate-value triples) from unstructured text using heuristic and semantic analysis. Returns a list of claims with confidence scores, sources, and normalized representations suitable for contradiction analysis.
Lists all ingested claims in the contradiction knowledge base with optional filtering by source, confidence score, or date range. Supports pagination and sorting. Use this to explore the current state of tracked facts across all sources.
Input and output schemas not visible in source code. Cannot verify parameter type definitions, constraints, or response field structure.
Parameter descriptions exist but lack specificity on constraints. E.g., 'type' enum for contradiction.sources.list is documented but no description of what each type filters. 'limit' and 'offset' lack minimum/maximum bounds (rubric baseline: 1-100 for page_size, 1-365 for time ranges).
Inferred effective spec: 2026-07-28+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 36 | 2026-07-28+ | v2 |
Queries the indexed claim repository using subject/predicate/value filters, semantic similarity, and pagination. Returns matching claims with provenance, confidence scores, and source references for further analysis or contradiction detection.
Checks the operational status of the Contradiction MCP server, including SQLite database connectivity, storage metrics, active connectors, and runtime diagnostics. Read-only and safe to invoke frequently for readiness and liveness probing.
Generates a comprehensive contradiction analysis report (CSV, JSON, or Markdown) with all detected contradictions, resolutions, and metrics. Useful for compliance documentation, stakeholder communication, and audit trails.
Suggests resolution strategies for detected contradictions based on source credibility, temporal information, semantic analysis, and domain heuristics. Provides actionable recommendations ranked by confidence and feasibility.
Suppresses or mutes a contradiction report when it is determined to be a false positive, acceptable difference, or context-dependent variation. Prevents repeated flagging of the same issue and documents the rationale.
Updates a claim's status, confidence score, or metadata to reflect resolution actions (e.g., marking as deprecated, corrected, superseded). Maintains audit trail of changes and reasons.
Retrieves comprehensive details for a specific contradiction review, including conflicting claims, evidence, source provenance, and historical context. Used to understand the full scope of a detected contradiction before deciding on resolution actions.
Lists all pending contradiction reviews with their current status (pending, approved, rejected, resolved). Supports filtering by severity, source, and date range. Returns paginated results with summary information for each review.
Updates the status and metadata of a contradiction review (approve, reject, mark as resolved, add notes). Records the reviewer's decision and reasoning for audit and compliance tracking.
Registers and ingest a new external data source (document file, website URL, or GitHub repository) into the Contradiction MCP system for continuous monitoring. Requires appropriate connector type (document, website, or github) and source-specific parameters such as file paths, URLs, or repository identifiers. Use this tool after validating connectivity with contradiction.sources.test.
Lists all registered external data source connectors (document, website, github) and ingested source entities tracked by the system, including source IDs, synchronization timestamps, and claim counts. Read-only operation. Use this tool to inspect available data sources before initiating scans or synchronization.
Removes an ingested data source from the Contradiction MCP system and purges all associated claims, contradictions, and historical records. This is a permanent operation and cannot be undone. Use with caution and only when a source is no longer relevant.
Triggers immediate synchronization of all registered data sources or a specific source to ingest the latest claims, statements, and facts from external systems. Blocking operation that validates connectivity and updates claim indexes before returning results. Use this before running contradiction analysis to ensure data freshness.
Validates connectivity, authentication, and accessibility for an external data source or connector (such as a GitHub repository, web URL, or local file) without persisting any data or modifying state. Use this tool to verify credentials and target reachability prior to running full scans or synchronization.
contradiction.analyze.contradictions, contradiction.analyze.inconsistencies, and contradiction.analyze.drifts combine multiple related but distinct operations (detection + ranking + explanation). Should be split: detect_contradictions (read-only, returns list) and rank_contradictions (analysis pass). Reduces cognitive load for LLM tool selection.
No documented output schema or return field structure. Descriptions state 'returns a list of contradictions' or 'returns matching claims' but do not specify fields (e.g., does contradiction contain severity, confidence, source_ids, explanation?). LLMs cannot plan chained calls without knowing what fields are available.
Destructive operations (contradiction.sources.remove, contradiction.resolve.suppress) lack confirmation/dry-run pattern. Descriptions warn 'This is a permanent operation' but no pre-execution confirmation step is documented. Should implement confirmation request pattern to prevent agent mistakes.
Error handling guidance not visible in source. No documented error classification (retryable vs user-fixable vs fatal), no recovery hints. E.g., what error does sources.test return if GitHub credentials are invalid? How should the agent respond?
contradiction.sources.add and contradiction.sources.sync accept source-specific parameters (file paths, URLs, GitHub repo identifiers) but tool definition shows only generic 'type' parameter. Missing parameter enumeration and documentation of connector-specific parameters (e.g., github_owner, github_repo, document_path, website_url). This forces LLM to hallucinate parameter names.
No pagination/result limiting documented for contradiction.claims.extract, contradiction.analyze.contradictions. If a 10,000-page document is extracted or 1000 contradictions exist, what is returned? Rubric baseline requires cap at 20-50 items with pagination support and limit/offset parameters.
Tool responses must include references needed for chaining. E.g., after contradiction.claims.list, can agent call contradiction.claims.search with one of the returned claim IDs? Unclear what field IDs are returned or what parameter names downstream tools expect.