Skip to main content
Glama

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

Related MCP server: Wisdom MCP

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

Available Tools

5 tools
wais_confirmA

Confirm a high-risk action or complete a payment challenge.

Call after wais_execute returned a 402 confirmation challenge and the user has approved. If there was a payment link, the user must complete payment first. Polls for completion automatically if the challenge included a resolution object.

Args: site_url: The site.url from agents.json. challenge_id: The challenge_id from the 402 response.

Inputs: site_url (required), challenge_id (required). Returns: result

wais_discoverA

Discover what a WAIS-compatible site offers. Call this first for any site.

Fetches /.well-known/agents.json and returns a summary showing:

  • site.url and site.api_base_url (how the site identifies itself)

  • Available actions with their IDs, endpoints, methods, and parameters

  • Registration requirements, constraints, and payment info

The agents.json is the source of truth. Use the action IDs and parameter schemas it defines when calling wais_execute.

Args: site_url: The site's URL (e.g. "https://serphub.deeger.io").

Inputs: site_url (required). Returns: result

wais_executeA

Execute an action at a WAIS-compatible site.

Uses the agents.json from wais_discover to resolve the action's endpoint, HTTP method, and required scopes. If the site has an api_base_url, requests are routed there automatically. Tokens and DPoP proofs are handled internally.

Pass site.url (from agents.json) as site_url, the action id, and params matching the action's input_schema.

Examples: wais_execute("https://serphub.deeger.io", "search", {"query": "python"}) wais_execute("https://serphub.deeger.io", "get_usage") wais_execute("https://serphub.deeger.io", "list_jobs", {"limit": 5})

Args: site_url: The site.url from agents.json (shown in discover output). action_id: The action id from agents.json (e.g. "search", "get_usage"). params: Parameters matching the action's input_schema.

Inputs: site_url (required), action_id (required), params. Returns: result

wais_registerA

Register the user at a WAIS-compatible site using their WAIS identity.

Uses SD-JWT selective disclosure — only shares the claims listed in agents.json data_requirements.registration.required_claims.

Call wais_discover first to see what claims the site needs.

Args: site_url: The site.url from agents.json. claims: Claims to disclose (e.g. ["email"]). If not provided, uses required_claims from agents.json automatically.

Inputs: site_url (required), claims. Returns: result

wais_statusA

Check the user's account status at a WAIS-compatible site.

Returns plan, credits, usage stats. The user must be registered first. Looks for a 'get_usage' or 'status' action in agents.json.

Args: site_url: The site.url from agents.json.

Inputs: site_url (required). Returns: result

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A4.6/5.0

    Scored across 5 tools

    Disambiguation5/5

    Each tool has a unique, clearly defined purpose: discovery, execution, confirmation, registration, and status checking. No overlap or ambiguity between them.

    Naming Consistency5/5

    All tools follow the consistent pattern 'wais_<verb>' with snake_case, such as wais_discover, wais_execute, wais_confirm, wais_register, and wais_status.

    Tool Count5/5

    With 5 tools, the server is well-scoped for the WAIS protocol domain. It covers all essential operations without unnecessary extras or gaps.

    Completeness5/5

    The tool surface provides a complete workflow: discover site capabilities, register, execute actions, handle payment confirmations, and check status. No obvious missing functionality for the intended use case.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers