Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者提供的说明(英文原文)
Tamper-evident audit trails for AI agents — Ed25519-signed, hash-chained, EU AI Act ready.
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
选择你使用的 AI 应用,然后复制设置。
你需要
你用的是哪个应用?
在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。
打开 Claude Desktop → Settings → Developer → Edit Config,把下面的内容粘贴到 claude_desktop_config.json
{
"mcpServers": {
"ai-audit-trail": {
"command": "uvx",
"args": [
"ai-audit-trail"
]
}
}
}在终端中运行这条命令
claude mcp add ai-audit-trail -- uvx ai-audit-trail粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json
{
"mcpServers": {
"ai-audit-trail": {
"command": "uvx",
"args": [
"ai-audit-trail"
]
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
粘贴到项目中的 .vscode/mcp.json
{
"servers": {
"ai-audit-trail": {
"type": "stdio",
"command": "uvx",
"args": [
"ai-audit-trail"
]
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
这个服务器在你的电脑上运行,而 ChatGPT 只能连接互联网上的服务器。请选择其他应用。
你的选择通过 Cookie 保存在这台设备上,无需账户。
这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月9日
注册名称已通过 GitHub 账户 sundsoffice-tech 验证,该账户拥有此仓库
我们还没有从 GitHub 读取这个仓库
我们还没有从 GitHub 读取这个仓库
它在你的电脑上运行,没有互联网端点
在你的电脑上运行,改用本地设置
它在你的电脑上运行;我们只能读取互联网端点的工具列表
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
注册中心没有列出必需的密钥,不过有些服务器会在首次使用时要求你登录。
它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。
GitHub 仓库最后更新于–,最新版本(0.4.7)于6个月前进入注册中心。
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 Python (uv)。
同一分类中有:Spec Driven Development, Remote Desktop Commander, Agilitycms MCP
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:↓ 每周下载量i★ 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.
An MCP server that provides access to Agility CMS. See https://mcp.agilitycms.com for more details.
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
Prove what your AI did, why, and that nobody changed the record.
Tamper-evident Decision Receipts with Ed25519 signatures, SHA-256 hash-chains,
and formal compliance mappings. No blockchain, no SaaS, no lock-in.
Self-hosted, offline-verifiable, Python-native.
The EU AI Act becomes mandatory for high-risk AI systems in August 2026. It requires tamper-evident logs proving every decision was made correctly (Art. 12). Most teams are solving this with normal logging — which is neither tamper-evident nor legally defensible in an audit.
ai-audit-trail closes this gap with cryptographic receipts that any auditor can verify offline, without accessing your systems. Same principle as a blockchain — without the blockchain overhead, the SaaS dependency, or the vendor lock-in.
pip install and 3 lines of code, not a platform migrationai-audit-trail provides the technical building blocks that support EU AI Act, ISO 42001, and NIST AI RMF compliance. It does not, by itself, guarantee regulatory compliance — compliance is an organizational obligation that extends beyond any single software component. See our Shared Responsibility Model below.
pip install ai-audit-trail # Core (Ed25519 + SHA-256 + PII)
pip install "ai-audit-trail[redis]" # + Redis persistence pip install "ai-audit-trail[otel]" # + OpenTelemetry metrics pip install "ai-audit-trail[all]" # Everything
Requirements: Python 3.11+ | No external services required | Works air-gapped
from ai_audit import (
AuditConfig, init_audit_config, ReceiptCollector, ReceiptStore, ReceiptAction, verify_chain, get_verify_key_hex, )
init_audit_config(AuditConfig(is_production=False)) store = ReceiptStore()
collector = ReceiptCollector(trace_id="req-1", tenant_id="acme") collector.set_input("What is our GDPR policy?") collector.add_check("safety", score=0.02, threshold=0.8, fired=False) collector.set_output("Our GDPR policy states that...") collector.set_action(ReceiptAction.ALLOW) collector.emit(store) collector.cleanup()
result = verify_chain(store.get_by_tenant("acme"), get_verify_key_hex()) assert result.valid # Ed25519 + SHA-256 + hash-chain verified
Receipt Creation Verification & Compliance Agentic AI Audit
───────────────── ────────────────────────── ────────────────── ReceiptCollector ──> verify_chain() ToolCallReceipt set_input() build_compliance_summary() TraceGraph (DAG) add_check() build_crosswalk() BehavioralContract set_output() export_evidence_package() ProvenanceChain set_action() SPRTMonitor emit() DriftMonitor │ EpochManager v ReceiptStore ──> StorageBackend ABC (in-memory LRU) InMemoryBackend
Every AI pipeline decision produces a Decision Receipt — a cryptographically sealed, hash-chained record:
| What's proven | How |
|---|---|
| Input integrity | SHA-256 of NFKC-normalized, PII-stripped input |
| Output integrity | SHA-256 of generated output |
| Check results | Ordered check records with scores and thresholds |
| Decision | Action taken (ALLOW / REJECT / ESCALATE / ...) |
| Model provenance | Model ID + config digest |
| Non-repudiation | Ed25519 signature (libsodium) |
| Ordering | Hash-chain linkage (prev_receipt_hash) |
Three-stage verification (< 0.1 ms per receipt):
Ed25519 signature → detects forgery
SHA-256 self-hash → detects corruption Hash-chain link → detects insertions / deletions / reordering
Personal data is stripped before hashing — the audit log never contains raw PII.
from ai_audit import PiiConfig, PiiMode, PiiType
config = PiiConfig( enabled_types=frozenset({PiiType.EMAIL, PiiType.PHONE, PiiType.IP}), mode=PiiMode.REDACT, # or HASH (SHA-256) or MASK (a***m) ) collector = ReceiptCollector(tenant_id="acme", pii_config=config)
| Mode | alice@corp.com becomes |
|---|---|
REDACT | [EMAIL] |
HASH | 3d4e5f8a... (deterministic SHA-256) |
MASK | a***@c***.com |
Encrypt PII fields with per-tenant AES-256-GCM keys. Destroy the key = data permanently unreadable, hash-chain intact.
from ai_audit.shredding import AESGCMDEKStore, encrypt_field, shred_tenant
dek_store = AESGCMDEKStore() dek_store.create_dek("tenant-acme")
field = encrypt_field("sensitive PII", dek_store, "tenant-acme") shred_tenant("tenant-acme", dek_store) # Key destroyed — data unrecoverable
Maps receipt data directly to recognized management controls with evidence pointers.
from ai_audit.crosswalk import build_crosswalk, nist_function_map
crosswalk = build_crosswalk(receipts, chain_intact=True) for entry in crosswalk: print(f"[{entry.status}] {entry.framework} {entry.control_id} — {entry.control_name}")
nist = nist_function_map(receipts) print(nist["GOVERN"].coverage) # 0.0–1.0 print(nist["MEASURE"].status) # PASS / PARTIAL / FAIL
ISO 42001 Controls: A.6.2.8 (Logging), A.7.5 (Provenance), A.6.2.6 (Performance), A.8.4 (Output), A.5.3 (Risk) NIST AI RMF: GOVERN, MAP, MEASURE, MANAGE — with quantitative coverage scores
from ai_audit.report import ComplianceReportGenerator
gen = ComplianceReportGenerator(summary, verify_key_hex=get_verify_key_hex()) gen.to_markdown() # Documentation portals gen.to_json() # Automated pipelines gen.to_html() # Air-gapped servers
Covers Art. 9 (Risk), Art. 12 (Record-Keeping), Art. 13 (Transparency), Art. 17 (Quality), Art. 18 (Logging).
Self-contained signed ZIP for external auditors — no system access required.
from ai_audit.export import export_evidence_package, verify_evidence_package
export_evidence_package(receipts, verify_key_hex, signing_key, "audit_2026.zip")
Sequential Probability Ratio Test — live compliance status per tenant.
from ai_audit.sprt import SPRTMonitor
monitor = SPRTMonitor(tenant_id="acme") for receipt in receipts: state = monitor.update(is_reject=(receipt.action == "reject")) print(state.status) # CERTIFIED | MONITORING | FLAGGED print(state.confidence) # 0.0–1.0
Detects behavioral shifts in real-time — pure Python, no scipy required.
from ai_audit.drift import DriftMonitor
monitor = DriftMonitor(window_size=100) for receipt in receipts: state = monitor.update(receipt.action.value) print(state.status) # STABLE | DRIFTING | CRITICAL_DRIFT print(state.drift_score) # JSD 0.0–1.0
Formal (p, delta, k)-Satisfaction with Reliability Index Theta — transforms EU AI Act requirements into testable specifications.
from ai_audit.contracts import BehavioralContract, Constraint, ContractMonitor
contract = BehavioralContract( contract_id="safety-v1", constraints=[ Constraint(name="no_pii_leak", kind="hard", field="action", operator="!=", value="reject"), Constraint(name="quality", kind="soft", field="checks.safety.score", operator="<=", value=0.1, delta=0.5), ], ) monitor = ContractMonitor(contract) for receipt in receipts: state = monitor.evaluate(receipt)
print(state.p) # Hard constraint satisfaction probability print(state.delta) # Maximum soft deviation observed print(state.k) # Recovery steps after last violation print(state.reliability_index) # Theta: single compliance metric (0.0–1.0) print(state.status) # COMPLIANT | DEGRADED | VIOLATED
Every agent API call Ed25519-signed — no existing framework provides this.
from ai_audit.toolcall import seal_tool_call, verify_tool_call_chain
receipt = seal_tool_call( agent_id="researcher", tool_name="web_search", tool_args={"query": "EU AI Act compliance"}, tool_result="Found 5 relevant documents...", private_key=signing_key, tenant_id="acme", ) assert receipt.verify(signing_key.verify_key)
Audit delegation, handoff, and parallel orchestration — not just linear logs.
from ai_audit.tracegraph import TraceGraph
graph = TraceGraph(trace_id="workflow-1", tenant_id="acme") root = graph.add_node(agent_id="orchestrator", action="plan") graph.add_node(agent_id="researcher", action="search", parent_id=root.node_id) graph.add_node(agent_id="writer", action="draft", parent_id=root.node_id)
assert graph.verify_integrity() # Hash-based tamper detection assert not graph.has_cycles() # DAG validation lineage = graph.get_agent_lineage(leaf_node.node_id) # Root-to-leaf trace
Track WHERE every piece of information came from — proves a decision was not influenced by prompt injection.
from ai_audit.provenance import ProvenanceChain, ProvenanceRecord, SourceType
chain = ProvenanceChain(receipt_id="r1", tenant_id="acme") chain.add(ProvenanceRecord(source_type=SourceType.SYSTEM, source_id="prompt", trust_level=1.0, content_hash="...")) chain.add(ProvenanceRecord(source_type=SourceType.DOCUMENT, source_id="doc-123", trust_level=0.8, content_hash="...")) chain.add(ProvenanceRecord(source_type=SourceType.UNKNOWN, source_id="???", trust_level=0.0, content_hash="..."))
summary = chain.trust_s
只显示了开头部分;其余内容请在仓库中阅读