Skip to main content
Glama

Contradiction MCP

Autonomous Cross-Source Inconsistency & Contradiction Intelligence Engine for AI Agents

CI Pipeline License: MIT Node.js Version TypeScript MCP Specification Vitest Tests Security Audit Code Style Glama Score Smithery Score


NOTE

Project Status: Active Development (v0.3.3)

Contradiction MCP is currently under active development. Core multi-format document ingestion (Markdown, RFC822 .eml, OpenXML .docx, and JSON) and cross-document contradiction discovery are operational and verified. Heuristic classifiers, deep JSON scoping, and public APIs are actively evolving prior to v1.0.0.


The Problem It Solves

Modern engineering ecosystems rely on fragmented, uncoordinated sources of truth:

  • Code Repositories: package.json, Dockerfile, CI/CD workflows (.github/workflows/*.yml)

  • Deployment Manifests: Kubernetes YAML, Helm values, cloud environment configurations

  • Technical Documentation: Architecture guides, runbooks, developer setup portals, READMEs

  • Public Endpoints: OpenAPI/Swagger schemas, status feeds, live web documentation

When these systems diverge—for example, a Kubernetes manifest deploying Node.js 22 while technical documentation instructs developers to run Node.js 18, or conflicting database engine versions across staging and production—silent regressions, deploy failures, and hallucinations in LLM reasoning occur.

Contradiction MCP bridges these silos through automated multi-source ingestion, context-aware contradiction reasoning, source authority and freshness scoring, human-in-the-loop review/resolution workflows, and immutable audit trails.


Related MCP server: SpecLock

Core Capabilities

  • Zero Mocks: Real embedded SQLite with Write-Ahead Logging (WAL), real filesystem I/O with directory containment guards, and real HTTP fetchers with pre-flight DNS validation.

  • Context-Aware Contradiction Engine: Eliminates false positives by understanding semantic contexts:

    • Environments: production vs staging vs development

    • Scopes: file vs deployment vs cluster

    • Roles: source_of_truth vs deployment vs documentation

  • Deterministic SemVer Mathematics & Value Type Isolation: Employs rigorous version range satisfaction algebra rather than naive string comparisons. Strict IPv4/IPv6/host type discrimination ensures IP addresses (e.g. 127.0.0.1) are never misclassified as SemVer versions or compared against ports.

  • Namespace-Aware Leaf Predicate Matching: Protects against heading-level false positives. Parameters under shared Markdown headings (e.g. 2_configuration_quantum_config_yaml_host vs 2_configuration_quantum_config_yaml_port) are discriminated by leaf property semantics so unrelated parameters never falsely match.

  • Multi-Column Matrix & Header Delimiter Parsing: Markdown tables automatically skip table header rows and delimiter rows, cleanly extracting multi-column tables into composite property claims (e.g. python_minimum: 3.12+, python_recommended: 3.13).

  • Visual CI Badge Contradiction Detection: Parses Markdown Shields.io and GitHub Action status badges to uncover visual discrepancies (e.g. conflicting build_status: passing vs build_status: failing badges).

  • Multi-Source Ingestion Pipeline:

    • GitHub Connector: Analyzes runtime engines, Dockerfiles, GitHub Actions workflows, and READMEs.

    • Document Connector: Extracts structured claims from JSON, YAML, Markdown, CSV, TXT, RFC822 (.eml), and OpenXML (.docx) documents with exact page- and line-numbered evidence citations.

    • Public Website Connector: Web crawler hardened with multi-layer SSRF protection against loopback, private IPv4/IPv6 CIDRs, and cloud metadata endpoints (169.254.169.254).

  • Scoring & Advisory Intelligence:

    • AuthorityScorer: Ranks conflicting claims based on source hierarchy and origin credibility.

    • FreshnessScorer: Applies exponential half-life time decay models.

    • EvidenceEvaluator: Quantifies citation directness and snippet quality.

    • ResolutionAdvisor: Generates actionable resolution recommendations without mutating state without operator consent.

  • Review & Resolution Workflows: Full lifecycle transitions (OPEN → REVIEWED → RESOLVED / DISMISSED → REOPENED) backed by append-only audit histories.

  • Dual Transport Architecture: Operates over standard Stdio (for Claude Desktop, Google Antigravity, Cursor) or Streamable HTTP/SSE with Bearer API key authentication and sliding rate limiting.


Limitations & Known Edge Cases

While Contradiction MCP is battle-tested on cross-document and cross-source consistency audits, users and integrating agents should take note of current architectural boundaries and operational edge cases:

  1. Intra-Manifest Hierarchical Collisions (Deeply Nested JSON/YAML/K8s):

    • Behavior: Key-value extraction flattens object hierarchies into leaf tokens. In complex single manifests (such as Kubernetes deployments or Terraform plans), parameters sharing identical leaf keys across distinct blocks (e.g., readinessProbe.initialDelaySeconds vs livenessProbe.initialDelaySeconds, or container resources.requests.cpu vs resources.limits.cpu) can trigger intra-file candidate comparisons and false-positive warnings.

    • Mitigation: Focus analysis on cross-document source verification or filter by external source boundaries (sync_source / compare_sources). Full JSON-path namespace scoping is in development for future releases.

  2. Heuristic Claim Extraction vs Nuanced Prose Negations:

    • Behavior: Heuristic extractors identify explicit version strings, ports, URLs, quantities, and key-value declarations from markdown tables, code fences, and bullet points. Complex natural language nuance, rhetorical negations (e.g., "We initially planned v3.0, but firmly rejected it in favor of v2.4"), or implied conditionals without standard configuration keys might not extract or may produce contradictory assertions requiring manual review.

    • Mitigation: Use explicit tabular or structured key-value declarations in documentation, or use create_claim to programmatically ingest claims with verified predicate semantics.

  3. Connector Security Sandboxing & Network Boundaries:

    • Document Connector: File ingestion is strictly restricted to configured allowedRoots (default: current workspace). Paths outside these roots or attempts to navigate via directory traversal are rejected by design.

    • Website Connector: Enforces strict SSRF protections, blocking private RFC 1918 subnets, loopback interfaces (127.0.0.1, localhost), and cloud instance metadata endpoints (169.254.169.254). HTTP redirects are capped at 5 hops to prevent circular redirect exhaustion. Client-side rendered Single-Page Applications (SPAs) requiring JavaScript execution are not executed dynamically; static HTML snapshots or rendered markdown must be supplied.

    • GitHub Connector: Governed by GitHub REST API rate limits (60 requests/hour unauthenticated; 5,000 requests/hour with GITHUB_TOKEN).

  4. Static Assertions vs Ephemeral Live Infrastructure:

    • Behavior: The engine analyzes declared assertions across files, repositories, API specs, and documentation. It does not probe live runtime network sockets, ephemeral cloud container states, or uncommitted database rows unless synced as structured state documents.

  5. Pairwise Combinatorial Complexity on Monolithic Manifests:

    • Behavior: Files producing >1,000 claims increase pairwise combinations quadratically ($O(N^2)$ worst-case prior to subject grouping and similarity pruning).

    • Mitigation: Bounded file size guards (MAX_FILE_SIZE_BYTES, default 10MB) prevent memory exhaustion. Partition giant monolithic specifications into modular domain or component manifests.

  6. Environment & Scope Assumptions:

    • Behavior: Contradiction MCP recognizes disjoint runtime environments (development, staging, testing, production, deployment, ci). However, if claims are ingested without explicit environment or scope metadata, the engine conservatively assumes they apply to the same global subject scope.

    • Mitigation: Provide explicit environment and scope arguments when syncing sources or creating claims to prevent false positives across heterogeneous environments.

  7. Language & Domain Units:

    • Behavior: Predicate patterns, quantity normalizers (GB, MB, ms, s, ports, semantic versions, comma-formatted numbers), and terminology heuristics are tuned for English technical documentation and standard DevOps configurations. Multi-lingual prose extraction without standard keying is planned for future major releases.


System Architecture

Visual Dataflow

flowchart TD
    subgraph Clients["MCP Clients & IDEs"]
        Claude["Claude Desktop"]
        AGY["Google Antigravity"]
        Cursor["Cursor IDE"]
        HTTP["Remote HTTP / SSE"]
    end

    subgraph Protocol["MCP Protocol Layer"]
        StdioT["StdioServerTransport"]
        HttpT["StreamableHttpTransport"]
        Router["12 Canonical Tools | 4 Resources | 2 Prompts"]
    end

    subgraph Core["Analysis & Intelligence Engine"]
        Engine["ContradictionEngine"]
        Classifier["ContradictionClassifier"]
        Authority["AuthorityScorer"]
        Freshness["FreshnessScorer"]
        Advisor["ResolutionAdvisor"]
    end

    subgraph Connectors["Ingestion Connectors"]
        GH["GitHub Connector"]
        DOC["Document Connector (PDF/YAML/JSON/MD)"]
        WEB["Website Connector (SSRF Guarded)"]
    end

    subgraph Storage["Storage Layer"]
        DB[(SQLite WAL Mode)]
        Audit["Immutable Audit Trail"]
        Backups["Online Live Backups"]
    end

    Claude --> StdioT
    AGY --> StdioT
    Cursor --> StdioT
    HTTP --> HttpT

    StdioT --> Router
    HttpT --> Router

    Router --> Engine
    Router --> Connectors

    Connectors --> DB
    Engine --> Classifier
    Engine --> Authority
    Engine --> Freshness
    Engine --> Advisor

    Engine --> DB
    DB --> Audit
    DB --> Backups

One-Command Quickstart (All IDEs)

Automatically configure Contradiction MCP into your favorite editor with a single command:

Universal CLI Setup

# Google Antigravity (configured in ~/.gemini/config/mcp_config.json and workspace)
npx -y contradiction-mcp install antigravity

# Cursor IDE (configured in ~/.cursor/mcp.json and workspace)
npx -y contradiction-mcp install cursor

# Claude Desktop App (configured in claude_desktop_config.json)
npx -y contradiction-mcp install claude

# Claude Code CLI (configured in ~/.claude.json & via claude mcp add)
npx -y contradiction-mcp install claude-code

# Windsurf IDE (configured in ~/.codeium/windsurf/mcp_config.json)
npx -y contradiction-mcp install windsurf

# Configure ALL detected IDEs simultaneously
npx -y contradiction-mcp install all

# Or install via Smithery CLI
npx -y smithery mcp add dakshshrivastav56/contradiction-mcp

Local Setup from Cloned Source

git clone https://github.com/Daksh-create349/Contradiction-MCP.git
cd "Contradiction MCP/contradiction-mcp"
npm install
npm run build

# Automatically configure in your current environment:
npm run install-mcp

# Or target a specific IDE:
node bin/cli.js install [antigravity|cursor|claude|claude-code|windsurf|all]

Manual IDE Client Configuration

If you prefer manual configuration, add the following configuration block to your client settings:

1. Claude Desktop (claude_desktop_config.json)

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

  • Linux: ~/.config/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "contradiction": {
      "command": "node",
      "args": ["/ABSOLUTE/PATH/TO/contradiction-mcp/dist/index.js"],
      "env": {
        "NODE_ENV": "production",
        "DATABASE_PATH": "/ABSOLUTE/PATH/TO/contradiction-mcp/data/contradiction.db",
        "MCP_TRANSPORT": "stdio",
        "LOG_LEVEL": "error"
      }
    }
  }
}

2. Google Antigravity (mcp_config.json)

  • Global: ~/.gemini/config/mcp_config.json

  • Workspace: <workspace-root>/.agents/mcp_config.json

{
  "mcpServers": {
    "contradiction": {
      "command": "node",
      "args": ["/ABSOLUTE/PATH/TO/contradiction-mcp/dist/index.js"],
      "env": {
        "NODE_ENV": "production",
        "DATABASE_PATH": "/ABSOLUTE/PATH/TO/contradiction-mcp/data/contradiction.db",
        "MCP_TRANSPORT": "stdio",
        "LOG_LEVEL": "error"
      }
    }
  }
}

3. Cursor IDE (.cursor/mcp.json)

{
  "mcpServers": {
    "contradiction": {
      "command": "node",
      "args": ["/ABSOLUTE/PATH/TO/contradiction-mcp/dist/index.js"]
    }
  }
}

4. Streamable HTTP Remote Client

Connect distributed agents or team members to a centralized server daemon:

{
  "mcpServers": {
    "contradiction": {
      "url": "http://localhost:3000/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_SECRET_API_KEY"
      }
    }
  }
}

MCP Interface: 12 Canonical Tools, 4 Resources, 2 Prompts

Contradiction MCP exposes 12 canonical tools engineered to the highest specification standards (Glama Tool Definition Quality Score 5.0 / 5.0 Grade A). Every tool strictly follows verb_noun nomenclature, provides rich typed schemas, and isolates distinct operational domains.

Active Canonical MCP Tools (12)

Tool Name

Operational Domain

Description

Key Arguments

check_health

Diagnostics

Verifies server runtime health, database connectivity, and active connector health

{}

list_sources

Discovery

Lists registered knowledge sources and connector types with pagination

type, limit, offset

test_connection

Connectivity

Validates credentials, permissions, and network reachability without persisting data

type, target, credentials

sync_source

Ingestion

Unified ingestion engine for files, Markdown, Word (.docx), JSON, URLs, or Git repositories

sourceId OR (filePath / url / owner+repo), subject

scan_contradictions

Intelligence

Scans the knowledge base, a source, or a claim for logical/semantic contradictions

sourceId, claimId, limit, minConfidence, includeDismissed

analyze_claim_pair

Intelligence

Performs pairwise contradiction and contextual relationship analysis between two claims

claimIdA, claimIdB

list_claims

Knowledge Base

Lists extracted factual claims with multi-field filtering and pagination

sourceId, subject, predicate, environment, limit, offset

get_claim

Knowledge Base

Retrieves factual claim details, contextual metadata, and audit supersession history

claimId

list_contradictions

Lifecycle

Queries detected contradictions filtered by lifecycle status, severity, and confidence

status, severity, minConfidence, limit, offset

get_contradiction

Lifecycle

Retrieves full contradiction state, conflicting claims, and contextual explanation

contradictionId

advise_resolution

Advisory

Evaluates source authority, freshness, and evidence quality to recommend canonical truth

contradictionId

resolve_contradiction

Resolution

Executes lifecycle transitions (REVIEW, RESOLVE, DISMISS, REOPEN) with audit trail

contradictionId, action, actor, reason, canonicalClaimId

TIP

Full Backwards Compatibility: Legacy tool names (health_check, sync_document, sync_website, sync_github_repository, scan_for_contradictions, scan_claim_for_contradictions, scan_source_for_contradictions, explain_claim_relationship, review_contradiction, dismiss_contradiction, reopen_contradiction, get_contradiction_history, get_claim_history, list_connectors, test_github_connection, sync_sources) continue to function without error via automatic request routing and parameter translation.

Active MCP Resources (4)

  • health://metrics — Static snapshot of uptime, tool invocations, and contradiction tallies.

  • contradiction://{id} — Dynamic resource returning live contradiction state for a specific ID.

  • claim://{id} — Dynamic resource returning factual claim details, context, and provenance.

  • source://{id} — Dynamic resource returning source metadata, type, and trust score.

Active MCP Prompts (2)

  • investigate_contradiction — Interactive prompt guiding contradiction investigation, context analysis, and resolution.

  • review_source_consistency — Agent prompt guiding systematic cross-source consistency audits.


Example Tool Payloads & Responses

Request:

{
  "filePath": "/tmp/deployment_spec.json",
  "subject": "api-server",
  "scope": "deployment",
  "environment": "production",
  "sourceRole": "deployment"
}

Response:

{
  "success": true,
  "sourceId": "76be8d2f-1e3b-48fd-922f-1b499251ac2b",
  "claimsCreated": 2,
  "claimsUpdated": 0
}

Request:

{}

Response:

{
  "status": "completed",
  "claimsScanned": 4,
  "candidatePairs": 2,
  "contradictionsFound": 1,
  "contradictions": [
    {
      "contradictionType": "VERSION_MISMATCH",
      "severity": "HIGH",
      "confidence": 1.0,
      "explanation": "Both claims describe the node_version for 'api-server'. However, architecture_guide.md reports '18.0.0' while deployment_spec.json reports '22.0.0'. Classified as VERSION_MISMATCH with HIGH severity.",
      "priorityScore": 0.93,
      "contradictionId": "2f1691be-9c1f-4e93-a86a-ef0c0ba54f9d"
    }
  ]
}

Request:

{
  "contradictionId": "2f1691be-9c1f-4e93-a86a-ef0c0ba54f9d"
}

Response:

{
  "recommendedClaimId": "a779fa4b-c680-482c-8f31-daf470aaaab7",
  "recommendedValue": "22.0.0",
  "confidenceScore": 0.88,
  "reasoning": "Claim B represents a higher-confidence candidate for current truth because it carries higher operational authority (0.85 vs 0.65) as deployment configuration and is equally fresh.",
  "authorityScoreA": 0.65,
  "authorityScoreB": 0.85
}

Step-by-Step Hands-On Tutorial

Tutorial: Detecting Real Document Contradictions in 30 Seconds

cd contradiction-mcp

# 1. Create two contradictory specifications for the same service:
cat << 'EOF' > /tmp/deployment_spec.json
{
  "node_version": "22.0.0",
  "database": "postgres-16"
}
EOF

cat << 'EOF' > /tmp/architecture_guide.md
# Architecture Guide
node_version: 18.0.0
database: postgres-14
EOF

# 2. Run test script to ingest and scan via Stdio MCP client:
npx tsx -e '
import { StdioClientTransport } from "@modelcontextprotocol/client/stdio";
import { Client } from "@modelcontextprotocol/client";

async function main() {
  const client = new Client({ name: "tester", version: "1.0.0" }, { capabilities: {} });
  await client.connect(new StdioClientTransport({ command: "node", args: ["dist/index.js"] }));

  // Ingest Deployment Spec (canonical: sync_source, role: deployment)
  await client.callTool({
    name: "sync_source",
    arguments: { filePath: "/tmp/deployment_spec.json", subject: "api-server", sourceRole: "deployment", environment: "production" }
  });

  // Ingest Architecture Guide (canonical: sync_source, role: documentation)
  await client.callTool({
    name: "sync_source",
    arguments: { filePath: "/tmp/architecture_guide.md", subject: "api-server", sourceRole: "documentation", environment: "production" }
  });

  // Automatically scan knowledge base (canonical: scan_contradictions)
  const scan = await client.callTool({ name: "scan_contradictions", arguments: {} });
  console.log("\nDISCOVERED CONTRADICTIONS:\n", JSON.stringify(JSON.parse(scan.content[0].text), null, 2));

  await client.close();
}
main();
'

Complete Command Reference

Command

Description

npm run build

Compiles TypeScript and packages SQL migration scripts

npm start

Launches compiled production server (node dist/index.js)

npm run dev

Runs development server with on-the-fly TypeScript execution

npm test

Runs complete Vitest test suite (181 tests across 25 files)

npm run test:coverage

Generates detailed V8 code coverage report

npm run verify

Runs all 62 end-to-end verification gates (protocol, security, heuristics)

npm run demo

Executes live 17-step end-to-end demonstration scenario

npm run smoke

Launches compiled server and verifies real MCP Stdio connectivity

npm run live-test

Runs stdio smoke tests followed by Streamable HTTP integration suite

npm run typecheck

Validates TypeScript static typing (tsc --noEmit) with 0 errors

npm run lint

Lints codebase with ESLint 9 Flat Config (0 errors, 0 warnings)

npm run format:check

Verifies code formatting against Prettier

npm run format

Auto-formats all code using Prettier

npm run install-mcp

Automatically configures MCP settings across Antigravity, Cursor, and Claude

npm run migrate

Executes pending SQLite database schema migrations

npm run seed

Seeds database with realistic demonstration claims and sources

npm run backup

Creates zero-downtime online SQLite backup in backups/

npm run restore <path>

Restores database from a designated backup archive

npm run health

Queries system health status and outputs operational JSON

npm run security:check

Runs npm audit to inspect dependency security vulnerabilities


Environment Variables

Variable

Default

Description

NODE_ENV

development

Runtime mode: development, test, or production

DATABASE_PATH

./data/contradiction.db

Path to SQLite database file or :memory:

MCP_TRANSPORT

stdio

Transport mode: stdio or http

HTTP_PORT

3000

Port for Streamable HTTP server when MCP_TRANSPORT=http

HTTP_HOST

127.0.0.1

Binding address for HTTP daemon (DNS rebinding guarded)

API_KEY

(optional)

Secret bearer token required for HTTP authentication

GITHUB_TOKEN

(optional)

Personal Access Token to prevent GitHub API rate limits

LOG_LEVEL

error

Logging level: debug, info, warn, error

ALLOWED_ROOTS

.

Comma-separated directory paths permitted for file ingestion

MAX_FILE_SIZE_BYTES

10485760 (10MB)

Maximum file size allowed for document ingestion

RATE_LIMIT_MAX

100

Maximum requests permitted per sliding time window

RATE_LIMIT_WINDOW_MS

60000 (1 min)

Sliding rate limiter window in milliseconds


Docker & Container Deployment

Run with Docker

# Build production container (multi-stage, non-root user):
docker build -t contradiction-mcp:latest .

# Run container with persistent data volume:
docker run -d \
  --name contradiction-mcp \
  -p 3000:3000 \
  -v contradiction-data:/app/data \
  -e MCP_TRANSPORT=http \
  -e HTTP_PORT=3000 \
  contradiction-mcp:latest

Run with Docker Compose

docker compose up -d
docker compose ps
docker compose logs -f

Release History

v0.3.1 (2026-09-15)

  • Security & Extraction Hardening: Replaced shell string execution in DocumentConnector with safe execFileSync, eliminating command injection vectors in .docx processing.

  • Website Connector Redirect Safety: Enforced a strict maximum of 5 HTTP redirects to prevent unbounded redirect loops and guaranteed timeout cleanup on all fetch error paths.

  • Authority & Specification Role Scoring: Added 'specification' and 'deployment' to standard claim source roles with a dedicated authority score of 0.75 in AuthorityScorer, preventing specification claims from falling into low-confidence fallbacks.

  • Evidence Metadata Alignment: Aligned connector provenance metadata (lineRange, evidence) with EvidenceEvaluator and AuthorityScorer schema expectations to accurately quantify citation directness and snippet quality.

  • Deterministic Resolution Tie-Breaking: Enhanced ResolutionAdvisor to evaluate evidence quality as a deterministic tie-breaker before falling back to 'uncertain'.

  • Environment Disjointness Heuristics: Expanded ContextAnalyzer environment comparison to recognize non-overlapping tiers (development, staging, testing, production, deployment, ci), eliminating false-positive contradiction flags across distinct environments.

  • Comma-Formatted Numeric Normalization: Stripped comma separators in ValueComparator (isLikelyNumber, normalizeQuantity, compareNumbers) so formatted numbers (e.g., "5,000") compare accurately against integer values.

  • Deterministic Database Pagination: Added SQL OFFSET support and primary key tie-breakers (ORDER BY created_at DESC, id ASC) across listSources, listClaims, and listContradictions queries.

  • Server Tool Delegation Fixes: Delegated test_connection to registered connector implementations and forwarded pagination offsets and sync metadata.

  • Expanded Regression Suite: Added dedicated regression test suite (tests/bugfixes.test.ts), raising test coverage to 181 passing tests across 25 suites.

v0.3.0 (2026-09-14)

  • 12 Canonical Tools Architecture: Streamlined tool interface into 12 orthogonal, strictly typed verb_noun tools (check_health, list_sources, test_connection, sync_source, scan_contradictions, analyze_claim_pair, list_claims, get_claim, list_contradictions, get_contradiction, advise_resolution, resolve_contradiction).

  • Zero-Breaking Backwards Compatibility Routing: Added a transparent request router shim ensuring all legacy tool names continue to function seamlessly with argument translation.

  • Enhanced OpenXML (.docx) Ingestion: Direct extraction of table structures (<w:tr>, <w:tc>) as key-value assertions with XML stripping to eliminate duplicate claims.

  • Multi-Format Cross-Document Consistency: Verified cross-referencing and contradiction discovery across Markdown runbooks, JSON configs, and Word architecture documents.

  • Parametric Claim Queries: Extended SQLite database layer with multi-field filtering (predicate, environment, valueType, limit, offset).

v0.2.1 (2026-09-14)

  • 22 Active MCP Tools: Full interface alignment including scan_source_for_contradictions for targeted source discovery.

  • Section Heading Namespacing in Markdown: Hierarchical markdown headings (## to ######) namespace nested properties (e.g. ### API Gateway $\rightarrow$ api_gateway_port), preventing intra-document collisions while matching nested JSON configurations.

  • Precision Predicate Similarity Guard: Enhanced claimMatcher requiring $\ge 50%$ token overlap on multi-token phrases, eliminating false matches between distinct properties sharing generic suffixes (node_version vs cache_version, runtime_node_version vs runtime_python_version).

  • Scoped JSON Extraction: Streamlined flattenJsonObject to emit unique composite paths, avoiding leaf key duplication explosions.

  • Numeric Claim Validation: Excluded valid single-digit numbers (4, 3) from short-value extraction warnings.

  • Multi-Format Ingestion: End-to-end verified across Markdown, JSON, OpenXML .docx, and Kubernetes manifests.

v0.2.0 (2026-09-13)

  • Initial public release with 21 core MCP tools, SQLite WAL persistence, GitHub, Document, and Website ingestion connectors.


Documentation Index


License

This project is licensed under the MIT License.

MIT License
Copyright (c) 2026 Daksh Srivastava and Contradiction MCP Contributors

Free and open-source software — you are free to use, modify, distribute, sublicense, and deploy Contradiction MCP in personal and commercial environments.

Available Tools

12 tools
contradiction.claims.analyzeA
Read-onlyIdempotent

Performs deep comparative analysis between two factual claims to determine whether they contradict each other. Evaluates semantic meaning, value differences, numeric/temporal ranges, and contextual dimensions (environment divergence, scope, source roles). Returns contradiction classification, severity, confidence score, and detailed explanation. Read-only operation.

ParametersJSON Schema
NameRequiredDescriptionDefault
claimAIdYesThe unique ID of the first claim
claimBIdYesThe unique ID of the second claim
explainContextNoWhether to include detailed contextual relationship dimensions such as SemVer compatibility and role authority (default: true)

Output Schema

ParametersJSON Schema
NameRequiredDescription
severityNoContradiction severity: LOW, MEDIUM, HIGH, CRITICAL
confidenceNoConfidence score between 0.0 and 1.0
explanationNoDetailed explanation of contradiction rationale
suggestedActionNoRecommended resolution action
hasContradictionNoWhether a factual conflict was detected between the claims

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark readOnly, idempotent, and non-destructive, and the description confirms 'Read-only operation'. It adds value by disclosing what the analysis examines (semantic meaning, value differences, numeric/temporal ranges, contextual dimensions) and what it returns, which an agent cannot infer from annotations or schema alone.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences front-load the action, follow with the analytical scope, and end with the return payload. There is no filler, and every clause adds information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With a full output schema, complete parameter descriptions, and safety annotations, the description is nearly complete for invocation. A small gap is the lack of any statement about prerequisites or error behavior (e.g., claims must already exist), but this is minor given the structured data.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the descriptions of claimAId, claimBId, and explainContext already carry full meaning. The tool description adds no parameter-specific detail beyond the generic notion of comparing two claims; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Performs deep comparative analysis between two factual claims' – a specific verb and resource that immediately distinguishes it from the single-claim accessors (claims.get/list) and the conflict-oriented siblings. It further narrows the output to contradiction classification, severity, confidence, and explanation, so an agent can select it without examining the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a clear invocation context: pass two claim IDs and receive a contradiction assessment. It never names alternatives or states when not to use it, so it stops short of the explicit routing of a 5, but the context is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

contradiction.claims.getA
Read-onlyIdempotent

Retrieves complete details for a single factual claim by ID, including its subject, predicate, current and normalized values, provenance evidence, originating source metadata, and chronological historical value transitions over time. Read-only operation.

ParametersJSON Schema
NameRequiredDescriptionDefault
claimIdYesThe unique ID of the claim to retrieve
includeHistoryNoWhether to include full chronological value transitions and superseded historical values (default: true)

Output Schema

ParametersJSON Schema
NameRequiredDescription
claimNoRetrieved claim record
historyNoChronological history of claim values

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already carry readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is known. The description redundantly states 'Read-only operation' and describes return content, but adds no additional behavioral disclosure such as auth requirements, rate limits, or error behavior. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence states the core action, followed by a dense list of return components. No filler, redundant modifiers, or digressions. Every phrase earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers purpose, scope, and return contents. With annotations declaring safety and idempotency, schema covering both parameters, and an output schema present, the description provides all necessary information for correct invocation of this simple read-only tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both claimId and includeHistory are already fully documented. The description's mention of 'by ID' and 'chronological historical value transitions' aligns with these parameters but adds little beyond the schema. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the exact action ('Retrieves complete details for a single factual claim by ID') and enumerates the returned content. By emphasizing 'single... by ID', it clearly distinguishes itself from sibling list tools like contradiction.claims.list, making the tool's scope immediately unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'by ID' implies the tool is for retrieving one known claim rather than listing or scanning, but no explicit alternatives or exclusions are provided. An agent must infer when to use it versus claims.list or claims.analyze, so the guidance is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

contradiction.claims.listA
Read-onlyIdempotent

Queries stored factual assertions and claims extracted from connected sources with flexible filtering by subject, predicate, source, environment, and value type. Read-only operation. Use this tool to explore known facts, find subjects with multiple assertions, or inspect extracted data.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of claims to return (default: 50)
offsetNoPagination offset (default: 0)
subjectNoFilter by claim subject entity name (e.g. "UserAuthService", "API Gateway")
sourceIdNoFilter by originating source identifier
predicateNoFilter by property/predicate name (e.g. "node_version", "min_ram", "http_port")
valueTypeNoFilter by value type (e.g. "quantity", "version", "status", "date", "price", "configuration")
environmentNoFilter by environment context (e.g. "production", "development")

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNoNumber of claims returned in current page
totalNoTotal count of claims matching filters
claimsNoList of retrieved factual claims

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint, idempotentHint, destructiveHint false), and the description's 'Read-only operation' merely restates that. It does add that the data comes from connected sources and that filtering is flexible, but otherwise leaves pagination/behavioral details to the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences front-load the core purpose, state the safety property, and give example use cases without filler. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema and strong annotations, the description gives enough context on purpose and typical use. It could mention when to choose list over claims.get, but this is a minor gap given the schema captures the rest.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and every parameter has a description, so the baseline is 3. The description adds a summary of filterable dimensions but no new parameter-level semantics beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a clear verb and resource ('Queries stored factual assertions and claims...') and names the filtering dimensions, making the listing purpose obvious. It does not explicitly contrast with siblings like claims.get or claims.analyze, so it stops short of full differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear usage context ('explore known facts, find subjects with multiple assertions, or inspect extracted data'), which signals typical scenarios. It doesn't name alternatives or exclusions, so an agent must infer when to prefer the sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

contradiction.conflicts.adviseA
Read-onlyIdempotent

Generates deterministic authority, freshness, and evidence comparison between conflicting claims to advise an AI agent or human reviewer on which claim likely represents current truth and recommended remediation steps. Read-only deterministic calculation.

ParametersJSON Schema
NameRequiredDescriptionDefault
contradictionIdYesThe unique ID of the contradiction record to analyze for resolution advice

Output Schema

ParametersJSON Schema
NameRequiredDescription
rationaleNoAuthority and temporal rationale for the resolution advice
confidenceNoConfidence score from 0.0 to 1.0
contradictionIdNoID of the analyzed contradiction
recommendedActionNoRecommended action: accept_source_a, accept_source_b, update_both, investigate

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description reinforces this with 'Read-only deterministic calculation' and adds the deterministic behavior, which is beyond the annotations. It also discloses the analytical dimensions (authority, freshness, evidence) without contradicting any annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, information-dense sentence that front-loads the core function and then states the recommendation output and read-only nature. It is efficient, though the phrase 'advisory' and 'remediation steps' could be slightly tightened without losing meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple (one parameter, no nested objects), the schema is fully described, annotations cover safety/idempotence, and an output schema exists. The description supplies the decision-making purpose and deterministic/read-only nature, which is sufficient context for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the sole parameter 'contradictionId' is already documented in the schema with 'The unique ID of the contradiction record to analyze for resolution advice'. The description adds no additional parameter-specific meaning, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb ('Generates') and resource ('authority, freshness, and evidence comparison between conflicting claims') with a concrete goal: advising which claim likely represents current truth and remediation steps. This distinguishes it from siblings like contradiction.conflicts.resolve (which implies mutation) and contradiction.conflicts.get (which only retrieves).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The context is clear: use this tool when conflicting claims need authority/freshness/evidence comparison and advisory recommendations. It does not explicitly name alternatives or exclusions, but the purpose is specific enough that an agent can infer when to choose it over siblings, especially the non-mutating 'resolve' sibling.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

contradiction.conflicts.getA
Read-onlyIdempotent

Retrieves complete details of a single contradiction record by ID, including full representations of both conflicting claims, originating source metadata, exact line evidence snippets, and chronological audit trail of all review and resolution actions. Read-only operation.

ParametersJSON Schema
NameRequiredDescriptionDefault
contradictionIdYesThe unique ID of the contradiction record to retrieve
includeAuditHistoryNoWhether to include the full chronological review and resolution audit trail (default: true)

Output Schema

ParametersJSON Schema
NameRequiredDescription
auditTrailNoReview and resolution audit history
contradictionNoFull contradiction details

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, and the description's 'Read-only operation' aligns with these. It adds value by describing the full contents of the returned record, including the chronological audit trail, which clarifies the includeAuditHistory parameter's effect. No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one dense, focused sentence plus the phrase 'Read-only operation.' Every element earns its place: the resource, the ID-based access, the key payload components, and the safety indicator. There is no fluff or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers all essential aspects for a read-only getter: what the resource is, how it is accessed, and what the response includes. An output schema exists, so return-value structure is captured elsewhere. It lacks explicit routing to sibling tools, but for a simple retrieval operation with strong annotations and parameter documentation, it is adequately complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: contradictionId and includeAuditHistory are both clearly documented in the schema. The description's mention of the audit trail echoes the parameter but does not add new syntax or semantic detail beyond the schema. Baseline 3 is appropriate because the schema carries the parameter documentation burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Retrieves') and a precise resource ('a single contradiction record by ID'), and enumerates exactly what is included: both claims, source metadata, line evidence snippets, and the audit trail. This distinguishing detail separates it from list/scan siblings, so an agent knows exactly what this tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description conveys that the tool is for fetching a single record once an ID is known, but it does not explicitly state when to use this over conflicts.list (e.g., for browsing) or conflicts.resolve (for mutations), nor does it mention any exclusions. Usage context is implied rather than articulated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

contradiction.conflicts.listA
Read-onlyIdempotent

Queries stored contradiction records from the database with filtering by resolution status, severity level, contradiction type, and confidence score. Returns enriched contradiction records with associated claim summaries and originating source details. Read-only operation. Use this tool to prioritize and triage conflicts.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoFilter by contradiction classification type string
limitNoMaximum number of records to return (default: 50)
offsetNoPagination offset (default: 0)
statusNoFilter by contradiction lifecycle status (OPEN, REVIEWED, RESOLVED, DISMISSED)
severityNoFilter by severity level (LOW, MEDIUM, HIGH, CRITICAL)
minConfidenceNoFilter by minimum confidence threshold between 0.0 and 1.0

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNoNumber of contradictions returned in current page
totalNoTotal count of contradictions matching filter
contradictionsNoList of contradiction records

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the description's 'Read-only operation' is redundant. It adds some context by specifying the data is 'stored' and 'enriched,' but does not disclose pagination behavior or other operational traits beyond what annotations cover.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise sentences front-load the core querying purpose, then describe the output, confirm read-only behavior, and close with the intended use case. Every sentence contributes value with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The schema fully documents parameters and enums, an output schema exists for return values, and annotations cover safety. The description adds the usage context and enrichment details, making the tool fully understandable for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all six parameters. The description summarizes the filter dimensions but adds no new parameter-level detail beyond what the schema provides, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Queries'), a resource ('stored contradiction records'), and the exact filtering dimensions (status, severity, type, confidence). It also clarifies the returned shape (enriched records with claim summaries and source details), which distinguishes it from sibling tools like conflicts.get and conflicts.scan.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a clear intended use: 'Use this tool to prioritize and triage conflicts.' It does not explicitly state when not to use it or name alternatives, but the purpose context is clear and sufficient for a query/list tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

contradiction.conflicts.resolveA
Idempotent

Updates the lifecycle status and audit trail of a contradiction record. Supports marking as REVIEWED, resolving as RESOLVED with an authoritative chosen claim, dismissing as DISMISSED (acceptable divergence), or reopening back to OPEN. Preserves an immutable audit trail of reviewer identity, decision reason, and timestamp. Mutating operation.

ParametersJSON Schema
NameRequiredDescriptionDefault
actorNoName, email, or agent identifier performing the lifecycle action (defaults to resolvedBy if provided)
notesNoAdditional triage notes or reviewer findings
actionNoLifecycle action to perform: RESOLVE (accepts authoritative claim), REVIEW (marks reviewed), DISMISS (marks acceptable divergence), REOPEN (reopens back to OPEN) (default: RESOLVE)RESOLVE
reasonNoDetailed explanation justifying the decision (required for RESOLVE and DISMISS)
resolvedByNoLegacy parameter: Name or identifier of the resolver when action is RESOLVE
chosenClaimIdNoID of the claim accepted as authoritative (optional for RESOLVE action)
contradictionIdYesThe unique ID of the contradiction record to update

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoID of the updated contradiction
statusNoUpdated contradiction lifecycle status
chosenClaimIdNoAuthoritative claim ID chosen

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already convey mutating/non-read-only behaviorholley and idempotency. The description adds valuable context by stating that the audit trail is immutable and preserved, and by explaining the semantics of each status transition. This goes beyond what annotations alone provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the core purpose. Every clause adds at least one meaningful distinction, though the closing 'Mutating operation' is somewhat redundant with the annotations and the opening verb.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter lifecycle tool, the description covers all action types and important behavioral commitments such as the immutable audit trail. Schema and output schema cover the remaining parameter and return details, so nothing critical is missing for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds meaning by linking actions to the authoritative chosen claim, acceptable divergence, reviewer identity, decision reason, and timestamp, which helps an agent understand which parameters are relevant for each action.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a clear verb and resource: 'Updates the lifecycle status and audit trail of a contradiction record.' It then enumerates the full set of supported transitions, distinguishing this mutating lifecycle tool from read-only siblings like contradiction.conflicts.list and contradiction.conflicts.get.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly scopes the tool to lifecycle/state changes, which is sufficient context for choosing it over read/scan/advise siblings. It does not explicitly name alternatives or exclusions, but the action set makes the intended usage obvious.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

contradiction.conflicts.scanA
Idempotent

Discovers conflicting and inconsistent factual assertions across connected sources. Can scan the entire database, or scope the scan to a specific source, file, or single claim. Uses deterministic candidate grouping, entity resolution, and value comparison algorithms to detect and persist contradictions without duplicates. Mutating and idempotent.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of contradiction results to return (default: 50)
claimIdNoScope scan to a single claim by ID, testing it against all eligible candidate claims
sourceIdNoScope scan to claims originating from a specific source ID, file path, or repository name
minConfidenceNoMinimum confidence threshold between 0.0 and 1.0 (default: 0.35)
includeDismissedNoWhether to include previously dismissed contradictions in output (default: false)

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNoTotal number of contradictions detected
scannedCountNoTotal number of claim candidate pairs evaluated
contradictionsNoDetected contradiction records

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses key behavioral traits beyond the annotations: it uses deterministic candidate grouping, entity resolution, and value comparison algorithms; it persists contradictions; it avoids duplicates; and it is idempotent. The annotations already declare idempotentHint=true and destructiveHint=false, and the description reinforces and expands on this by explaining the mutating-but-idempotent nature. It doesn't mention rate limits or auth, but for this tool the algorithmic and persistence behavior is the most important context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: it states the core purpose in the first sentence, then scoping options, then algorithmic behavior, then the mutating/idempotent trait. Every sentence earns its place, and the most important information (what it does) comes first.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is complete for a scan tool with 5 optional parameters, full schema coverage, and an output schema. It explains the algorithm, persistence, deduplication, and idempotency. The only minor gap is that it doesn't describe the output format, but the output schema exists, so the description needn't explain return values. A 4 is appropriate because it covers the behavioral context well without being exhaustive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all 5 parameters. The description adds context about scoping (source, file, or single claim) that maps to sourceId and claimId, but doesn't add significant detail beyond the schema. Baseline 3 is correct when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: discovering conflicting and inconsistent factual assertions across connected sources. It specifies the resource (contradictions), the action (scan), and the scope options (entire database, specific source, file, or single claim), which distinguishes it from sibling tools like contradiction.conflicts.list (which lists existing conflicts) and contradiction.conflicts.resolve (which resolves them).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context on when to use this tool: when you need to discover contradictions across sources, with optional scoping to a source, file, or claim. It doesn't explicitly name alternatives or exclusions, but the scoping options and the contrast with sibling tools (list, get, resolve) imply the usage context. A 4 is appropriate because it gives clear context but doesn't explicitly say 'use this instead of X when...'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

contradiction.health.checkA
Read-onlyIdempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
verboseNoWhether to include extended diagnostic details such as memory usage, uptime, and connector capabilities (default: false)

Output Schema

ParametersJSON Schema
NameRequiredDescription
mcpNoMCP protocol implementation details
serverNoServer metadata, version, and uptime
statusNoOverall server operational health status (healthy, degraded, unhealthy)
metricsNoOperational snapshot metrics
databaseNoSQLite storage and table status
timestampNoISO-8601 status check timestamp

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes beyond the read-only and idempotent annotations by specifying what the check covers (database connectivity, storage metrics, connectors, runtime diagnostics) and adding that it is safe for repeated invocation. The 'Read-only' phrasing echoes the annotations but does not contradict them and contributes useful operational context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no redundancy: the first states the tool's core function and scope, the second adds usage guidance. The information is front-loaded and every phrase contributes value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-optional-parameter read-only health check with a rich output schema, the description fully covers what the tool does, what it checks, and when to use it. The output schema handles return values, and none of the sibling tools relate to health checks, so nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the only parameter (verbose) is fully described in the schema with its purpose, example values, and default. The tool description adds no additional parameter semantics, but it does not need to because the schema already carries the full burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Checks') with a clearly defined resource ('operational status of the Contradiction MCP server') and enumerates exact aspects of that resource (SQLite connectivity, storage metrics, active connectors, runtime diagnostics). This clearly distinguishes it from sibling tools that focus on conflicts, sources, and claims.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit usage context: it is 'safe to invoke frequently for readiness and liveness probing.' It does not name alternatives or exclusions, but among the given siblings there is no other health-check tool, and the guidance is clear enough to select it when probing server status.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

contradiction.sources.listA
Read-onlyIdempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoOptional filter by source connector type
limitNoMaximum number of ingested source records to return (default: 50)
offsetNoPagination offset for source records (default: 0)

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNoNumber of registered connector instances
sourcesNoIngested source entity records
connectorsNoRegistered connector configurations
sourcesCountNoNumber of ingested source records returned

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds that it is a read-only operation and includes synchronization timestamps and claim counts, which gives useful behavioral context beyond the annotations. It doesn't contradict annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no wasted words. It front-loads the core purpose, includes the read-only note, and ends with a practical usage directive. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is complete for a read-only list tool with a rich output schema and full parameter documentation. It could have mentioned pagination behavior or default limit, but the schema already covers those. The usage context (before scans/sync) adds completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all three parameters (type, limit, offset) with descriptions. The tool description adds no additional parameter semantics beyond what the schema provides, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists registered external data source connectors and ingested source entities, with specific examples (document, website, github) and details like source IDs, timestamps, and claim counts. It distinguishes itself from siblings by focusing on sources rather than conflicts, claims, or health.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says to use this tool to inspect available data sources before initiating scans or synchronization, which provides clear context. It doesn't explicitly name alternatives or when not to use it, but the sibling names and the stated purpose make the usage context clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

contradiction.sources.syncA
Idempotent

Ingests and synchronizes one or more external data sources (local document file, public website URL, or GitHub repository), extracts factual claims with exact line provenance, idempotently updates SQLite storage, and triggers automatic contradiction discovery. Mutating and idempotent operation. Supports single source ingestion or concurrent batch synchronization.

ParametersJSON Schema
NameRequiredDescriptionDefault
batchNoOptional batch array of source requests to synchronize concurrently with failure isolation
inputNoStructured connector input object (e.g. { filePath: "..." }) for flexible invocation
scopeNoScope of the document or claims (e.g. "system", "component", "file")
branchNoOptional branch or tag name when syncing GitHub repositories
sourceNoSource locator: absolute/relative file path for document, public URL for website, or "owner/repo" for GitHub
subjectNoSubject entity name for extracted claims (defaults to filename or repository name)
connectorYesThe external source connector to synchronize (document for local files, website for URLs, github for repositories)
sourceNameNoOptional human-readable friendly label for the source
sourceRoleNoRole of the source in system architecture (e.g. "specification", "configuration", "documentation", "deployment")
environmentNoTarget environment context for extracted claims (e.g. "production", "staging", "development")
runDiscoveryNoWhether to automatically trigger incremental contradiction discovery on touched claims after sync (default: true)

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusNoStatus of synchronization
connectorNoConnector used for sync
durationMsNoSync execution duration in milliseconds
repositoryNoSource name or repository synced
claimsCreatedNoNumber of new claims created
claimsUpdatedNoNumber of existing claims updated

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint false, idempotentHint true, and openWorldHint true. The description adds beyond annotations by noting it triggers automatic contradiction discovery, supports concurrent batch with failure isolation, and extracts claims with exact line provenance. It repeats 'idempotent' but this is consistent with annotations. No contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences and front-loaded with the main purpose. However, the second sentence 'Mutating and idempotent operation' is redundant with the annotations and does not earn its place given the rule against repeating structured data. Still compact and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is complex with 11 parameters and nested objects, but the schema and output schema fill most gaps. The description covers overall behavior, external source types, batch capability, and side effects. It does not discuss return format, but an output schema exists, so that is not required. Complete enough for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all 11 parameters are already documented. The description reinforces connector types (document, website, github) and batch mode, but does not add meaning beyond what the schema provides. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: ingests and synchronizes external data sources, extracts factual claims with exact line provenance, updates SQLite storage, and triggers contradiction discovery. This clearly distinguishes it from siblings like sources.test (testing) and conflicts.scan (scanning) by focusing on ingestion and synchronization.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context that this tool is for ingesting/synchronizing external sources, including single and concurrent batch modes. However, it does not explicitly state when not to use it or name alternative tools like sources.test or sources.list, so no exclusions are provided. The context is clear but lacks explicit comparison to siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

contradiction.sources.testA
Read-onlyIdempotent

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 synchronization.

ParametersJSON Schema
NameRequiredDescriptionDefault
branchNoOptional git branch or tag name to check when testing GitHub repositories
targetYesTarget identifier to validate: "owner/repo" for GitHub, URL for website, or file path for document
connectorYesThe connector type to validate (github, website, document)

Output Schema

ParametersJSON Schema
NameRequiredDescription
targetNoTarget identifier validated
messageNoDiagnostic connection message
connectorNoConnector type tested
accessibleNoWhether target was accessible

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context by explicitly stating it 'does not persist any data or modify state' and that it validates connectivity, authentication, and accessibility. This goes beyond the annotations by clarifying the non-mutating nature in operational terms. It doesn't describe error behavior or return format, but the output schema exists and the annotations carry the safety burden, so a 4 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no wasted words. The core purpose is front-loaded ('Validates connectivity, authentication, and accessibility'), followed by the key non-mutating constraint and a clear usage directive. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a validation tool with 3 parameters, full schema coverage, an output schema, and strong annotations, the description is nearly complete. It covers what the tool does, when to use it, and what it does not do. The only minor gap is that it doesn't describe what happens on failure (e.g., error codes or return structure), but the output schema likely covers return values, and the annotations cover safety. A 4 is appropriate given the strong context signals.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all three parameters (connector, target, branch) with descriptions and enums. The description adds context about what the parameters mean in practice (e.g., 'owner/repo' for GitHub, URL for website, file path for document) but this largely mirrors the schema. The description does not add significant new meaning beyond the schema, so the baseline 3 is correct.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('validates') and resource ('external data source or connector'), and explicitly names example targets (GitHub repository, web URL, local file). It also distinguishes itself from synchronization by noting it does not persist data or modify state, which helps differentiate it from sibling tools like contradiction.sources.sync.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says when to use this tool: 'Use this tool to verify credentials and target reachability prior to running synchronization.' This provides clear context and implies the alternative (synchronization) without needing to name a specific sibling. It also states what it does not do (no persisting data or modifying state), which helps an agent decide between this and mutation-oriented siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 24 tool updatesv0.3.3
    • Removedadvise_resolution
    • Removedanalyze_claim_pair
    • Removedcheck_health
    • Addedcontradiction.claims.analyze
    • Addedcontradiction.claims.get
    • Addedcontradiction.claims.list
    • Addedcontradiction.conflicts.advise
    • Addedcontradiction.conflicts.get
    • Addedcontradiction.conflicts.list
    • Addedcontradiction.conflicts.resolve
    • Addedcontradiction.conflicts.scan
    • Addedcontradiction.health.check
    • Addedcontradiction.sources.list
    • Addedcontradiction.sources.sync
    • Addedcontradiction.sources.test
    • Removedget_claim
    • Removedget_contradiction
    • Removedlist_claims
    • Removedlist_contradictions
    • Removedlist_sources
    • Removedresolve_contradiction
    • Removedscan_contradictions
    • Removedsync_source
    • Removedtest_connection
  2. 28 tool updatesv0.3.0
    • Changedadvise_resolution1 field changed
      • changedInput schema / properties / contradictionId / description
        Previous value: -"The unique ID of the contradiction record"New value: +"The unique ID of the contradiction record to analyze for resolution advice"
    • Changedanalyze_claim_pair1 field changed
      • addedInput schema / properties / explainContext
        Added value: +{
        +  "description": "Whether to include detailed contextual relationship dimensions such as SemVer compatibility and role authority (default: true)",
        +  "type": "boolean"
        +}
    • Addedcheck_health
    • Removeddismiss_contradiction
    • Removedexplain_claim_relationship
    • Addedget_claim
    • Removedget_claim_history
    • Changedget_contradiction2 fields changed
      • changedInput schema / properties / contradictionId / description
        Previous value: -"The unique ID of the contradiction record"New value: +"The unique ID of the contradiction record to retrieve"
      • addedInput schema / properties / includeAuditHistory
        Added value: +{
        +  "description": "Whether to include the full chronological review and resolution audit trail (default: true)",
        +  "type": "boolean"
        +}
    • Removedget_contradiction_history
    • Removedhealth_check
    • Addedlist_claims
    • Removedlist_connectors
    • Changedlist_contradictions3 fields changed
      • changedInput schema / properties / minConfidence / description
        Previous value: -"Filter by minimum confidence threshold"New value: +"Filter by minimum confidence threshold between 0.0 and 1.0"
      • changedInput schema / properties / status / description
        Previous value: -"Filter by contradiction status (OPEN, REVIEWED, RESOLVED, DISMISSED)"New value: +"Filter by contradiction lifecycle status (OPEN, REVIEWED, RESOLVED, DISMISSED)"
      • changedInput schema / properties / type / description
        Previous value: -"Filter by contradiction type string"New value: +"Filter by contradiction classification type string"
    • Addedlist_sources
    • Removedreopen_contradiction
    • Changedresolve_contradiction10 fields changed
      • addedInput schema / properties / action
        Added value: +{
        +  "default": "RESOLVE",
        +  "description": "Lifecycle action to perform: RESOLVE (accepts authoritative claim), REVIEW (marks reviewed), DISMISS (marks acceptable divergence), REOPEN (reopens back to OPEN) (default: RESOLVE)",
        +  "enum": [
        +    "RESOLVE",
        +    "REVIEW",
        +    "DISMISS",
        +    "REOPEN"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / actor
        Added value: +{
        +  "description": "Name, email, or agent identifier performing the lifecycle action (defaults to resolvedBy if provided)",
        +  "type": "string"
        +}
      • changedInput schema / properties / chosenClaimId / description
        Previous value: -"ID of the claim accepted as authoritative (optional)"New value: +"ID of the claim accepted as authoritative (optional for RESOLVE action)"
      • changedInput schema / properties / contradictionId / description
        Previous value: -"The unique ID of the contradiction record to resolve"New value: +"The unique ID of the contradiction record to update"
      • changedInput schema / properties / notes / description
        Previous value: -"Additional resolution notes"New value: +"Additional triage notes or reviewer findings"
      • changedInput schema / properties / reason / description
        Previous value: -"Detailed explanation of why and how this contradiction was resolved"New value: +"Detailed explanation justifying the decision (required for RESOLVE and DISMISS)"
      • removedInput schema / properties / reason / minLength
        Removed value: -1
      • changedInput schema / properties / resolvedBy / description
        Previous value: -"Name or identifier of the resolver"New value: +"Legacy parameter: Name or identifier of the resolver when action is RESOLVE"
      • removedInput schema / properties / resolvedBy / minLength
        Removed value: -1
      • changedInput schema / required
        Previous value: -[
        -  "contradictionId",
        -  "resolvedBy",
        -  "reason"
        -]New value: +[
        +  "contradictionId"
        +]
    • Removedreview_contradiction
    • Removedscan_claim_for_contradictions
    • Addedscan_contradictions
    • Removedscan_for_contradictions
    • Removedscan_source_for_contradictions
    • Removedsync_document
    • Removedsync_github_repository
    • Changedsync_source13 fields changed
      • addedInput schema / properties / batch
        Added value: +{
        +  "description": "Optional batch array of source requests to synchronize concurrently with failure isolation",
        +  "items": {
        +    "properties": {
        +      "connector": {
        +        "type": "string"
        +      },
        +      "input": {
        +        "additionalProperties": {},
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "connector",
        +      "input"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / branch
        Added value: +{
        +  "description": "Optional branch or tag name when syncing GitHub repositories",
        +  "type": "string"
        +}
      • changedInput schema / properties / connector / description
        Previous value: -"The connector identifier (e.g. github, document, website)"New value: +"The external source connector to synchronize (document for local files, website for URLs, github for repositories)"
      • removedInput schema / properties / connector / minLength
        Removed value: -1
      • addedInput schema / properties / environment
        Added value: +{
        +  "description": "Target environment context for extracted claims (e.g. \"production\", \"staging\", \"development\")",
        +  "type": "string"
        +}
      • changedInput schema / properties / input / description
        Previous value: -"Connector-specific input parameters"New value: +"Structured connector input object (e.g. { filePath: \"...\" }) for flexible invocation"
      • changedInput schema / properties / runDiscovery / description
        Previous value: -"Whether to trigger automatic contradiction discovery (default: true)"New value: +"Whether to automatically trigger incremental contradiction discovery on touched claims after sync (default: true)"
      • addedInput schema / properties / scope
        Added value: +{
        +  "description": "Scope of the document or claims (e.g. \"system\", \"component\", \"file\")",
        +  "type": "string"
        +}
      • addedInput schema / properties / source
        Added value: +{
        +  "description": "Source locator: absolute/relative file path for document, public URL for website, or \"owner/repo\" for GitHub",
        +  "type": "string"
        +}
      • addedInput schema / properties / sourceName
        Added value: +{
        +  "description": "Optional human-readable friendly label for the source",
        +  "type": "string"
        +}
      • addedInput schema / properties / sourceRole
        Added value: +{
        +  "description": "Role of the source in system architecture (e.g. \"specification\", \"configuration\", \"documentation\", \"deployment\")",
        +  "type": "string"
        +}
      • addedInput schema / properties / subject
        Added value: +{
        +  "description": "Subject entity name for extracted claims (defaults to filename or repository name)",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "connector",
        -  "input"
        -]New value: +[
        +  "connector"
        +]
    • Removedsync_sources
    • Removedsync_website
    • Addedtest_connection
    • Removedtest_github_connection
  3. 22 tool updatesv0.1.0
    • First observedadvise_resolution
    • First observedanalyze_claim_pair
    • First observeddismiss_contradiction
    • First observedexplain_claim_relationship
    • First observedget_claim_history
    • First observedget_contradiction
    • First observedget_contradiction_history
    • First observedhealth_check
    • First observedlist_connectors
    • First observedlist_contradictions
    • First observedreopen_contradiction
    • First observedresolve_contradiction
    • First observedreview_contradiction
    • First observedscan_claim_for_contradictions
    • First observedscan_for_contradictions
    • First observedscan_source_for_contradictions
    • First observedsync_document
    • First observedsync_github_repository
    • First observedsync_source
    • First observedsync_sources
    • First observedsync_website
    • First observedtest_github_connection

TDQS

A4.2/5.0

Scored across 12 tools

Disambiguation5/5

Each tool targets a distinct resource and action: health check, source management, claim inspection/analysis, and conflict discovery/triage/resolution. The descriptions clearly separate the overlapping analysis tools (claims.analyze vs conflicts.advise) by their output purpose.

Naming Consistency5/5

All tools follow the same dot-separated namespace pattern: contradiction.<resource>.<action>. The action verbs are consistently lowercase and descriptive, creating a predictable and uniform naming convention across the entire toolset.

Tool Count5/5

The 12 tools are well-scoped for a contradiction management service. Each tool serves a clear purpose within source ingestion, claim inspection, conflict scanning, or resolution, with no redundancy or excessive expansion.

Completeness4/5

The core workflow is well covered: source sync/test, claim retrieval/analysis, conflict discovery/listing/advice/resolution. The only notable gaps are the absence of delete or update operations for sources and claims, but these are not essential for the server's primary contradiction-management purpose.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers