contradiction-mcp
This server is an MCP-powered contradiction intelligence engine that ingests multi-format sources, extracts factual claims, detects cross-source inconsistencies, and supports review/resolution workflows.
Health & diagnostics: Check server health, database connectivity, runtime metrics, and connector status.
Source discovery & testing: List registered sources/connectors and validate connectivity to GitHub repos, websites, or local files without persisting data.
Multi-source ingestion: Synchronize documents (Markdown, JSON, YAML, CSV, TXT, EML, DOCX), public websites, and GitHub repositories; extract structured claims with line-level provenance.
Contradiction scanning: Scan the full knowledge base, a single source, or an individual claim to discover conflicting assertions with confidence scores and severity ratings.
Pairwise claim analysis: Compare two claims to determine contradictions, contextual divergence, and suggested actions.- Claims knowledge base: List, filter, and retrieve detailed claim records including provenance, normalized values, and historical value transitions.
Contradiction management: List, filter, and inspect contradiction records with audit trails, evidence snippets, and associated claims.
Resolution advisory: Generate deterministic authority/freshness/evidence-based recommendations on which claim likely represents current truth.
Lifecycle resolution: Review, resolve, dismiss, or reopen contradictions with immutable audit trails and actor/reason tracking.
Ingests and analyzes GitHub repositories via a dedicated GitHub Connector, extracting structured, line-cited claims from runtime engine configurations, Dockerfiles, GitHub Actions/CI workflow files, and READMEs in order to detect cross-source contradictions and inconsistencies between code, deployment configurations, and documentation.
Contradiction MCP
Autonomous Cross-Source Inconsistency & Contradiction Intelligence Engine for AI Agents
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:
productionvsstagingvsdevelopmentScopes:
filevsdeploymentvsclusterRoles:
source_of_truthvsdeploymentvsdocumentation
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_hostvs2_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: passingvsbuild_status: failingbadges).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:
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.initialDelaySecondsvslivenessProbe.initialDelaySeconds, or containerresources.requests.cpuvsresources.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.
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_claimto programmatically ingest claims with verified predicate semantics.
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).
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.
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.
Environment & Scope Assumptions:
Behavior: Contradiction MCP recognizes disjoint runtime environments (
development,staging,testing,production,deployment,ci). However, if claims are ingested without explicitenvironmentorscopemetadata, the engine conservatively assumes they apply to the same global subject scope.Mitigation: Provide explicit
environmentandscopearguments when syncing sources or creating claims to prevent false positives across heterogeneous environments.
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 --> BackupsOne-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-mcpLocal 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.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.jsonLinux:
~/.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.jsonWorkspace:
<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 |
| Diagnostics | Verifies server runtime health, database connectivity, and active connector health |
|
| Discovery | Lists registered knowledge sources and connector types with pagination |
|
| Connectivity | Validates credentials, permissions, and network reachability without persisting data |
|
| Ingestion | Unified ingestion engine for files, Markdown, Word (.docx), JSON, URLs, or Git repositories |
|
| Intelligence | Scans the knowledge base, a source, or a claim for logical/semantic contradictions |
|
| Intelligence | Performs pairwise contradiction and contextual relationship analysis between two claims |
|
| Knowledge Base | Lists extracted factual claims with multi-field filtering and pagination |
|
| Knowledge Base | Retrieves factual claim details, contextual metadata, and audit supersession history |
|
| Lifecycle | Queries detected contradictions filtered by lifecycle status, severity, and confidence |
|
| Lifecycle | Retrieves full contradiction state, conflicting claims, and contextual explanation |
|
| Advisory | Evaluates source authority, freshness, and evidence quality to recommend canonical truth |
|
| Resolution | Executes lifecycle transitions ( |
|
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 |
| Compiles TypeScript and packages SQL migration scripts |
| Launches compiled production server ( |
| Runs development server with on-the-fly TypeScript execution |
| Runs complete Vitest test suite (181 tests across 25 files) |
| Generates detailed V8 code coverage report |
| Runs all 62 end-to-end verification gates (protocol, security, heuristics) |
| Executes live 17-step end-to-end demonstration scenario |
| Launches compiled server and verifies real MCP Stdio connectivity |
| Runs stdio smoke tests followed by Streamable HTTP integration suite |
| Validates TypeScript static typing ( |
| Lints codebase with ESLint 9 Flat Config (0 errors, 0 warnings) |
| Verifies code formatting against Prettier |
| Auto-formats all code using Prettier |
| Automatically configures MCP settings across Antigravity, Cursor, and Claude |
| Executes pending SQLite database schema migrations |
| Seeds database with realistic demonstration claims and sources |
| Creates zero-downtime online SQLite backup in |
| Restores database from a designated backup archive |
| Queries system health status and outputs operational JSON |
| Runs |
Environment Variables
Variable | Default | Description |
|
| Runtime mode: |
|
| Path to SQLite database file or |
|
| Transport mode: |
|
| Port for Streamable HTTP server when |
|
| Binding address for HTTP daemon (DNS rebinding guarded) |
| (optional) | Secret bearer token required for HTTP authentication |
| (optional) | Personal Access Token to prevent GitHub API rate limits |
|
| Logging level: |
|
| Comma-separated directory paths permitted for file ingestion |
|
| Maximum file size allowed for document ingestion |
|
| Maximum requests permitted per sliding time window |
|
| 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:latestRun with Docker Compose
docker compose up -d
docker compose ps
docker compose logs -fRelease History
v0.3.1 (2026-09-15)
Security & Extraction Hardening: Replaced shell string execution in
DocumentConnectorwith safeexecFileSync, eliminating command injection vectors in.docxprocessing.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 of0.75inAuthorityScorer, preventing specification claims from falling into low-confidence fallbacks.Evidence Metadata Alignment: Aligned connector provenance metadata (
lineRange,evidence) withEvidenceEvaluatorandAuthorityScorerschema expectations to accurately quantify citation directness and snippet quality.Deterministic Resolution Tie-Breaking: Enhanced
ResolutionAdvisorto evaluate evidence quality as a deterministic tie-breaker before falling back to'uncertain'.Environment Disjointness Heuristics: Expanded
ContextAnalyzerenvironment 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
OFFSETsupport and primary key tie-breakers (ORDER BY created_at DESC, id ASC) acrosslistSources,listClaims, andlistContradictionsqueries.Server Tool Delegation Fixes: Delegated
test_connectionto 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_nountools (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_contradictionsfor 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
claimMatcherrequiring $\ge 50%$ token overlap on multi-token phrases, eliminating false matches between distinct properties sharing generic suffixes (node_versionvscache_version,runtime_node_versionvsruntime_python_version).Scoped JSON Extraction: Streamlined
flattenJsonObjectto 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
Architecture Guide — Layered design, protocol topology, and component contracts.
Security Model — Multi-layer SSRF defenses, directory containment, and scope authorizations.
Connectors Reference — GitHub, Document (PDF/JSON/YAML/CSV/TXT), and Website connectors.
Database & Migrations — Schema definitions, audit tables, and WAL configuration.
Operations & Runbook — Online backups, rate limiting, scheduling, and graceful shutdown.
Testing Strategy — Zero-mock philosophy, test suite itemization, and benchmarks.
Practical Examples — Detailed walkthroughs of real-world contradiction scenarios.
License
This project is licensed under the MIT License.
MIT License
Copyright (c) 2026 Daksh Srivastava and Contradiction MCP ContributorsFree and open-source software — you are free to use, modify, distribute, sublicense, and deploy Contradiction MCP in personal and commercial environments.
Available Tools
12 toolscontradiction.claims.analyzeARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| claimAId | Yes | The unique ID of the first claim | |
| claimBId | Yes | The unique ID of the second claim | |
| explainContext | No | Whether to include detailed contextual relationship dimensions such as SemVer compatibility and role authority (default: true) |
Output Schema
| Name | Required | Description |
|---|---|---|
| severity | No | Contradiction severity: LOW, MEDIUM, HIGH, CRITICAL |
| confidence | No | Confidence score between 0.0 and 1.0 |
| explanation | No | Detailed explanation of contradiction rationale |
| suggestedAction | No | Recommended resolution action |
| hasContradiction | No | Whether a factual conflict was detected between the claims |
TDQS
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.
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.
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.
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.
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.
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.getARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| claimId | Yes | The unique ID of the claim to retrieve | |
| includeHistory | No | Whether to include full chronological value transitions and superseded historical values (default: true) |
Output Schema
| Name | Required | Description |
|---|---|---|
| claim | No | Retrieved claim record |
| history | No | Chronological history of claim values |
TDQS
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.
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.
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.
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.
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.
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.listARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of claims to return (default: 50) | |
| offset | No | Pagination offset (default: 0) | |
| subject | No | Filter by claim subject entity name (e.g. "UserAuthService", "API Gateway") | |
| sourceId | No | Filter by originating source identifier | |
| predicate | No | Filter by property/predicate name (e.g. "node_version", "min_ram", "http_port") | |
| valueType | No | Filter by value type (e.g. "quantity", "version", "status", "date", "price", "configuration") | |
| environment | No | Filter by environment context (e.g. "production", "development") |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | Number of claims returned in current page |
| total | No | Total count of claims matching filters |
| claims | No | List of retrieved factual claims |
TDQS
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.
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.
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.
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.
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.
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.adviseARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| contradictionId | Yes | The unique ID of the contradiction record to analyze for resolution advice |
Output Schema
| Name | Required | Description |
|---|---|---|
| rationale | No | Authority and temporal rationale for the resolution advice |
| confidence | No | Confidence score from 0.0 to 1.0 |
| contradictionId | No | ID of the analyzed contradiction |
| recommendedAction | No | Recommended action: accept_source_a, accept_source_b, update_both, investigate |
TDQS
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.
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.
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.
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.
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.
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.getARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| contradictionId | Yes | The unique ID of the contradiction record to retrieve | |
| includeAuditHistory | No | Whether to include the full chronological review and resolution audit trail (default: true) |
Output Schema
| Name | Required | Description |
|---|---|---|
| auditTrail | No | Review and resolution audit history |
| contradiction | No | Full contradiction details |
TDQS
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.
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.
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.
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.
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.
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.listARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Filter by contradiction classification type string | |
| limit | No | Maximum number of records to return (default: 50) | |
| offset | No | Pagination offset (default: 0) | |
| status | No | Filter by contradiction lifecycle status (OPEN, REVIEWED, RESOLVED, DISMISSED) | |
| severity | No | Filter by severity level (LOW, MEDIUM, HIGH, CRITICAL) | |
| minConfidence | No | Filter by minimum confidence threshold between 0.0 and 1.0 |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | Number of contradictions returned in current page |
| total | No | Total count of contradictions matching filter |
| contradictions | No | List of contradiction records |
TDQS
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.
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.
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.
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.
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.
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.resolveAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| actor | No | Name, email, or agent identifier performing the lifecycle action (defaults to resolvedBy if provided) | |
| notes | No | Additional triage notes or reviewer findings | |
| action | No | Lifecycle action to perform: RESOLVE (accepts authoritative claim), REVIEW (marks reviewed), DISMISS (marks acceptable divergence), REOPEN (reopens back to OPEN) (default: RESOLVE) | RESOLVE |
| reason | No | Detailed explanation justifying the decision (required for RESOLVE and DISMISS) | |
| resolvedBy | No | Legacy parameter: Name or identifier of the resolver when action is RESOLVE | |
| chosenClaimId | No | ID of the claim accepted as authoritative (optional for RESOLVE action) | |
| contradictionId | Yes | The unique ID of the contradiction record to update |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | ID of the updated contradiction |
| status | No | Updated contradiction lifecycle status |
| chosenClaimId | No | Authoritative claim ID chosen |
TDQS
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.
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.
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.
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.
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.
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.scanAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of contradiction results to return (default: 50) | |
| claimId | No | Scope scan to a single claim by ID, testing it against all eligible candidate claims | |
| sourceId | No | Scope scan to claims originating from a specific source ID, file path, or repository name | |
| minConfidence | No | Minimum confidence threshold between 0.0 and 1.0 (default: 0.35) | |
| includeDismissed | No | Whether to include previously dismissed contradictions in output (default: false) |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | Total number of contradictions detected |
| scannedCount | No | Total number of claim candidate pairs evaluated |
| contradictions | No | Detected contradiction records |
TDQS
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.
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.
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.
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.
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.
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.checkARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| verbose | No | Whether to include extended diagnostic details such as memory usage, uptime, and connector capabilities (default: false) |
Output Schema
| Name | Required | Description |
|---|---|---|
| mcp | No | MCP protocol implementation details |
| server | No | Server metadata, version, and uptime |
| status | No | Overall server operational health status (healthy, degraded, unhealthy) |
| metrics | No | Operational snapshot metrics |
| database | No | SQLite storage and table status |
| timestamp | No | ISO-8601 status check timestamp |
TDQS
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.
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.
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.
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.
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.
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.listARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Optional filter by source connector type | |
| limit | No | Maximum number of ingested source records to return (default: 50) | |
| offset | No | Pagination offset for source records (default: 0) |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | Number of registered connector instances |
| sources | No | Ingested source entity records |
| connectors | No | Registered connector configurations |
| sourcesCount | No | Number of ingested source records returned |
TDQS
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.
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.
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.
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.
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.
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.syncAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| batch | No | Optional batch array of source requests to synchronize concurrently with failure isolation | |
| input | No | Structured connector input object (e.g. { filePath: "..." }) for flexible invocation | |
| scope | No | Scope of the document or claims (e.g. "system", "component", "file") | |
| branch | No | Optional branch or tag name when syncing GitHub repositories | |
| source | No | Source locator: absolute/relative file path for document, public URL for website, or "owner/repo" for GitHub | |
| subject | No | Subject entity name for extracted claims (defaults to filename or repository name) | |
| connector | Yes | The external source connector to synchronize (document for local files, website for URLs, github for repositories) | |
| sourceName | No | Optional human-readable friendly label for the source | |
| sourceRole | No | Role of the source in system architecture (e.g. "specification", "configuration", "documentation", "deployment") | |
| environment | No | Target environment context for extracted claims (e.g. "production", "staging", "development") | |
| runDiscovery | No | Whether to automatically trigger incremental contradiction discovery on touched claims after sync (default: true) |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | No | Status of synchronization |
| connector | No | Connector used for sync |
| durationMs | No | Sync execution duration in milliseconds |
| repository | No | Source name or repository synced |
| claimsCreated | No | Number of new claims created |
| claimsUpdated | No | Number of existing claims updated |
TDQS
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.
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.
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.
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.
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.
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.testARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| branch | No | Optional git branch or tag name to check when testing GitHub repositories | |
| target | Yes | Target identifier to validate: "owner/repo" for GitHub, URL for website, or file path for document | |
| connector | Yes | The connector type to validate (github, website, document) |
Output Schema
| Name | Required | Description |
|---|---|---|
| target | No | Target identifier validated |
| message | No | Diagnostic connection message |
| connector | No | Connector type tested |
| accessible | No | Whether target was accessible |
TDQS
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.
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.
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.
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.
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.
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.
24 tool updates
v0.3.3- Removed
advise_resolution - Removed
analyze_claim_pair - Removed
check_health - Added
contradiction.claims.analyze - Added
contradiction.claims.get - Added
contradiction.claims.list - Added
contradiction.conflicts.advise - Added
contradiction.conflicts.get - Added
contradiction.conflicts.list - Added
contradiction.conflicts.resolve - Added
contradiction.conflicts.scan - Added
contradiction.health.check - Added
contradiction.sources.list - Added
contradiction.sources.sync - Added
contradiction.sources.test - Removed
get_claim - Removed
get_contradiction - Removed
list_claims - Removed
list_contradictions - Removed
list_sources - Removed
resolve_contradiction - Removed
scan_contradictions - Removed
sync_source - Removed
test_connection
28 tool updates
v0.3.0- Changed
advise_resolution1 field changed- changed
Input schema / properties / contradictionId / descriptionPrevious value: -"The unique ID of the contradiction record"New value: +"The unique ID of the contradiction record to analyze for resolution advice"
- Changed
analyze_claim_pair1 field changed- added
Input schema / properties / explainContextAdded value: +{ + "description": "Whether to include detailed contextual relationship dimensions such as SemVer compatibility and role authority (default: true)", + "type": "boolean" +}
- Added
check_health - Removed
dismiss_contradiction - Removed
explain_claim_relationship - Added
get_claim - Removed
get_claim_history - Changed
get_contradiction2 fields changed- changed
Input schema / properties / contradictionId / descriptionPrevious value: -"The unique ID of the contradiction record"New value: +"The unique ID of the contradiction record to retrieve" - added
Input schema / properties / includeAuditHistoryAdded value: +{ + "description": "Whether to include the full chronological review and resolution audit trail (default: true)", + "type": "boolean" +}
- Removed
get_contradiction_history - Removed
health_check - Added
list_claims - Removed
list_connectors - Changed
list_contradictions3 fields changed- changed
Input schema / properties / minConfidence / descriptionPrevious value: -"Filter by minimum confidence threshold"New value: +"Filter by minimum confidence threshold between 0.0 and 1.0" - changed
Input schema / properties / status / descriptionPrevious value: -"Filter by contradiction status (OPEN, REVIEWED, RESOLVED, DISMISSED)"New value: +"Filter by contradiction lifecycle status (OPEN, REVIEWED, RESOLVED, DISMISSED)" - changed
Input schema / properties / type / descriptionPrevious value: -"Filter by contradiction type string"New value: +"Filter by contradiction classification type string"
- Added
list_sources - Removed
reopen_contradiction - Changed
resolve_contradiction10 fields changed- added
Input schema / properties / actionAdded 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" +} - added
Input schema / properties / actorAdded value: +{ + "description": "Name, email, or agent identifier performing the lifecycle action (defaults to resolvedBy if provided)", + "type": "string" +} - changed
Input schema / properties / chosenClaimId / descriptionPrevious value: -"ID of the claim accepted as authoritative (optional)"New value: +"ID of the claim accepted as authoritative (optional for RESOLVE action)" - changed
Input schema / properties / contradictionId / descriptionPrevious value: -"The unique ID of the contradiction record to resolve"New value: +"The unique ID of the contradiction record to update" - changed
Input schema / properties / notes / descriptionPrevious value: -"Additional resolution notes"New value: +"Additional triage notes or reviewer findings" - changed
Input schema / properties / reason / descriptionPrevious value: -"Detailed explanation of why and how this contradiction was resolved"New value: +"Detailed explanation justifying the decision (required for RESOLVE and DISMISS)" - removed
Input schema / properties / reason / minLengthRemoved value: -1 - changed
Input schema / properties / resolvedBy / descriptionPrevious value: -"Name or identifier of the resolver"New value: +"Legacy parameter: Name or identifier of the resolver when action is RESOLVE" - removed
Input schema / properties / resolvedBy / minLengthRemoved value: -1 - changed
Input schema / requiredPrevious value: -[ - "contradictionId", - "resolvedBy", - "reason" -]New value: +[ + "contradictionId" +]
- Removed
review_contradiction - Removed
scan_claim_for_contradictions - Added
scan_contradictions - Removed
scan_for_contradictions - Removed
scan_source_for_contradictions - Removed
sync_document - Removed
sync_github_repository - Changed
sync_source13 fields changed- added
Input schema / properties / batchAdded 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" +} - added
Input schema / properties / branchAdded value: +{ + "description": "Optional branch or tag name when syncing GitHub repositories", + "type": "string" +} - changed
Input schema / properties / connector / descriptionPrevious 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)" - removed
Input schema / properties / connector / minLengthRemoved value: -1 - added
Input schema / properties / environmentAdded value: +{ + "description": "Target environment context for extracted claims (e.g. \"production\", \"staging\", \"development\")", + "type": "string" +} - changed
Input schema / properties / input / descriptionPrevious value: -"Connector-specific input parameters"New value: +"Structured connector input object (e.g. { filePath: \"...\" }) for flexible invocation" - changed
Input schema / properties / runDiscovery / descriptionPrevious 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)" - added
Input schema / properties / scopeAdded value: +{ + "description": "Scope of the document or claims (e.g. \"system\", \"component\", \"file\")", + "type": "string" +} - added
Input schema / properties / sourceAdded value: +{ + "description": "Source locator: absolute/relative file path for document, public URL for website, or \"owner/repo\" for GitHub", + "type": "string" +} - added
Input schema / properties / sourceNameAdded value: +{ + "description": "Optional human-readable friendly label for the source", + "type": "string" +} - added
Input schema / properties / sourceRoleAdded value: +{ + "description": "Role of the source in system architecture (e.g. \"specification\", \"configuration\", \"documentation\", \"deployment\")", + "type": "string" +} - added
Input schema / properties / subjectAdded value: +{ + "description": "Subject entity name for extracted claims (defaults to filename or repository name)", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "connector", - "input" -]New value: +[ + "connector" +]
- Removed
sync_sources - Removed
sync_website - Added
test_connection - Removed
test_github_connection
22 tool updates
v0.1.0- First observed
advise_resolution - First observed
analyze_claim_pair - First observed
dismiss_contradiction - First observed
explain_claim_relationship - First observed
get_claim_history - First observed
get_contradiction - First observed
get_contradiction_history - First observed
health_check - First observed
list_connectors - First observed
list_contradictions - First observed
reopen_contradiction - First observed
resolve_contradiction - First observed
review_contradiction - First observed
scan_claim_for_contradictions - First observed
scan_for_contradictions - First observed
scan_source_for_contradictions - First observed
sync_document - First observed
sync_github_repository - First observed
sync_source - First observed
sync_sources - First observed
sync_website - First observed
test_github_connection
TDQS
Scored across 12 tools
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.
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.
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.
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
Related MCP Connectors
Code intelligence platform for AI agents. 20 tools for architecture, security & impact analysis.
Cross-agent artifact workspace with provenance across Claude Code, Codex, Cursor, LangGraph.
Persistent AI memory with semantic search, conflict detection, and ticketing.
Pre-execution governance for AI agents. Deterministic PASS/FAIL/REVIEW verdicts, replayable proof.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenancePersistent decision memory and contradiction detection for AI coding agents. Enforces architectural consistency across sessions — the agent cannot code until it loads prior decisions. Human resolves conflicts on a dashboard or in chat.1MIT
- AlicenseNot gradedqualityAmaintenanceAI Constraint Engine that enforces CLAUDE.md, .cursorrules, and AGENTS.md rules as laws. 51 MCP tools for semantic conflict detection, patch review, drift scoring, pre-commit hooks, and Guardian Mode. Catches euphemisms, temporal evasion, and hidden violations that keyword matching misses.95 npm25MIT
- AlicenseAqualityAmaintenanceHosted memory for AI agents that learns from outcomes, with shared rooms. One key across Claude, Cursor & ChatGPT.6111,285 npm25MIT
- AlicenseAqualityDmaintenanceEnables AI agents to map cross-repository dependencies, detect breaking changes in API contracts, and assess impact across services.10MIT