Documentation Index
Fetch the complete documentation index at: https://docs.mpcvault.com/llms.txt
Use this file to discover all available pages before exploring further.
Skip this page if you only need manual transaction approval via the MPCVault app. The client signer is only required for automated signing.
- Maintains a secure connection to MPCVault
- Receives signing callbacks when you call
ExecuteSigningRequests - Approves transactions based on your callback server’s response
Prerequisites
- Docker (or Docker Compose) installed
- A server with a stable internet connection
- A callback endpoint on your backend to receive and approve signing requests
- An API user already created
Step 1: Generate an Ed25519 Key Pair
The client signer authenticates with MPCVault using an Ed25519 key pair. Generate one locally:No password: The key must not have a passphrase for the client signer to use it automatically.
Step 2: Register the Client Signer in Your Vault
- Go to console.mpcvault.com
- Navigate to your vault’s Team & policies page
- Click + New Client Signer

- Enter the information:
| Field | Description |
|---|---|
| Name | Identifier for this signer (e.g., production-signer) |
| Public key | Paste the contents of client-signer-key.pub |
| IP Whitelist | (Optional) Your server’s IP addresses |
- Click Continue → Confirm to create a signing request
- Approve the Vault setting update request in the MPCVault app
Step 3: Grant Key Access
After creating the client signer, MPCVault automatically creates a Key grant access signing request. This grants the client signer permission to participate in MPC signing. Approve this request in the MPCVault app to complete setup.Step 4: Create the Configuration File
Createconfig.yml with your settings:
| Field | Description | Example |
|---|---|---|
http-health.listening-addr | Health check endpoint | 0.0.0.0:8080 |
vault-uuid | UUID from vault settings page | 350063e9-... |
ssh.private-key | Full private key content | -----BEGIN OPENSSH... |
ssh.password | Key passphrase (empty if none) | "" |
callback-url | Your backend endpoint for approvals | http://your-server:8088/callback |
Step 5: Run the Client Signer
Option A: Docker Run (Development)
Option B: Docker Compose (Recommended for Production)
Createdocker-compose.yml:
Verify it’s running
Docker image: ghcr.io/mpcvault/client-signer
Step 6: Implement Your Callback Handler
When you callExecuteSigningRequests, MPCVault sends a callback to your callback-url. Your server must:
- Receive the callback (POST request with protobuf body)
- Validate the signing request against your business rules
- Return HTTP 200 to approve, or 4xx/5xx to reject
Docker Networking
| Your Setup | Callback URL Format |
|---|---|
| Callback server on same host as Docker | http://host.docker.internal:PORT/path |
| Callback server in same Docker network | http://service-name:PORT/path |
| Callback server on remote host | http://your-server.com:PORT/path |
host.docker.internal is a special DNS name that resolves to the host machine from inside a Docker container. It works on Docker Desktop (Mac/Windows) and recent Docker Engine versions on Linux.How Signing Works
When you callExecuteSigningRequests:
Troubleshooting
| Issue | Cause | Solution |
|---|---|---|
| Container won’t start | Invalid config.yml | Check YAML syntax and key format |
| No callbacks received | Wrong callback URL | Use host.docker.internal for local |
| Connection refused | Port not exposed | Verify -p 8080:8080 mapping |
| Auth failed | Key mismatch | Ensure public key matches private key |
| Key access denied | Missing approval | Approve Key grant access in app |
| Timeout | Callback too slow | Respond within 30 seconds |
| Transaction rejected | Non-200 response | Check your validation logic |