{"_id":"@decionis/presence-mcp","_rev":"2-345c4ceb98ec5431d8ed03cd8a352b6b","name":"@decionis/presence-mcp","dist-tags":{"latest":"0.2.0"},"versions":{"0.1.0":{"name":"@decionis/presence-mcp","version":"0.1.0","keywords":["presence","decionis","mcp","model-context-protocol","human-in-the-loop","human-approval","ai-agents","agent-guardrails","step-up-auth","webauthn"],"license":"Apache-2.0","_id":"@decionis/presence-mcp@0.1.0","maintainers":[{"name":"decionis","email":"festus@binariesfort.com"}],"homepage":"https://presence.decionis.com/developers/quickstart","bin":{"presence-mcp":"dist/index.js"},"dist":{"shasum":"ae2f27ebca768512dace7044b79f208e3df4c5c8","tarball":"https://registry.npmjs.org/@decionis/presence-mcp/-/presence-mcp-0.1.0.tgz","fileCount":15,"integrity":"sha512-bR5P/07wO6aePtUqLo6TTxH+HvAXYUJZqrW2aXOxBKlzNRbw1AGrIwj/Orf7oiotRbNFbptOwot1TBOMUYl86Q==","signatures":[{"sig":"MEUCIQDFLAizu1QO/YC7WtRIWVCJ4cdMZ9vYnvLFspmaKWlfCAIgEpLoeP++l5kjed7KS0We3VCaWgp4xgvEfMLnUd0jTxo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":48646},"main":"./dist/index.js","type":"module","_from":"file:artifacts/npm/decionis-presence-mcp-0.1.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=22.14.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"mcpName":"com.decionis/presence-mcp","scripts":{"lint":"eslint src","test":"vitest run","build":"tsc -p tsconfig.json","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"decionis","email":"festus@binariesfort.com"},"_resolved":"/home/runner/work/Presence/Presence/artifacts/npm/decionis-presence-mcp-0.1.0.tgz","_integrity":"sha512-bR5P/07wO6aePtUqLo6TTxH+HvAXYUJZqrW2aXOxBKlzNRbw1AGrIwj/Orf7oiotRbNFbptOwot1TBOMUYl86Q==","_npmVersion":"11.5.1","description":"MCP server for the Presence Human Approval Gate: pause an AI agent's consequential tool call until a named person approves it, with a sealed Presence Record either way.","directories":{},"_nodeVersion":"22.14.0","dependencies":{"@decionis/presence-node":"0.1.0","@decionis/presence-types":"0.1.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.17.0","vitest":"^2.1.8","typescript":"^5.7.2","@types/node":"^22.20.1","@presence/config":"0.1.0"},"_npmOperationalInternal":{"tmp":"tmp/presence-mcp_0.1.0_1786343338471_0.6774934279746259","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@decionis/presence-mcp","version":"0.2.0","description":"MCP server for the Presence Human Approval Gate: pause an AI agent's consequential tool call until a named person approves it, with a sealed Presence Record either way.","license":"Apache-2.0","type":"module","mcpName":"com.decionis/presence-mcp","homepage":"https://presence.decionis.com/developers/quickstart","keywords":["presence","decionis","mcp","model-context-protocol","human-in-the-loop","human-approval","ai-agents","agent-guardrails","step-up-auth","webauthn"],"main":"./dist/index.js","types":"./dist/index.d.ts","bin":{"presence-mcp":"dist/index.js"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"engines":{"node":">=22.14.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"dependencies":{"@decionis/presence-node":"0.2.0","@decionis/presence-types":"0.2.0"},"devDependencies":{"@types/node":"^22.20.1","eslint":"^9.17.0","typescript":"^5.7.2","vitest":"^2.1.8","@presence/config":"0.1.0"},"scripts":{"build":"tsc -p tsconfig.json","test":"vitest run","lint":"eslint src","typecheck":"tsc -p tsconfig.json --noEmit"},"_id":"@decionis/presence-mcp@0.2.0","_integrity":"sha512-bJCRxiAOpPY3e8wKummVuw+RP8HpbQWAoEqMbnRRHhr4g9xt7Oc3bdlI9Yc4/GS1ya2QSId1Y/phEb/Z2mXvuw==","_resolved":"/home/runner/work/Presence/Presence/artifacts/npm/decionis-presence-mcp-0.2.0.tgz","_from":"file:artifacts/npm/decionis-presence-mcp-0.2.0.tgz","_nodeVersion":"22.14.0","_npmVersion":"11.5.1","dist":{"integrity":"sha512-bJCRxiAOpPY3e8wKummVuw+RP8HpbQWAoEqMbnRRHhr4g9xt7Oc3bdlI9Yc4/GS1ya2QSId1Y/phEb/Z2mXvuw==","shasum":"41a0666bd9c2862189e075afecb34322b47c17c5","tarball":"https://registry.npmjs.org/@decionis/presence-mcp/-/presence-mcp-0.2.0.tgz","fileCount":15,"unpackedSize":48625,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCICMvRn4SlZbuvxLaFRz3fdXYCGId/EYBndZIstiPq7YFAiBTR28XsWHJ1vvr7uCkqNRNMdJ/OpFybdjS5UsDK6MmuQ=="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ef451b2d-6245-4556-ba10-84047940f7fe"}},"directories":{},"maintainers":[{"name":"decionis","email":"festus@binariesfort.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/presence-mcp_0.2.0_1786351551295_0.7645332982604096"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-10T06:28:58.317Z","modified":"2026-08-10T08:45:51.597Z","0.1.0":"2026-08-10T06:28:58.619Z","0.2.0":"2026-08-10T08:45:51.447Z"},"license":"Apache-2.0","homepage":"https://presence.decionis.com/developers/quickstart","keywords":["presence","decionis","mcp","model-context-protocol","human-in-the-loop","human-approval","ai-agents","agent-guardrails","step-up-auth","webauthn"],"description":"MCP server for the Presence Human Approval Gate: pause an AI agent's consequential tool call until a named person approves it, with a sealed Presence Record either way.","maintainers":[{"name":"decionis","email":"festus@binariesfort.com"}],"readme":"# @decionis/presence-mcp — the Human Approval Gate as an MCP server\n\nA stdio [Model Context Protocol](https://modelcontextprotocol.io) server that lets an AI\nagent pause its consequential tool calls until a named person approves them. It is the\nHuman Approval Gate (docs/48) distributed where\nagent tool calls happen: every verdict is minted server-side by the Presence API, the\nexact action is bound into an immutable envelope the approver sees, and each outcome\nseals a signed Presence Record.\n\nFail-closed by construction: without a live approver session there is no path to\n`PROCEED` that skips the human, and expiry, cancellation, and errors all resolve to\n`DENIED`.\n\n## Tools\n\n| Tool                                  | Purpose                                                                                                                                        |\n| ------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |\n| `presence_request_human_verification` | Hold an action: returns `PROCEED`/`DENIED` from a live approver session's server-minted decision, or `HUMAN_REQUIRED` with the `approval_url`. |\n| `presence_get_verification_status`    | Poll by `request_id` to a terminal verdict: `PROCEED` (with the sealed receipt), `DENIED`, or `ESCALATED`.                                     |\n\n## Run\n\nThe tenant key is a server-side secret — run this on the agent's backend host, never in\na browser.\n\n```bash\nPRESENCE_API_KEY=presence_sk_… npx -y @decionis/presence-mcp\n```\n\nClaude Code — `.mcp.json` at the repo root:\n\n```json\n{\n  \"mcpServers\": {\n    \"presence\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@decionis/presence-mcp\"],\n      \"env\": { \"PRESENCE_API_KEY\": \"presence_sk_…\" }\n    }\n  }\n}\n```\n\n`PRESENCE_BASE_URL` overrides the API origin (default `https://presence.decionis.com`).\n\n## The loop\n\n1. The agent calls `presence_request_human_verification` with the action, the approver,\n   and a required `idempotency_key` (reuse the identifier the calling system already has\n   — a payment reference, a workflow id — so a retry cannot seal two records).\n2. On `HUMAN_REQUIRED`, hand `approval_url` to the approver — email, chat, calendar, or QR.\n3. Poll `presence_get_verification_status` until the verdict is terminal, then act on it.\n   Treat `DENIED` and errors as refusals.\n\n## Discovery\n\nDescribed for crawlers and agent hosts at\n[`presence.decionis.com/.well-known/mcp.json`](https://presence.decionis.com/.well-known/mcp.json);\nregistry manifests (`server.json`, `smithery.yaml`, `glama.json`) live beside the package in the repository.\n","readmeFilename":"README.md"}