Client Setup

Hosted at https://dev.mcp.ivalt.com — SDK: @ivalt/agent-auth on npm.

This guide shows how to connect an MCP client to the iVALT-MCP server. The server can be reached over STDIO (for local desktop clients) or HTTP/SSE (for remote deployments like https://dev.mcp.ivalt.com).

Live endpoint: https://dev.mcp.ivalt.com/mcp ( https://dev.mcp.ivalt.com, http://dev.mcp.ivalt.comhttps). Health: https://dev.mcp.ivalt.com/health.

Choose a transport

Transport Use case Client support
STDIO Run the server as a local child process Claude Desktop, Cursor, Windsurf, and most desktop MCP clients
HTTP/SSE Connect to a deployed or local HTTP server Clients that support SSE, e.g. custom agents

STDIO setup

Use the STDIO binary from the @ivalt/agent-auth package. The client should start it with node and pass the required environment variables in env.

Example claude_desktop_config.json

{
  "mcpServers": {
    "ivalt-mcp": {
      "command": "node",
      "args": [
        "node_modules/@ivalt/agent-auth/bin/ivalt-mcp.js"
      ],
      "env": {
        "IVALT_DEFAULT_MOBILE": "+12025550123",
        "IVALT_API_KEY": "your-ivalt-api-key",
        "IVALT_REQUEST_FROM": "My App",
        "IVALT_DEFAULT_FACTORS": "biometric,location,device"
      }
    }
  }
}

Notes:

Generic mcp.json shape

Other clients use the same mcpServers object but may name the file mcp.json, .cursor/mcp.json, .windsurf/mcp.json, etc.

{
  "mcpServers": {
    "ivalt-mcp": {
      "command": "node",
      "args": ["node_modules/@ivalt/agent-auth/bin/ivalt-mcp.js"],
      "env": {
        "IVALT_DEFAULT_MOBILE": "+12025550123"
      }
    }
  }
}

HTTP/SSE setup

Point the client at the /mcp endpoint (hosted: https://dev.mcp.ivalt.com/mcp, or locally http://localhost:8080/mcp). If MCP_AUTH_TOKEN is set, pass it as a Bearer token. See @ivalt/agent-auth for SDK alternatives.

Example mcp.json (Production)

{
  "mcpServers": {
    "ivalt-mcp": {
      "url": "https://dev.mcp.ivalt.com/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_MCP_AUTH_TOKEN"
      }
    }
  }
}

For local Docker Compose:

{
  "mcpServers": {
    "ivalt-mcp": {
      "url": "http://localhost:8080/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_MCP_AUTH_TOKEN"
      }
    }
  }
}

Passing the mobile number from the client

Even if IVALT_DEFAULT_MOBILE is set, you can override the approver phone on each call by passing approver_mobile in the tool arguments:

{
  "action": "Approve production deploy",
  "approver_mobile": "+12025550123",
  "reason": "Urgent hotfix"
}

If IVALT_DEFAULT_MOBILE is not configured, approver_mobile is required.

Verification

STDIO

Restart the client and check that the ivalt-mcp tools appear in the tool list (request_approval, request_approval_async, check_status).

HTTP

Live:

curl https://dev.mcp.ivalt.com/health
curl -X POST https://dev.mcp.ivalt.com/mcp \
  -H "Authorization: Bearer $MCP_AUTH_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'

For local:

curl http://localhost:8080/health
curl http://localhost:8080/mcp -X POST \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'

If MCP_AUTH_TOKEN is not set, omit the Authorization header. http://dev.mcp.ivalt.com will 301 to https.