Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者提供的说明(英文原文)
Verify the facts an agent's action depends on before it acts — ALLOW, REVIEW, or BLOCK.
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
选择你使用的 AI 应用,然后复制设置。
KAVAL_API_KEY, KAVAL_BASE_URL标为机密的值是你账户的钥匙。千万不要分享给别人,也不要粘贴到聊天里。
你需要
你用的是哪个应用?
在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。
打开 Claude Desktop → Settings → Developer → Edit Config,把下面的内容粘贴到 claude_desktop_config.json
{
"mcpServers": {
"kaval": {
"command": "npx",
"args": [
"-y",
"@usekaval/mcp"
],
"env": {
"KAVAL_API_KEY": "your-value",
"KAVAL_BASE_URL": "your-value"
}
}
}
}在终端中运行这条命令
claude mcp add kaval --env KAVAL_API_KEY=your-value --env KAVAL_BASE_URL=your-value -- npx -y @usekaval/mcp运行前请先填写空着的值。
粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json
{
"mcpServers": {
"kaval": {
"command": "npx",
"args": [
"-y",
"@usekaval/mcp"
],
"env": {
"KAVAL_API_KEY": "your-value",
"KAVAL_BASE_URL": "your-value"
}
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
粘贴到项目中的 .vscode/mcp.json
{
"servers": {
"kaval": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@usekaval/mcp"
],
"env": {
"KAVAL_API_KEY": "your-value",
"KAVAL_BASE_URL": "your-value"
}
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
这个服务器在你的电脑上运行,而 ChatGPT 只能连接互联网上的服务器。请选择其他应用。
你的选择通过 Cookie 保存在这台设备上,无需账户。
KAVAL_BASE_URL env这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月7日
注册名称已通过 GitHub 账户 LufeMC 验证,该账户拥有此仓库
我们还没有从 GitHub 读取这个仓库
我们还没有从 GitHub 读取这个仓库
它在你的电脑上运行,没有互联网端点
在你的电脑上运行,改用本地设置
它在你的电脑上运行;我们只能读取互联网端点的工具列表
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
你需要填写:KAVAL_API_KEY
它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。
GitHub 仓库最后更新于–,最新版本(0.7.1)于3个月前进入注册中心。
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 Node.js。
同一分类中有:Spec Driven Development, Remote Desktop Commander, Zendesk
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况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.
Zendesk MCP Pack — tickets, users, organizations via OAuth.
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
Before an AI agent acts, Kaval verifies the facts that action depends on and answers ALLOW, REVIEW, or BLOCK with a signed receipt. This package exposes that as an MCP server.
Policy engines decide whether an action is permitted under the rules; Kaval verifies whether the facts those rules depend on are still true.
This package is a thin client over the hosted Kaval API. All compilation, grounding, and retrieval run server-side, so you bring just a Kaval API key — no model or search keys, no local engine.
0.6 was a breaking release. Nine tools became seven (before later portfolio/extraction tools landed), and everything removed folded into
check; the
API answers
410 tool_retiredfor the old routes and this server translates that into an error
that tells the agent to call
check. See Migrating from 0.5.
npx -y @usekaval/mcp
It speaks MCP over stdio. Point any MCP client at it.
{
"mcpServers": { "kaval": { "command": "npx", "args": ["-y", "@usekaval/mcp"], "env": { "KAVAL_API_KEY": "kv_live_…", }, }, }, }
| Tool | What it does |
|---|---|
check | The one that does the work. Send the action you are about to take (or the claims it rests on) → ALLOW / REVIEW / BLOCK, per-fact status, and a signed receipt. |
get_receipt | The full signed document behind a check's receipt.id — per-fact evidence basis, decision-rule version, signing key. What an agent attaches when it blocks. |
prepare_contract_upload | Create a private PDF upload target. |
ingest_contract | Queue canonical text, an HTTPS document, or an uploaded PDF for extraction. |
get_contract | Get contract processing status, candidate counts, and extraction issue state. |
list_contract_claims | List extracted candidates with exact evidence spans. |
list_contract_extraction_issues | List deterministic extraction failures that need customer review. |
review_contract_claim | Approve, correct, or reject one candidate with immutable version control. |
import_facts | Queue up to 400 reviewed facts for warm checks. |
get_fact_import | Get one bulk import and every item result. |
list_bulletins | Soft-deprecated — filter structured bulletins by payer, policy, code, date, or status. Prefer list_extraction_runs for new integrations. |
get_bulletin | Soft-deprecated — get one structured bulletin with field evidence. Prefer get_extraction_run. |
list_bulletin_extraction_attempts | Soft-deprecated — list customer-readable bulletin extraction status and failures. Prefer list_extraction_runs. |
get_bulletin_extraction_attempt | Soft-deprecated — get one bulletin extraction attempt by source-version id. Prefer get_extraction_run. |
list_training_jobs | List read-only training and evaluation status. |
get_training_job | Get one read-only training job. |
list_training_feedback | List reviewed feedback and its effective training-use state. |
record_training_feedback_consent | Record an explicit training-use decision for one reviewed feedback item. |
create_extraction_schema | Register a JSON Schema Kaval extracts structured records against. Requires policy-update:manage. |
list_extraction_schemas | List the extraction schemas registered in this workspace. |
create_extraction_run | Request a one-off publisher + period extraction run against a bound schema. Requires policy-update:manage. |
get_extraction_run | Get one extraction run by id — status, schema, and result once it succeeds. |
list_extraction_runs | List extraction runs with publisher/period/time filters, cursor pagination, and nested document chrome (pass expand_document: false to omit). |
list_extraction_packages | List the monthly PDF + manifest rollups extraction runs are packaged into. |
list_publishers | List org-owned publishers for this workspace's billing account. |
create_publisher | Create an org-owned publisher (UUID identity; renameable display name). |
get_publisher | Get one org-owned publisher by UUID. |
update_publisher | Rename an org-owned publisher. UUID identity is unchanged. |
add_source | Tell Kaval what to watch — requires publisher_id (org publisher UUID). A URL, a named authority to resolve, or a document you will push in. |
list_sources | What Kaval currently watches for this workspace, including sources it auto-registered after a check cited them. |
remove_source | Stop watching a source and forget it. The only thing that frees a registered/resolved workspace slot (auto-registered citations count there; discovered children use a separate per-parent ceiling). |
update_source | Bind (or unbind) an extraction schema and/or set publisher_id on a watched source. Pass reprocess: true to fill-missing re-extract prior versions. Requires policy-update:manage. |
get_source_version_content | Fetch the captured content of one fetched source version, as raw text or pre-split sections. |
report_outcome | Report what actually happened after a prior check (by receipt.id), so Kaval can calibrate. |
verify | Deprecated pilot alias: one conclusion + explicit evidence_refs → a signed ProofPacket receipt. Use check. |
The server publishes these JSON resources:
kaval://bulletinskaval://bulletins/extraction-attemptskaval://training-jobskaval://training-feedbackkaval://contracts/{contract_id}kaval://contracts/{contract_id}/claimskaval://contracts/{contract_id}/extraction-issueskaval://bulletins/{source_version_id}kaval://bulletins/extraction-attempts/{source_version_id}kaval://fact-imports/{import_id}kaval://training-jobs/{job_id}The training resources are read-only. Feedback review and consent require training:manage.
Bulletin extraction status is read-only. MCP does not expose the operator requeue control.
MCP does not start training or promote a model.
check// arguments
{ "action": "Approve this prior-authorization request at the in-network rate", "context": "payer: Aetna; CPT 12345; plan HMO", "materiality": "critical", }
Or skip extraction entirely by naming the facts:
{
"claims": [ { "subject": "Aetna", "predicate": "requires_prior_auth_for", "object": "CPT 12345", "scope": { "plan": "HMO", "state": "CA" }, }, "The 2024 IBC is the current edition", ], "mode": "fast", }
The response:
| field | meaning |
|---|
| decision | ALLOW — every material fact still holds on fresh evidence, proceed. REVIEW — something is unknown, mid-re-evaluation, or changed at low/medium materiality. REVIEW is never permission to act. BLOCK — a high/critical fact changed, or a critical fact is unknown. | | reason_codes | one or more of ALL_FACTS_HOLD, FACT_CHANGED, FACT_EXPIRED, FACT_UNKNOWN, SOURCE_UPDATED_PENDING_REVIEW, SOURCE_UNREACHABLE, NEW_FACT_UNVERIFIED, COMPILATION_UNCERTAIN | | facts[] | { fingerprint, text, status: holds \| changed \| unknown, materiality, served_from_state, last_verified_at, sources[] } — this is how you see _which_ belief moved | | receipt | { id, signature, signed_at }. Pass receipt.id to report_outcome, or to get_receipt for the full signed document
只显示了开头部分;其余内容请在仓库中阅读