Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者による説明(英語の原文)
Proves software work: triages failing tests, checks whether a test can fail, and reads migrations.
この3つを1つのスコアにまとめることはしません。意見、測定、人気はそれぞれ別のものだからです。
このサーバーのやさしい解説はまだ書いていません。以下はレジストリから読み取った事実です。
使っているAIアプリを選んで、設定をコピーしてください。
OPENAI_API_KEY「秘密」と表示された値は、あなたのアカウントの鍵です。絶対に人に教えたり、チャットに貼り付けたりしないでください。
必要なもの
どのアプリを使っていますか?
上でアプリを選んでください。選んだアプリを覚えておくので、次からはボタンに「…にインストール」と表示されます。
Claude Desktop → Settings → Developer → Edit Config を開き、claude_desktop_config.json にこれを貼り付けます
{
"mcpServers": {
"tewip": {
"command": "npx",
"args": [
"-y",
"tewip-ai",
"mcp"
],
"env": {
"OPENAI_API_KEY": "your-value"
}
}
}
}ターミナルでこれを実行します
claude mcp add tewip --env OPENAI_API_KEY=your-value -- npx -y tewip-ai mcp動かす前に、空欄の値を入力してください。
プロジェクトの .cursor/mcp.json、または ~/.cursor/mcp.json に貼り付けます
{
"mcpServers": {
"tewip": {
"command": "npx",
"args": [
"-y",
"tewip-ai",
"mcp"
],
"env": {
"OPENAI_API_KEY": "your-value"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
プロジェクトの .vscode/mcp.json に貼り付けます
{
"servers": {
"tewip": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"tewip-ai",
"mcp"
],
"env": {
"OPENAI_API_KEY": "your-value"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
これはパソコンで動くサーバーですが、ChatGPTがつなげるのはインターネット上のサーバーだけです。ほかのアプリを選んでください。
選んだアプリは、この端末のCookieに保存されます。アカウントは不要です。
この設定は、作者のレジストリ登録情報から作成しています。READMEと違う場合は、READMEに従ってください。
パソコンで動くサーバーです。インストールすると、ツール一覧がAIアプリに表示されます。
誰でも見られる情報をチェックしており、コードは読んでいません。当てはまらない項目は数に入れていません。 · 2026年11月7日にチェック
レジストリ名は、リポジトリを所有するGitHubアカウント hmamut39 で確認済みです
このリポジトリはまだGitHubから読み取っていません
このリポジトリはまだGitHubから読み取っていません
これはパソコンで動くため、インターネット上のエンドポイントはありません
パソコンで動き、代わりにローカルの設定を使います
パソコンで動くサーバーです。ツール一覧を読み取れるのは、インターネット上のエンドポイントがある場合だけです
レジストリでこのカテゴリにある有効なすべてのサーバーと比較しています。スターは、公開者がリポジトリの所有者である場合だけ数えます。
当てはまる基本チェック1項目のうち1項目に合格しました。コードは読んでいません。キーやトークンを追加する前に、サーバーがどんなアクセスを求めているかを確認し、必要な権限だけを持つキーを使ってください。
入力が必要なもの:OPENAI_API_KEY
あなたのパソコンで動きます。必要なときにAIアプリが起動し、データは作者のサーバーを通りません(サーバー自体がオンラインサービスを呼び出す場合を除きます)。
GitHubリポジトリの最終更新は–、最新バージョン(0.73.1)がレジストリに届いたのは5 日前です。
Claude Desktop、Claude Code、Cursor、VS CodeなどのMCP対応アプリで使えます。パソコンにNode.jsも必要です。
同じカテゴリには:Spec Driven Development, Remote Desktop Commander, Rystic
同じカテゴリで、ほかの作者が作ったサーバー。スターの多い順。
カードの見方:★ GitHubスターi3つの柱:レビュー · チェック · 利用状況i更新=最新バージョンをレジストリに公開した日i
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Start, seed, clock, inspect and diff Rystic API simulators from your agent.
作者のリポジトリから書かれたとおりにコピーしたものです。PopNx MCPは内容を確認・推奨していません。HTML、画像、スクリプトは取り除いています。リンクはこのサイトの外へ移動します。
Tewip (Uyghur *téwip*, تېۋىپ: healer, doctor) is the layer that proves software work - written by a person or by an agent.
Created and maintained by Mamuti Aishan (Hasan) (@hmamut39).
It finds why each failing test failed (a real bug, a flaky test, the environment, test data, or a changed selector), says whether a test could ever fail at all, breaks your code to find out whether the tests would notice, reads what a migration will do to a live database, and gives one verdict on whether a change is done. Every answer carries its evidence and names what decided it: a deterministic rule, the AI model, or a person's correction.
What makes it worth installing is what it refuses to say. It answers *"cannot say"* rather than guessing, it will not narrow a test run it cannot prove safe to narrow, and every report ends with what it did not check. Each number below was measured on strangers' real code, never on fixtures.
It works for every stack: Node.js (node:test, Jest, Vitest, Mocha), Python (pytest, unittest), Java and Kotlin (JUnit, TestNG), Go, .NET, Ruby, PHP and Rust, each checked against its real runner's report (the full list), plus Playwright in depth with traces, selector drift and verified fixes. It also reads the failure wording of the browser and component-test tools on top of those runners (Selenium, WebdriverIO, Cypress, Testing Library for React, Vue and Angular, Vue Test Utils, jest-dom and Jasmine), checked against more than 500 real messages from public projects.
| Where | How |
|---|---|
| Terminal | npm install -g tewip-ai, then tewip explain report.xml, tewip ci owner/repo --pr 12, tewip mcp |
| VS Code, Cursor, Windsurf, VSCodium | the Tewip extension (download): registers Tewip with the editor's AI assistant and adds six commands - explain a report, why CI failed on this branch, the risk review of your change, which flaky tests to quarantine, the security check, and what your corrections add up to |
| JetBrains, Claude, other AI assistants | add the MCP server tewip mcp: fifteen tools, including *has this happened here before?*, *is this requirement covered and passing?* and *what should be done next about this goal?* (see editor setup) |
| Any model, including none | OpenAI, Claude, Gemini, Azure, or a model on your own machine with Ollama - no account, no key, and no source code leaving the building: TEWIP_PROVIDER=ollama. Three quarters of what Tewip answers calls no model at all. How |
| GitHub CI | the Tewip Action: a comment on every pull request, an optional merge gate, verified fix PRs (QUICKSTART) |
Formerly *triage-agent*: the repository moved to hmamut39/tewip, and GitHub redirects the old address. See ROADMAP.md for the plan.
Status: built, and measured on other people's code. Tewip collects failures from any framework, diagnoses them with rules first and a model only for what rules cannot settle, and turns that into work for each role: a CI comment and merge gate, test plans and verified tests, a flake dossier, a PR-risk review, security scanning, tickets in Jira, Rally, GitHub Issues, Azure Boards or Linear, checks generated from a Figma design, specifications written for people, and - opt in, and only when proved - fixes to test or application code. The fix loops are built and measured, not planned: on real labelled CI failures every one of 17 locator suggestions was the locator the developers themselves wrote, a wait fix is kept only after three passes in a row, and a change to application code is kept only when the failing test passes and the whole suite still does. It runs live in GitHub CI and answers questions from AI assistants through MCP. On fresh real Gutenberg CI failures, with the pipeline frozen before labelling, accuracy is 93.4%; across six real datasets it ranges from 86.1% to 99.7%, and the caveats are in eval/README.md.
Tewip decides what a test reaches by following imports, which is a fact rather than a name match - and which cannot see a test that posts a GraphQL query, hits an HTTP route or renders a controller. On a Django, Rails or Spring codebase that is most of the suite, so tewip done used to answer *"cannot say"* to the question that matters most.
A coverage report settles it, and CI almost certainly produces one already. Nothing to configure:
| format | written by | found at |
|---|---|---|
lcov.info | JavaScript, TypeScript, Rust, Go, C++ | coverage/lcov.info, lcov.info |
Cobertura coverage.xml | pytest-cov, coverlet (.NET), simplecov | coverage.xml, coverage/coverage.xml |
| JaCoCo | Java, Kotlin | target/site/jacoco/jacoco.xml, build/reports/... |
| Clover | PHPUnit | clover.xml, build/logs/clover.xml |
With one present, done stops guessing:
### Is the changed code tested?
Yes: the suite executes saleor/graphql/utils/sorting.py.
_Decided by coverage.xml, which records what ran rather than what imports what._
and it will say the opposite just as plainly - *"is in coverage.xml with no line executed, so the suite runs none of this"* is a not ready, not a shrug.
What a coverage report cannot do. It records which lines ran during the whole suite, not which test ran them, so it answers *"is this code tested"* and not *"which tests would notice a change here"*. tewip pick still narrows from imports and still refuses to narrow when it cannot show the rest are unaffected. A report from a different checkout is ignored rather than believed: if the files it names are not on disk, Tewip says nothing instead of reporting the whole change as untested.
A hospital, a bank or a government department usually cannot send source code to a hosted API, and that is most of who this is built for. Tewip runs against a model on the same machine:
# once
curl -fsSL https://ollama.com/install.sh | sh # or ollama.com for Windows and macOS ollama pull qwen3:8b
export TEWIP_PROVIDER=ollama tewip done --diff main...HEAD
No key, no account, no network call off the machine. TEWIP_BASE_URL points the same path at LM Studio, vLLM, llama.cpp's server, or anything else that speaks the OpenAI shape.
What changes and what does not. The deterministic layers - vouch, schema, access, perf, standards - call no model at any time, with any provider, and are unaffected. Only the parts that need judgement use one: explaining a failure, writing a test, drafting a plan. A smaller local model is less accurate at those than a frontier one, and Tewip says which layer decided every answer, so the difference is visible rather than hidden.
A local model is also less likely to be *constrained* to the schema it was asked for: some backends accept the request and quietly do not enforce it. Tewip reads a reply that arrives inside a markdown fence or after a sentence of preamble, and still refuses one with no JSON in it at all.
Most failures never reach a model. On 3,556 real CI failures from six public projects, the deterministic rules answered 75.1% on their own - and on the labelled ones they answered correctly 1,979 times out of 2,012 (98.4%). A rule-answered failure costs nothing, explains itself, and gives the same answer every time.
Only the remaining quarter is sent to a model, so triaging 1,000 real failures costs about $1.12 at gpt-5.4-mini's published price. That is measured, not estimated: three real uncached calls on held-out failures billed 3,624 prompt and 499 completion tokens each. A real week costs less, because a failure that repeats is answered from cache, and a failure someone has corrected never goes to the model again.
Tewip prints what every command costs, caps its own spend, and works with no key at all - the rules run on their own and everything they cannot settle is left as UNKNOWN rather than guessed.
npm i -g tewip-ai
cd your-project tewip
tewip on its own looks at your project and names the two or three commands that will tell you something, with your own paths in them — and says plainly what it cannot answer here. It reads the directory and stops: nothing is run, nothing is written, about a second.
Here is what Tewip can tell you about **this** project, in the order worth doing.
1. `tewip vouch` 282 test files here (282 JavaScript or TypeScript). This reads them and names the ones that cannot fail - no model, a second or two.
2. `tewip schema --diff main...HEAD` 165 migrations here (165 SQL). This says what a change would do to a live database before it runs.
Everything below is the full list, for when you want it.
Giving it to your team (or another company): [TEAM-GUIDE.md](TEAM-GUIDE.md) — what to install, what each role uses it for, and what it never does.
Putting it on a real repository: [QUICKSTART.md](QUICKSTART.md) — ten minutes, copy-paste, and what to check on the first failing run.
Tell Playwright to write a blob report in CI. It's a built-in reporter, so there's no triage-agent code in your config:
// playwright.config.ts
reporter: process.env.CI ? [['list'], ['blob']] : 'list', use: { trace: 'retain-on-failure' },
Then add one step after your tests:
permissions:
contents: write # only needed for autofix pull-requests: write issues: write actions: read # lets it read the failed job's log when no test report was written
steps:
Run the verdict verbs in CI (Phase 38, new) — one step, as many checks as you want:
- uses: hmamut39/tewip@main
with: mode: check checks: schema, access, vouch # or: done, standards, perf, or all gate: blocking # optional: fail the job on what a verb calls blocking
Every check runs even when an earlier one found something, so a pull request gets the whole picture in one push. The gate is deliberately narrower than the report: it fails only on what the verb itself calls blocking, because a gate that fires on advice teaches a team to pass continue-on-error. A check with nothing to look at says so and never fails the job — no migrations in the diff is not a pass.
Use `@main` or `v0.46.0` or later. Every tag before that shipped an
action.ymlwhose
description contained an unquoted colon, which YAML reads as a nested mapping — the runner answered
*"Failed to load action.yml"* and the action never ran. It is fixed, and there is now a test over
the manifest so it cannot come back.
On every run, the action:
冒頭だけを表示しています。続きはリポジトリで読めます