Blanc

MCP Server

Let AI agents create reviews, submit attestations, and verify proofs via the Model Context Protocol.

The @proofofhuman/mcp-server package exposes the Blanc API as MCP tools, allowing AI agents (Claude, Cursor, Copilot, etc.) to programmatically create reviews, submit evidence, and verify attestations.

Installation

npm install @proofofhuman/mcp-server

Or run directly:

npx @proofofhuman/mcp-server

Configuration

The server uses environment variables for configuration. On Vercel deployments, the base URL is auto-detected from system environment variables (VERCEL_PROJECT_PRODUCTION_URL, VERCEL_BRANCH_URL, VERCEL_URL).

VariableRequiredDefaultDescription
PROOFOFHUMAN_API_KEYNoYour Blanc API key. Omit to use free tier (50 reviews/month).
PROOFOFHUMAN_BASE_URLNoAuto-detectedExplicit override for the API base URL. Falls back to Vercel env vars, then http://localhost:3000.

Claude Code

Add to your project's .mcp.json:

{
  "mcpServers": {
    "proofofhuman": {
      "type": "stdio",
      "command": "npx",
      "args": ["@proofofhuman/mcp-server"],
      "env": {
        "PROOFOFHUMAN_API_KEY": "your-api-key",
        "PROOFOFHUMAN_BASE_URL": "https://your-api.com"
      }
    }
  }
}

Cursor

Add to .cursor/mcp.json:

{
  "mcpServers": {
    "proofofhuman": {
      "command": "npx",
      "args": ["@proofofhuman/mcp-server"],
      "env": {
        "PROOFOFHUMAN_API_KEY": "your-api-key",
        "PROOFOFHUMAN_BASE_URL": "https://your-api.com"
      }
    }
  }
}

Tools

create-review

Create a new human review session for a document. Provide either document_content (the server computes the SHA-256 hash) or a pre-computed document_hash.

Parameters:

NameTypeRequiredDescription
document_contentstringNo*Raw document content — the server computes the SHA-256 hash. Use for convenience.
document_hashstringNo*Pre-computed SHA-256 hash. Use for privacy when content shouldn't leave your machine.
document_titlestringNoHuman-readable title
criteria_profile_idstringNoID of the criteria profile (defaults to General Review on free tier)
reviewer_idstringNoAssigned reviewer ID

* One of document_content or document_hash is required.

Returns: Review ID, document hash, status, criteria, review token, and expiry.

get-review

Get the current status and details of a review session.

Parameters:

NameTypeRequiredDescription
review_idstringYesThe review session ID

Returns: Full review state including criteria, document info, and attestation ID if completed.

submit-attestation

Submit review evidence for a review session. Evidence is validated against the criteria profile.

Parameters:

NameTypeRequiredDescription
review_idstringYesThe review session ID
timeSpentSecondsnumberYesSeconds spent reviewing
scrollPercentagenumberYesMax scroll depth (0-100)
presenceVerifiedbooleanYesWhether presence was verified
sectionsAcknowledgedstring[]YesSections the reviewer acknowledged
commentstringYesReviewer's comment

Returns: Attestation with ID, signature, evidence hash, and verification status.

verify-attestation

Verify the cryptographic integrity of an attestation.

Parameters:

NameTypeRequiredDescription
attestation_idstringYesThe attestation ID

Returns: Validity status, attestation details, and verification breakdown.

create-action

Create a human approval request for an agent action (HITL). The human will review the action details on Blanc and approve or reject. Optionally provide a callback_url to receive the decision via webhook.

Parameters:

NameTypeRequiredDescription
action_typestringYesType of action (e.g. bank_transfer, deployment, data_deletion)
action_paramsobjectYesStructured parameters for the action
risk_levelstringNolow, medium, high, or critical. Defaults to medium.
callback_urlstringNoURL to receive a webhook POST with the decision and signed attestation
contextstringNoHuman-readable explanation of why the agent wants to perform this action
titlestringNoShort title for the action review
criteria_profile_idstringNoOptional criteria profile override

Returns: Action ID, review URL, status, action type, risk level, review token, and expiry.

Example usage:

Agent: I need to transfer $15,000 from acct_001 to acct_002.
       Let me get human approval first.

→ create-action {
    "action_type": "bank_transfer",
    "action_params": { "from": "acct_001", "to": "acct_002", "amount": 15000 },
    "risk_level": "high",
    "callback_url": "https://your-app.com/webhooks/poh"
  }

← { "action_id": "uuid-abc123", "review_url": "https://...", "status": "pending" }

Agent: Waiting for human approval at the review URL...

→ get-action { "action_id": "uuid-abc123" }

← { "status": "completed", "decision": "approved", "attestation_id": "att_xyz789" }

Agent: Approved. Proceeding with the transfer.

get-action

Get the status and decision for an action approval request.

Parameters:

NameTypeRequiredDescription
action_idstringYesThe action ID returned by create-action

Returns: Full action state including status, action type, parameters, risk level, decision (null while pending, "approved" or "rejected" once decided), and attestation ID if completed.

On this page