{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/agentdrives-com/json-schema/agentdrives-com-task-result-schema.json",
  "title": "TaskResult",
  "description": "One product for a task (GET /api/find-tools, MCP find_tools_for_task)",
  "x-generated": "2026-10-31",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/agentdrives-com-openapi.json#/components/schemas/TaskResult",
  "type": "object",
  "properties": {
    "slug": {
      "type": "string"
    },
    "name": {
      "type": "string"
    },
    "category": {
      "type": "string"
    },
    "level": {
      "type": [
        "integer",
        "null"
      ],
      "minimum": 0,
      "maximum": 5,
      "description": "The agent level, 0-5; null for a product listed, not driven"
    },
    "level_name": {
      "type": [
        "string",
        "null"
      ],
      "description": "null for a product listed, not driven"
    },
    "gets_in_alone": {
      "type": [
        "boolean",
        "null"
      ],
      "description": "Our agent signed up and got a key without a person; null for a product listed, not driven"
    },
    "match": {
      "enum": [
        "strong",
        "partial",
        "capability",
        "near",
        "listed"
      ],
      "description": "capability: found by the capability asked for; near: in nearest_tools of a task no product does, never a result; listed: a product listed, not driven, matched by its name, category or the surfaces its docs publish"
    },
    "status": {
      "enum": [
        "listed"
      ],
      "description": "Only on a product listed, not driven: we read its agent surfaces in its public docs and tried none of them. It has no level, task or work done, and comes after the driven products of the same match"
    },
    "note": {
      "type": "string",
      "description": "With status listed: what that means for the agent"
    },
    "surfaces": {
      "type": "array",
      "items": {
        "enum": [
          "api",
          "mcp",
          "cli",
          "sdk"
        ]
      },
      "description": "With status listed: the agent surfaces its public docs name"
    },
    "mapped_at": {
      "type": "string",
      "description": "With status listed: when we read its docs"
    },
    "near": {
      "type": "string",
      "description": "With match near: what the product does nearest the task and what it lacks for it"
    },
    "tasks": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "With capability: the product's own tasks mapped to it"
    },
    "evidence": {
      "type": "string",
      "description": "With capability: the product page's section that shows what our agent did"
    },
    "task": {
      "type": [
        "object",
        "null"
      ],
      "properties": {
        "matched": {
          "type": "string",
          "description": "The closest task in the product's capability map, or a thing our agent did there"
        },
        "result": {
          "enum": [
            "done",
            "partial",
            "plan_gated",
            "failed",
            "blocked",
            "not_tried",
            "unknown"
          ]
        },
        "via": {
          "type": "string",
          "description": "The route: api, mcp, cli, browser"
        }
      }
    },
    "can_do": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "stop": {
      "type": [
        "object",
        "null"
      ],
      "properties": {
        "at": {
          "type": "string"
        },
        "why": {
          "type": [
            "string",
            "null"
          ]
        }
      }
    },
    "work_done": {
      "type": [
        "integer",
        "null"
      ],
      "description": "Share of the core tasks done, 0-100"
    },
    "cite": {
      "type": "object",
      "required": [
        "url",
        "as_of",
        "source"
      ],
      "description": "How to cite this result: our page for the product (for a product listed, not driven without one yet, this search's page), the date of the drive or docs read it rests on, and the source with its licence",
      "properties": {
        "url": {
          "type": "string"
        },
        "as_of": {
          "type": [
            "string",
            "null"
          ],
          "description": "YYYY-MM-DD"
        },
        "source": {
          "enum": [
            "AgentDrives drive data, CC BY 4.0",
            "AgentDrives directory data, CC BY 4.0"
          ]
        }
      }
    },
    "tested_at": {
      "type": "string"
    },
    "url": {
      "type": "string",
      "description": "The product's page with us; for a product listed, not driven without one yet, its docs"
    },
    "origin": {
      "enum": [
        "editorial",
        "owner"
      ]
    },
    "disclosure": {
      "type": "string"
    },
    "product_url": {
      "type": [
        "string",
        "null"
      ],
      "description": "The product's own site"
    },
    "signup": {
      "type": [
        "object",
        "null"
      ],
      "description": "How our agent got in on its own (its first way in); null when only a person could",
      "properties": {
        "way": {
          "type": "string",
          "description": "As access: key_by_api, email_signup, keyless, pay_per_call, …"
        },
        "label": {
          "type": [
            "string",
            "null"
          ]
        },
        "routes": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "The routes it took, e.g. api_signup"
        },
        "minutes": {
          "type": [
            "number",
            "null"
          ],
          "description": "Minutes to its first call"
        }
      }
    },
    "docs_url": {
      "type": [
        "string",
        "null"
      ],
      "description": "The docs' home page the drive found; null when not found"
    },
    "llms_txt_url": {
      "type": [
        "string",
        "null"
      ],
      "description": "Its llms.txt, from the daily check or the drive; null when not found"
    },
    "openapi_url": {
      "type": [
        "string",
        "null"
      ],
      "description": "Its OpenAPI document, from the daily check; null when not found"
    },
    "mcp_url": {
      "type": [
        "string",
        "null"
      ],
      "description": "Its own remote MCP server's URL; null when it has none, or only a local (stdio) one"
    },
    "pays_with": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "The ways it takes payment: agent-native rails (x402, mpp, …) and card for a card checkout"
    },
    "pay_rails": {
      "type": "array",
      "description": "Each agent-native rail on its record and how: tested (our agent's drive met it) or documented (a registry lists the product's own endpoint; we didn't use it)",
      "items": {
        "type": "object",
        "required": [
          "rail",
          "state"
        ],
        "properties": {
          "rail": {
            "type": "string",
            "description": "x402, mpp, …"
          },
          "state": {
            "enum": [
              "tested",
              "documented"
            ]
          }
        }
      }
    },
    "free_tier": {
      "type": [
        "boolean",
        "null"
      ],
      "description": "A free plan or nothing to pay: true; no free plan: false; null when unknown"
    },
    "checks": {
      "type": "object",
      "description": "Which of the common filters hold for it, from the drive of `checked`",
      "properties": {
        "self_signup": {
          "type": "boolean",
          "description": "Our agent signed up and got in without a person"
        },
        "x402": {
          "type": "boolean",
          "description": "Takes x402"
        },
        "mpp": {
          "type": "boolean",
          "description": "Takes MPP"
        },
        "mcp": {
          "type": [
            "boolean",
            "null"
          ],
          "description": "Has an MCP server; null when unknown"
        },
        "cli": {
          "type": [
            "boolean",
            "null"
          ],
          "description": "Has a CLI; null when unknown"
        },
        "checked": {
          "type": [
            "string",
            "null"
          ],
          "description": "The date of the drive these come from"
        }
      }
    },
    "connect": {
      "type": "object",
      "description": "How to connect in your next step, from the drive and the product's own docs. Each part's state: tested (our agent used it) or documented (the product publishes it; we didn't use it). A part we didn't find is left out; {} when none",
      "properties": {
        "mcp": {
          "type": "object",
          "description": "Its own remote MCP server: add url to your MCP client",
          "required": [
            "url",
            "state"
          ],
          "properties": {
            "url": {
              "type": "string"
            },
            "transport": {
              "enum": [
                "streamable-http",
                "sse"
              ],
              "description": "Left out when unknown"
            },
            "state": {
              "enum": [
                "tested",
                "documented"
              ]
            }
          }
        },
        "cli": {
          "type": "object",
          "description": "Its CLI: run install",
          "required": [
            "install",
            "package",
            "ecosystem",
            "state"
          ],
          "properties": {
            "install": {
              "type": "string",
              "description": "e.g. npm install -g @acme/cli"
            },
            "package": {
              "type": "string"
            },
            "ecosystem": {
              "enum": [
                "npm",
                "pypi",
                "homebrew",
                "go",
                "cargo",
                "gem"
              ]
            },
            "source": {
              "type": "string",
              "description": "The docs page that names it"
            },
            "state": {
              "enum": [
                "tested",
                "documented"
              ]
            }
          }
        },
        "api": {
          "type": "object",
          "description": "Its API: send requests to base_url (from its OpenAPI document)",
          "required": [
            "base_url",
            "state"
          ],
          "properties": {
            "base_url": {
              "type": "string"
            },
            "state": {
              "enum": [
                "tested",
                "documented"
              ]
            }
          }
        },
        "signup": {
          "type": "object",
          "description": "Its sign-up page, where an account and a key start",
          "required": [
            "url",
            "state"
          ],
          "properties": {
            "url": {
              "type": "string"
            },
            "state": {
              "enum": [
                "tested",
                "documented"
              ]
            }
          }
        },
        "docs": {
          "type": "object",
          "description": "Its docs' home page",
          "required": [
            "url",
            "state"
          ],
          "properties": {
            "url": {
              "type": "string"
            },
            "state": {
              "enum": [
                "tested",
                "documented"
              ]
            }
          }
        }
      }
    },
    "missing": {
      "type": "object",
      "description": "Only in nearest_tools: the filter it misses and the value asked",
      "properties": {
        "filter": {
          "enum": [
            "min_level",
            "self_signup",
            "access",
            "surface",
            "pays_with"
          ]
        },
        "wanted": {
          "type": [
            "string",
            "integer",
            "boolean"
          ]
        }
      }
    }
  }
}