{
  "$schema": "https://static.modelcontextprotocol.io/schemas/mcp-server-card/v1.json",
  "version": "1.0",
  "protocolVersion": "2025-06-18",
  "serverInfo": {
    "name": "keeperhub",
    "title": "KeeperHub",
    "version": "1.2.0"
  },
  "description": "Execution layer for onchain agents. Build, schedule, and run Web3 workflows \u2014 smart contract monitoring, token transfers, DeFi protocol actions, and notifications \u2014 across EVM chains and Solana, with simulate-first execution, retries, gas handling, and a full audit trail.",
  "iconUrl": "https://keeperhub.com/favicon.png",
  "documentationUrl": "https://docs.keeperhub.com/agent/mcp-server",
  "endpoint": "https://app.keeperhub.com/mcp/public",
  "transport": {
    "type": "streamable-http",
    "endpoint": "https://app.keeperhub.com/mcp/public"
  },
  "capabilities": {
    "tools": {
      "listChanged": true
    }
  },
  "authentication": {
    "required": false,
    "notes": "The advertised endpoint is the anonymous marketplace surface. An MCP client can complete initialize and tools/list, and call listed marketplace workflows, with no credential. The organization-scoped catalog is a separate endpoint, declared under authenticatedEndpoint."
  },
  "instructions": "A KeeperHub workflow is a directed graph of nodes: one trigger (Manual, Schedule, Webhook, Event, Block) plus actions supplied by plugins, connected by edges with named source handles. Values flow between nodes as {{@nodeId:Label.field}}. Validate a workflow before executing it, and prefer execute_check_and_execute over an unconditional write when the transaction depends on onchain state.",
  "tools": [
    {
      "name": "list_action_schemas",
      "description": "List all available action schemas, triggers, and supported chains. Use this to discover what actions and integrations are available for workflow creation. Each chain includes a 'status' field (stable, experimental, or deprecated) - prefer stable chains for production writes and avoid experimental/deprecated ones unless the user explicitly opts in."
    },
    {
      "name": "search_plugins",
      "description": "[DEPRECATED \u2014 will be removed in v1.13. Use list_action_schemas instead.] List available action schemas filtered by category (e.g., 'web3', 'discord', 'system')."
    },
    {
      "name": "get_plugin",
      "description": "Get schema details for a specific plugin or integration type."
    },
    {
      "name": "search_templates",
      "description": "Search for pre-built workflow templates that can be deployed and customized."
    },
    {
      "name": "tools_documentation",
      "description": "Get documentation on how to use the KeeperHub MCP tools, including workflow creation and safe direct execution."
    },
    {
      "name": "search_protocol_actions",
      "description": "Search for available protocol actions across all supported DeFi protocols (Aave, Morpho, Chronicle, Chainlink, Uniswap, Compound, Lido, etc.). Call this first to discover what actions are available and what parameters they require, then use execute_protocol_action to run them."
    },
    {
      "name": "search_workflows",
      "description": "Search KeeperHub listed workflows callable by external agents. Returns slug, description, inputSchema, and price for each match. Use sort='popular' to rank by usage, sort='recent' to see new listings first; omit sort for the default ordering. Use call_workflow to invoke a result."
    },
    {
      "name": "call_workflow",
      "description": "Invoke a listed KeeperHub workflow. For read workflows, executes and returns the result. For write workflows, returns unsigned calldata {to, data, value} for the caller to submit. Use search_workflows first to discover available workflows. PAID WORKFLOWS: this tool DOES NOT auto-pay. A paid listing returns HTTP 402 with an x402 challenge \u2014 pay it with @keeperhub/wallet's paymentSigner.fetch(), agentcash's mcp__agentcash__fetch, or the marketplace UI, then retry. The 402 error message includes the price and concrete next-step paths."
    },
    {
      "name": "get_workflow_listing",
      "description": "Read full listing metadata for a workflow by its public slug. Public access; no auth required."
    }
  ],
  "authenticatedEndpoint": {
    "endpoint": "https://app.keeperhub.com/mcp",
    "transport": {
      "type": "streamable-http",
      "endpoint": "https://app.keeperhub.com/mcp"
    },
    "tools": [
      {
        "name": "list_workflows",
        "description": "List all workflows for the organization."
      },
      {
        "name": "get_workflow",
        "description": "Get a single workflow by ID, including nodes, edges, and configuration."
      },
      {
        "name": "create_workflow",
        "description": "Create a workflow with nodes and edges."
      },
      {
        "name": "update_workflow",
        "description": "Update a workflow's name, description, nodes, edges, project or tag assignment."
      },
      {
        "name": "delete_workflow",
        "description": "Permanently delete a workflow."
      },
      {
        "name": "validate_workflow",
        "description": "Check a workflow's structural and Web3-specific correctness."
      },
      {
        "name": "prepare_test_pin_data",
        "description": "Return the JSON Schema each node expects as pin data."
      },
      {
        "name": "validate_cron",
        "description": "Validate a cron expression or interval schedule."
      },
      {
        "name": "execute_workflow",
        "description": "Trigger a manual execution and return an execution ID."
      },
      {
        "name": "get_execution",
        "description": "Get combined status and step-by-step logs for an execution."
      },
      {
        "name": "list_executions",
        "description": "List workflow and direct executions with cursor pagination."
      },
      {
        "name": "get_spending_limits",
        "description": "Read the organization's daily direct-execution spending caps and usage."
      },
      {
        "name": "test_notification",
        "description": "Test an integration without saving credentials."
      },
      {
        "name": "tempo_sign_and_hold",
        "description": "Sign a Tempo transfer and hold it for later broadcast."
      },
      {
        "name": "tempo_cancel_hold",
        "description": "Cancel a pending held payment."
      },
      {
        "name": "tempo_release_hold",
        "description": "Broadcast a held payment now."
      },
      {
        "name": "execute_transfer",
        "description": "Transfer native or ERC-20 tokens to a recipient."
      },
      {
        "name": "execute_contract_call",
        "description": "Call a smart contract function."
      },
      {
        "name": "execute_check_and_execute",
        "description": "Read a contract value, evaluate a condition, and execute only if it is met."
      },
      {
        "name": "get_direct_execution_status",
        "description": "Get the status of a direct execution, including the transaction hash."
      },
      {
        "name": "search_protocol_actions",
        "description": "Search available protocol actions across supported DeFi protocols."
      },
      {
        "name": "execute_protocol_action",
        "description": "Execute a DeFi protocol action."
      },
      {
        "name": "ai_generate_workflow",
        "description": "Generate a complete workflow from a natural language description."
      },
      {
        "name": "list_action_schemas",
        "description": "List available action schemas, triggers, and supported chains."
      },
      {
        "name": "get_plugin",
        "description": "Get schema details for a specific plugin or integration type."
      },
      {
        "name": "search_templates",
        "description": "Search pre-built workflow templates."
      },
      {
        "name": "deploy_template",
        "description": "Clone a public template into the organization as a new workflow."
      },
      {
        "name": "search_workflows",
        "description": "Search listed workflows callable by external agents."
      },
      {
        "name": "call_workflow",
        "description": "Invoke a listed workflow."
      },
      {
        "name": "list_workflow",
        "description": "Publish a workflow to the marketplace catalog."
      },
      {
        "name": "unlist_workflow",
        "description": "Remove a workflow from the marketplace catalog."
      },
      {
        "name": "update_workflow_listing",
        "description": "Edit a workflow listing's metadata."
      },
      {
        "name": "get_workflow_listing",
        "description": "Read a workflow's public listing metadata by slug."
      },
      {
        "name": "list_integrations",
        "description": "List configured integrations for the organization."
      },
      {
        "name": "get_wallet_integration",
        "description": "Get details for a wallet integration."
      },
      {
        "name": "tools_documentation",
        "description": "Get documentation for the KeeperHub MCP tools."
      }
    ],
    "authentication": {
      "required": true,
      "type": "oauth2",
      "schemes": [
        "oauth2",
        "bearer"
      ],
      "resource_metadata": "https://app.keeperhub.com/.well-known/oauth-protected-resource",
      "scopesSupported": [
        "mcp:read",
        "mcp:write",
        "mcp:admin"
      ],
      "notes": "OAuth 2.1 authorization code flow for interactive clients, or a KeeperHub API key (kh_ prefix) presented as a Bearer token."
    }
  },
  "_meta": {
    "keeperhub.com/note": "Server card for the KeeperHub MCP server, published on the brand apex so the server is discoverable without a token. The advertised endpoint is the anonymous marketplace surface, which answers initialize and tools/list with no credential; the organization-scoped catalog is declared separately under authenticatedEndpoint. The server itself is hosted at app.keeperhub.com; its ratified OAuth discovery document is at https://app.keeperhub.com/.well-known/oauth-protected-resource. Shape follows the draft MCP Server Card proposal (SEP-1649); the transport endpoint is given as an absolute URL because the server's origin differs from this document's origin.",
    "keeperhub.com/restApi": "https://keeperhub.com/openapi.json",
    "keeperhub.com/llmsTxt": "https://docs.keeperhub.com/llms.txt"
  }
}
