{"id":50960491,"url":"https://github.com/bluwork/kontra-mcp","last_synced_at":"2026-06-18T13:02:25.464Z","repository":{"id":341925120,"uuid":"1171989770","full_name":"bluwork/kontra-mcp","owner":"bluwork","description":null,"archived":false,"fork":false,"pushed_at":"2026-03-03T22:43:27.000Z","size":71,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-04T02:30:12.563Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bluwork.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-03T20:39:59.000Z","updated_at":"2026-03-03T22:43:30.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/bluwork/kontra-mcp","commit_stats":null,"previous_names":["bluwork/kontra-mcp"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/bluwork/kontra-mcp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bluwork%2Fkontra-mcp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bluwork%2Fkontra-mcp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bluwork%2Fkontra-mcp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bluwork%2Fkontra-mcp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bluwork","download_url":"https://codeload.github.com/bluwork/kontra-mcp/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bluwork%2Fkontra-mcp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34491239,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-18T02:00:06.871Z","response_time":128,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-06-18T13:02:24.716Z","updated_at":"2026-06-18T13:02:25.436Z","avatar_url":"https://github.com/bluwork.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Kontra\n\n### The Tenth Man Protocol\n\n\u003e *\"If nine agree, I disagree.\"*\n\nAn MCP tool that stress-tests your decisions with structured contrarian analysis — so blind spots surface before consequences do.\n\n[![npm](https://img.shields.io/npm/v/kontra-mcp)](https://www.npmjs.com/package/kontra-mcp) [![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](LICENSE)\n\n## What You Get\n\nYou say:\n\n\u003e *\"Use kontra to challenge this: We should rewrite our backend from Node.js to Rust. Context: Current stack is Node.js, team of 3, shipping weekly.\"*\n\nKontra returns:\n\n---\n\n### BLIND SPOTS\n\n- **You're measuring the cost of rewriting but not the cost of pausing.** A team of 3 shipping weekly has momentum. The rewrite doesn't just cost engineering hours — it costs 3-6 months of feature development, customer feedback loops, and market positioning that your competitors won't pause for.\n\n- **Rust's safety guarantees solve problems you may not have.** If your Node.js backend isn't failing due to memory bugs or concurrency issues, you're optimizing for a class of problems that isn't hurting you. The rewrite is a solution — what's the problem it solves that your team is actually experiencing?\n\n- **The team's Rust proficiency is unproven at production scale.** Writing Rust that compiles is not the same as writing Rust that ships. Borrow checker fluency, async runtime decisions (Tokio vs. async-std), ecosystem maturity for your specific domain — these are all unknowns that compound under deadline pressure.\n\n### HIDDEN ASSUMPTIONS\n...\n\n### THE STRONGEST COUNTER-ARGUMENT\n...\n\n### WHAT-IF SCENARIOS\n...\n\n---\n\nThat's `counter` mode — the default. There are three more.\n\n## Quick Start\n\n### Claude Code\n\n```bash\nclaude mcp add kontra -- npx -y kontra-mcp\n```\n\nThen ask: *\"Use kontra to analyze my decision to...\"*\n\n\u003cdetails\u003e\n\u003csummary\u003eClaude Desktop\u003c/summary\u003e\n\nAdd to your Claude Desktop config (`~/Library/Application Support/Claude/claude_desktop_config.json` on macOS):\n\n```json\n{\n  \"mcpServers\": {\n    \"kontra\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"kontra-mcp\"]\n    }\n  }\n}\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eCursor / VS Code\u003c/summary\u003e\n\nAdd to your MCP settings:\n\n```json\n{\n  \"kontra\": {\n    \"command\": \"npx\",\n    \"args\": [\"-y\", \"kontra-mcp\"]\n  }\n}\n```\n\n\u003c/details\u003e\n\n## Modes\n\n### `counter` — The Tenth Man\n\n\u003e *\"Consensus is never to be mistaken for correctness.\"*\n\nThe default. Assumes your decision is wrong and builds the strongest possible case against it.\n\n**Produces:** Blind Spots, Hidden Assumptions, The Strongest Counter-Argument, What-If Scenarios\n\n**Best for:** Major decisions where you need someone to steelman the opposing side. Architecture choices, strategy pivots, hiring plans, product bets.\n\n---\n\n### `probe` — The Interrogator\n\n\u003e *\"A good question does more damage to a bad decision than any argument ever could.\"*\n\nAsks 7-10 pointed questions across five lenses — no answers, no analysis, just the questions you haven't asked yourself.\n\n**Produces:** Questions across Motivation, Evidence, Alternatives, Stakes, and Timing\n\n**Best for:** Early-stage decisions where you suspect your reasoning has gaps but aren't sure where. Forces you to confront what you've skipped over.\n\n---\n\n### `redteam` — The Red Team Commander\n\n\u003e *\"Think like an adversary — not a hypothetical one, but a specific, intelligent opponent who wants this decision to fail.\"*\n\nConstructs 3-5 concrete failure scenarios with likelihood ratings, trigger events, cascade sequences, early warning signs, and mitigations.\n\n**Produces:** Ranked failure scenarios with likelihood estimates, plus an Overall Vulnerability Assessment (1-10 scale)\n\n**Best for:** Plans that are already in motion. Launch timelines, migration strategies, organizational changes — anything where you need to know exactly how it breaks.\n\n---\n\n### `premortem` — The Postmortem From the Future\n\n\u003e *\"Prospective hindsight increases the ability to identify reasons for future outcomes by 30%.\"*\n\nImagines the decision was made 12 months ago and failed catastrophically. Writes the full postmortem.\n\n**Produces:** Executive Summary, What Happened (Failure Narrative), Timeline, Root Causes, Signals We Missed, Lessons Learned\n\n**Best for:** High-stakes, hard-to-reverse decisions. Useful when the team is confident and you need to break the spell of inevitability.\n\n## Usage\n\n**Counter a strategy decision:**\n\n\u003e *\"Use kontra to challenge this: We're going all-in on AI agents for our product roadmap.\"*\n\n**Probe a career move:**\n\n\u003e *\"Use kontra in probe mode to question my decision to leave my job and start a SaaS company. Context: I have 8 months of runway, no co-founder, and a B2B idea with 3 LOIs.\"*\n\n**Red team a launch plan:**\n\n\u003e *\"Use kontra in redteam mode against our plan to launch in 6 weeks. Context: We have no staging environment, 40% test coverage, and one DevOps engineer.\"*\n\n**Pre-mortem a hiring decision:**\n\n\u003e *\"Use kontra in premortem mode on: We're hiring 5 junior engineers instead of 2 seniors. Context: Current team is 4 seniors, shipping velocity is the bottleneck.\"*\n\n### Tool Parameters\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `statement` | string | Yes | The decision, plan, or conclusion to analyze |\n| `context` | string | No | Additional background, constraints, or data |\n| `mode` | enum | No | `counter` (default), `probe`, `redteam`, or `premortem` |\n\n## What This Is NOT\n\n- **Not a pros-and-cons generator.** Kontra doesn't weigh both sides. It attacks one side — yours — with full force.\n- **Not a risk assessment framework.** No probability matrices or color-coded dashboards. Structured argumentation, not bureaucratic process.\n- **Not a generic \"be careful\" warning.** Every output is specific to your decision and context. No boilerplate applies-to-anything advice.\n- **Not a replacement for human judgment.** Kontra surfaces what you might miss. You still decide.\n\n## How It Works\n\nKontra uses the **prompt-return pattern**. When called, it constructs a carefully engineered adversarial prompt and returns it as the tool response. Your MCP client's own LLM processes the prompt and produces the analysis.\n\n- **No API keys needed** — uses your client's existing LLM\n- **No additional network calls** — prompt is returned, not executed\n- **Works with any MCP client** — Claude Desktop, Claude Code, Cursor, VS Code\n\nAnalysis quality scales with model capability. Stronger models produce sharper, more specific contrarian analysis.\n\n## Configuration\n\n| Environment Variable | Default | Description |\n|---------------------|---------|-------------|\n| `KONTRA_DEFAULT_MODE` | `counter` | Default analysis mode |\n| `KONTRA_LOG_LEVEL` | `info` | Log verbosity (`debug` \\| `info` \\| `warn` \\| `error`) |\n\n## License\n\nApache-2.0\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbluwork%2Fkontra-mcp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbluwork%2Fkontra-mcp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbluwork%2Fkontra-mcp/lists"}