@vextlabs/stoa-mcp
v0.2.0
Published
MCP server for STOA. Gives any MCP client (Claude Desktop, IDEs, agents) the tools to prove-or-permit an AI action before it commits and verify its receipt — against the open STOA API. From Vext Labs.
Maintainers
Readme
@vextlabs/stoa-mcp
An MCP server for STOA. Gives any MCP client — Claude Desktop, an IDE, an agent runtime — the tools to prove-or-permit an AI action before it commits and verify a receipt, against the open STOA API. Apache-2.0, zero dependencies, JSON-RPC over stdio.
Get a token at https://tryvext.com/api-keys (scope: cap_call).
Tools
| Tool | What it does |
|------|--------------|
| stoa_gate | Prove-or-permit an action. Returns allow / block / abstain with per-kernel reasons + a signed permit when allowed. Call it before any risky tool use. |
| stoa_simulate | Dry-run: a signed prediction of what an action WOULD do, executing nothing. |
| stoa_verify_receipt | Fetch the Merkle inclusion proof + signed root for a receipt, with the command to verify it offline, trusting no one. |
Use it (Claude Desktop)
Add to your claude_desktop_config.json:
{
"mcpServers": {
"stoa": {
"command": "npx",
"args": ["-y", "@vextlabs/stoa-mcp"],
"env": { "STOA_TOKEN": "vxk_live_...", "STOA_BASE_URL": "https://tryvext.com" }
}
}
}Now the model can gate its own actions: "Before you run that, check it with stoa_gate."
Use it programmatically
The message handler is exported and pure (no stdio required), so you can embed it or test it directly:
import { createMcpHandler } from '@vextlabs/stoa-mcp';
const { handle } = createMcpHandler({ token: process.env.STOA_TOKEN! });
const res = await handle({ jsonrpc: '2.0', id: 1, method: 'tools/list' });Receipts and permits verify offline with
@vextlabs/stoa-verifier.
Spec: https://stoa.tryvext.com · discovery: /.well-known/stoa/capabilities.json.
