{
  "schema_version": "2025-06-18",
  "name": "forward",
  "display_name": "Forward",
  "description": "Get customers — qualified leads, booked meetings, published content, campaign conversions — billed per verified result. Fund with free starter credits or x402; no human needed. Operated by agents, built to be called by agents.",
  "transport": {
    "type": "streamable-http",
    "url": "https://getforward.xyz/mcp",
    "install": {
      "claude_code": "claude mcp add --transport http forward https://getforward.xyz/mcp",
      "codex": "codex mcp add forward -- npx -y mcp-remote https://getforward.xyz/mcp",
      "stdio_bridge": "npx -y mcp-remote https://getforward.xyz/mcp",
      "json": { "mcpServers": { "forward": { "type": "http", "url": "https://getforward.xyz/mcp" } } }
    },
    "alternates": {
      "rest": { "type": "http", "base_url": "/api/v1" },
      "stdio": { "command": "node", "args": ["server/mcp-server.js"], "env": ["FORWARD_API_BASE", "FORWARD_API_KEY"] }
    }
  },
  "registry_manifest": "/.well-known/server.json",
  "auth": {
    "type": "self_provisioning",
    "notes": "No pre-registration: call the forward_signup tool once — it returns an api_key funded with $25 free starter credits. Pass api_key as an argument to every other tool (or send Authorization: Bearer fwd_… on /mcp). An agent can transact immediately with payment.rail=credits.",
    "header": "Authorization",
    "key_format": "fwd_live_*",
    "test_key_format": "fwd_test_*",
    "mint_endpoint": "/api/v1/keys",
    "mint_tool": "forward_signup"
  },
  "tools": [
    {
      "name": "forward_signup",
      "description": "Create a Forward account instantly — returns account_id and api_key funded with $25 free starter credits. No human signup. Call once, save the api_key, pass it to every other tool.",
      "http": { "method": "POST", "path": "/keys" },
      "input_schema": { "type": "object", "required": ["account_name"], "properties": { "account_name": { "type": "string" }, "ref": { "type": "string", "description": "optional referrer account_id — referrer earns $25" } } }
    },
    {
      "name": "forward_get_catalog",
      "description": "List Forward's pay-per-result products, their acceptance criteria, and prices.",
      "http": { "method": "GET", "path": "/catalog" },
      "input_schema": { "type": "object", "properties": {}, "required": [] }
    },
    {
      "name": "forward_get_quote",
      "description": "Price preview for a product/difficulty/volume — no key, no commitment.",
      "http": { "method": "POST", "path": "/quote/calc" },
      "input_schema": {
        "type": "object",
        "required": ["product", "volume"],
        "properties": {
          "product": { "type": "string", "enum": ["leads", "meetings", "content", "campaigns"] },
          "difficulty": { "type": "string", "enum": ["standard", "hard", "elite"] },
          "volume": { "type": "integer", "minimum": 1 }
        }
      }
    },
    {
      "name": "forward_credits",
      "description": "Get the account's prepaid credit balance (new accounts start with $25 free).",
      "http": { "method": "GET", "path": "/credits" },
      "input_schema": { "type": "object", "properties": {}, "required": [] }
    },
    {
      "name": "forward_submit_brief",
      "description": "Describe who you want as customers. The brief defines what 'qualified' means — be specific. Returns a brief_id and any missing fields as structured needs.",
      "http": { "method": "POST", "path": "/brief" },
      "input_schema": {
        "type": "object",
        "required": ["product", "icp", "volume", "budget_cap_usd"],
        "properties": {
          "product": { "type": "string", "enum": ["leads", "meetings", "content", "campaigns"] },
          "difficulty": { "type": "string", "enum": ["standard", "hard", "elite"] },
          "icp": {
            "type": "object",
            "properties": {
              "roles": { "type": "array", "items": { "type": "string" } },
              "company_size": { "type": "string" },
              "industry": { "type": "string" },
              "geo": { "type": "array", "items": { "type": "string" } }
            }
          },
          "volume": { "type": "integer", "minimum": 1 },
          "budget_cap_usd": { "type": "number", "minimum": 1 },
          "constraints": { "type": "object", "description": "offer, keyword, conversion definition, suppress[] …" }
        }
      }
    },
    {
      "name": "forward_quote",
      "description": "Price a submitted brief. Returns unit price, target volume, budget cap, ETA, and an acceptance-criteria reference.",
      "http": { "method": "POST", "path": "/quote" },
      "input_schema": {
        "type": "object",
        "required": ["brief_id"],
        "properties": { "brief_id": { "type": "string" } }
      }
    },
    {
      "name": "forward_checkout",
      "description": "Authorize funding and start autonomous delivery. Rails: credits (default — no token, no human), x402 (HTTP 402 + USDC via X-PAYMENT), or stripe_acp (delegated token). Charges fire only as results pass acceptance.",
      "http": { "method": "POST", "path": "/checkout" },
      "input_schema": {
        "type": "object",
        "required": ["quote_id"],
        "properties": {
          "quote_id": { "type": "string" },
          "payment": {
            "type": "object",
            "properties": {
              "rail": { "type": "string", "enum": ["credits", "x402", "stripe_acp"], "default": "credits" },
              "shared_payment_token": { "type": "string", "description": "required for stripe_acp" },
              "max_charge_usd": { "type": "number", "minimum": 1 }
            }
          },
          "webhook_url": { "type": "string", "description": "POSTs result.delivered events; Slack incoming-webhook URLs get formatted messages" }
        }
      }
    },
    {
      "name": "forward_get_engagement",
      "description": "Get live status, spend, and results-so-far for an engagement.",
      "http": { "method": "GET", "path": "/engagements/{engagement_id}" },
      "input_schema": {
        "type": "object",
        "required": ["engagement_id"],
        "properties": { "engagement_id": { "type": "string" } }
      }
    },
    {
      "name": "forward_get_results",
      "description": "Collect the verified deliverables for an engagement, each with provenance, verification evidence, and the charge tied to its result_id. CSV export at /engagements/{id}/results.csv.",
      "http": { "method": "GET", "path": "/engagements/{engagement_id}/results" },
      "input_schema": {
        "type": "object",
        "required": ["engagement_id"],
        "properties": { "engagement_id": { "type": "string" } }
      }
    }
  ]
}
