Skip to main content

Universal WAIS MCP server — 5 tools for any WAIS-compatible site

Project description

wais-mcp

Universal MCP server for WAIS (Web Agent Interaction Standard) — 5 generic tools that work with any WAIS-compatible site.

Works with Claude, ChatGPT, Gemini, Cursor, Windsurf, VS Code Copilot, and any MCP-compatible client.

Tools

Tool Description
wais_discover Fetch a site's agents.json and show available actions
wais_register Register at a site using SD-JWT selective disclosure
wais_execute Execute any action (search, subscribe, purchase, etc.)
wais_confirm Confirm high-risk actions or complete payments (402 flow)
wais_status Check account status, plan, and credits

Quick Start

pip install wais-mcp
wais-mcp init

The setup wizard will ask you to pick your provider (Claude, ChatGPT, Cursor, etc.), choose project or global scope, and enter your API key. It writes the correct config file automatically.

Manual Setup by Provider

If you prefer to configure manually, all providers use the same wais-mcp command — only the config file location and format differ.

Claude Desktop

File: claude_desktop_config.json

{
  "mcpServers": {
    "wais": {
      "command": "wais-mcp",
      "env": {
        "PLATFORM_URL": "https://pod.deeger.io",
        "WAIS_API_KEY": "<your-api-key>"
      }
    }
  }
}

Claude Code

File: .mcp.json (project root) or ~/.claude/settings.json (global)

{
  "mcpServers": {
    "wais": {
      "command": "wais-mcp",
      "env": {
        "PLATFORM_URL": "https://pod.deeger.io",
        "WAIS_API_KEY": "<your-api-key>"
      }
    }
  }
}

ChatGPT Desktop

Requires Developer Mode: Settings > Advanced Settings > Developer Mode.

File locations:

  • macOS: ~/Library/Application Support/ChatGPT/mcp-server-config.json
  • Windows: %APPDATA%\OpenAI\ChatGPT\mcp-server-config.json
  • Linux: ~/.config/ChatGPT/mcp-server-config.json
{
  "mcpServers": {
    "wais": {
      "command": "wais-mcp",
      "env": {
        "PLATFORM_URL": "https://pod.deeger.io",
        "WAIS_API_KEY": "<your-api-key>"
      }
    }
  }
}

Restart ChatGPT after saving.

Gemini CLI

File: ~/.gemini/settings.json (global) or .gemini/settings.json (project)

{
  "mcpServers": {
    "wais": {
      "command": "wais-mcp",
      "env": {
        "PLATFORM_URL": "https://pod.deeger.io",
        "WAIS_API_KEY": "<your-api-key>"
      }
    }
  }
}

Cursor

File: .cursor/mcp.json (project) or ~/.cursor/mcp.json (global)

{
  "mcpServers": {
    "wais": {
      "command": "wais-mcp",
      "env": {
        "PLATFORM_URL": "https://pod.deeger.io",
        "WAIS_API_KEY": "<your-api-key>"
      }
    }
  }
}

Windsurf

File: ~/.codeium/windsurf/mcp_config.json

Or open from Windsurf: click MCPs icon in Cascade panel > Configure.

{
  "mcpServers": {
    "wais": {
      "command": "wais-mcp",
      "env": {
        "PLATFORM_URL": "https://pod.deeger.io",
        "WAIS_API_KEY": "<your-api-key>"
      }
    }
  }
}

VS Code (GitHub Copilot)

File: .vscode/mcp.json (project) or via Command Palette: MCP: Open User Configuration (global)

{
  "servers": {
    "wais": {
      "type": "stdio",
      "command": "wais-mcp",
      "env": {
        "PLATFORM_URL": "https://pod.deeger.io",
        "WAIS_API_KEY": "<your-api-key>"
      }
    }
  }
}

Note: VS Code uses servers instead of mcpServers, and requires the type field.

Usage without MCP (Python SDK)

For custom agents, scripts, or any Python code — no MCP client needed:

import asyncio
from wais_mcp import WAISClient

async def main():
    client = WAISClient(api_key="your-api-key")

    # 1. Discover what the site offers
    site = await client.discover("https://serphub.deeger.io")
    print(site.name, site.list_action_ids())

    # 2. Register (shares only required claims via SD-JWT)
    await client.register(site)

    # 3. Execute actions
    result = await client.execute(site, "search", {"query": "python"})
    print(result)

    # 4. Confirm high-risk actions (if 402 returned)
    # result = await client.confirm(site, challenge_id)

    # 5. Check account status
    status = await client.status(site)
    print(status)

asyncio.run(main())

Works with OpenAI SDK, LangChain, CrewAI, or any Python agent framework.

How It Works

  1. Discover — Fetches /.well-known/agents.json from a site
  2. Register — Shares only required claims via SD-JWT selective disclosure
  3. Execute — Handles tokens, DPoP, endpoint resolution, and async polling automatically
  4. Confirm — Polls for completion after 402 confirmation challenges
  5. Status — Check credits and plan info

All authentication (PoD tokens, DPoP proofs) is handled transparently.

Configuration

Env Var Default Description
PLATFORM_URL https://pod.deeger.io WAIS Provider URL
WAIS_API_KEY (keychain fallback on macOS) API key from provider dashboard

Development

pip install -e ".[dev]"

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

wais_mcp-0.2.3.tar.gz (19.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

wais_mcp-0.2.3-py3-none-any.whl (25.1 kB view details)

Uploaded Python 3

File details

Details for the file wais_mcp-0.2.3.tar.gz.

File metadata

  • Download URL: wais_mcp-0.2.3.tar.gz
  • Upload date:
  • Size: 19.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for wais_mcp-0.2.3.tar.gz
Algorithm Hash digest
SHA256 cc32fb83404886ab257808bb996bf1d46215c8972979c9c5d694f4fa66fe60ac
MD5 4c665dc3f09dc4610ef3111b0f2e5718
BLAKE2b-256 25ca8679689fdc6843bd5e15f3004a88b99a2cc8655dd731cee9cf5d210fadae

See more details on using hashes here.

File details

Details for the file wais_mcp-0.2.3-py3-none-any.whl.

File metadata

  • Download URL: wais_mcp-0.2.3-py3-none-any.whl
  • Upload date:
  • Size: 25.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for wais_mcp-0.2.3-py3-none-any.whl
Algorithm Hash digest
SHA256 1348433d4cce56d3304c9cb82c569943552805c0c462b821ce7c5601a8e1c815
MD5 b2e3fe8400bccf70d81782946118fc5d
BLAKE2b-256 a11e42f9825c71449515afe30c49d9aed7a6f8b6650bca76c903e8ab099bcc1d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page