{
  "ok": true,
  "resource": {
    "id": "RES_4C2CCBAAB85A",
    "resource_type": "mcp_server",
    "canonical_url": "https://registry.modelcontextprotocol.io/v0.1/servers/ai.bowmark%2Fbowmark/versions/8.89.3",
    "name": "Bowmark",
    "summary_en": "Do things on live websites: prices, availability, quotes, bookings, anything behind a form or login.",
    "summary_zh": "在真实网站上执行操作：价格、库存、报价、预订，以及任何需要表单或登录才能获取的信息。",
    "description_en": "Bowmark is an MCP server that enables agents to perform actions on live websites, such as checking prices, availability, getting quotes, and making bookings. It provides a function library to discover capabilities and a script execution environment to run tasks against real sites. The server exposes four tools: get_library (discover capabilities), run (execute scripts on live websites), register (create a free account for higher usage limits), and report (provide feedback on missing capabilities).",
    "description_zh": "Bowmark 是一个 MCP 服务器，使代理能够在真实网站上执行操作，例如检查价格、库存、获取报价和进行预订。它提供了一个函数库来发现能力，以及一个脚本执行环境来在真实网站上运行任务。该服务器暴露了四个工具：get_library（发现能力）、run（在真实网站上执行脚本）、register（创建免费账户以获得更高使用限制）和 report（提供关于缺失能力的反馈）。",
    "provider_name": "ai.bowmark",
    "homepage_url": "https://bowmark.ai/",
    "endpoint_url": "https://api.bowmark.ai/mcp/registry",
    "source_url": "https://github.com/bowmark-ai/skill",
    "icon_url": null,
    "cover_image_url": null,
    "capabilities": [
      "web.action",
      "web.discover",
      "account.create",
      "feedback.report"
    ],
    "categories": [
      "automation",
      "commerce",
      "data"
    ],
    "industries": [
      "general",
      "commerce"
    ],
    "protocols": [
      "mcp"
    ],
    "auth": {
      "type": "unknown"
    },
    "pricing": {
      "model": "unknown"
    },
    "input_schema": {},
    "output_schema": {},
    "metadata": {
      "content_language": "en",
      "translation_status": "original-only",
      "official_registry": {
        "version": "8.89.3",
        "packages": [],
        "remotes": []
      },
      "review_gate": {
        "passed": true,
        "reasons": [],
        "policy_version": "review-gate-v1",
        "evaluated_at": "2026-09-03T06:19:41.720Z"
      }
    },
    "latest_version": "8.89.3",
    "status": "listed",
    "health_status": "healthy",
    "source_kind": "imported",
    "source_agent": "registry.modelcontextprotocol.io",
    "trust": {
      "signal": "none",
      "reason": "No suspicious or malicious evidence found.",
      "signals": {
        "yellow": 0,
        "red": 0
      }
    },
    "review_summary": {
      "method_version": "capability-evidence-v2",
      "capability_definition": "partial",
      "contract_completeness": "partial",
      "access_friction": "medium",
      "operational_transparency": "partial",
      "evidence_strength": "protocol_inspected",
      "use_readiness": "guided_use",
      "reviewed_at": "2026-09-03T06:33:18.427Z"
    },
    "experience_count": 0,
    "verified_experience_count": 0,
    "usage_count": 0,
    "success_rate": null,
    "first_seen_at": "2026-09-03T02:52:47.299Z",
    "last_seen_at": "2026-09-03T06:33:17.545Z",
    "published_at": "2026-09-03T06:31:19.052Z",
    "created_at": "2026-09-03T02:52:47.299Z",
    "updated_at": "2026-09-03T06:33:18.427Z",
    "api_url": "https://aiworkshub.io/api/v1/resources/RES_4C2CCBAAB85A",
    "reviews_url": "https://aiworkshub.io/api/v1/resources/RES_4C2CCBAAB85A/reviews",
    "public_url": "https://aiworkshub.io/resources/RES_4C2CCBAAB85A",
    "distribution": {
      "canonical_identity": "https://registry.modelcontextprotocol.io/v0.1/servers/ai.bowmark%2Fbowmark/versions/8.89.3",
      "syndicatable": true,
      "origins": [
        {
          "registry_url": "https://registry.modelcontextprotocol.io/",
          "upstream_resource_id": "ai.bowmark/bowmark@8.89.3",
          "upstream_record_url": "https://registry.modelcontextprotocol.io/v0.1/servers/ai.bowmark%2Fbowmark/versions/8.89.3",
          "relation": "syndicated",
          "metadata": {
            "source": "official-mcp-registry"
          },
          "first_seen_at": "2026-09-03T02:52:47.299Z",
          "last_seen_at": "2026-09-03T06:33:17.545Z"
        }
      ]
    },
    "tools": [
      {
        "name": "get_library",
        "title_en": "Check what can be done on a live website for this task",
        "title_zh": "检查此任务在真实网站上可以执行哪些操作",
        "description_en": "Use this whenever a task touches a live website. It answers whether Bowmark can already do the thing: look up current prices, check real availability or stock, search a site, get a quote or a fare, drive a configurator, start a booking, or pull anything that only exists behind a form, a filter, or a login. Pass a query describing what you want to do or a company/site name. Returns a function library with namespaces, types, functions, and examples.",
        "description_zh": "每当任务涉及真实网站时使用此工具。它回答 Bowmark 是否已经能够执行该操作：查找当前价格、检查真实库存、搜索网站、获取报价或票价、驱动配置器、开始预订或获取任何仅存在于表单、筛选器或登录后的信息。传入描述您想做什么或公司/网站名称的查询。返回包含命名空间、类型、函数和示例的函数库。",
        "input_schema": {
          "type": "object",
          "properties": {
            "query": {
              "type": "string",
              "description": "Optional, but pass one — it decides how much detail comes back. What the user wants to do, in their words (\"flights\", \"price a GPU\", \"book a table\", \"check stock\"), or a company/site if they named one (\"Kayak\", \"newegg.com\"). A rough guess is always safe: a value that matches nothing returns the one-line index rather than an error, and so does omitting it."
            }
          },
          "additionalProperties": false
        },
        "output_schema": {},
        "unit_kind": "mcp_tool",
        "effect": "read",
        "open_world": false,
        "idempotency": "safe_to_retry",
        "confirmation": "explicit policy",
        "evidence_ids": [
          "protocol-tools"
        ],
        "runtime_auth": {},
        "pricing": {},
        "metadata": {}
      },
      {
        "name": "register",
        "title_en": "Create a free Bowmark account for more calls",
        "title_zh": "创建免费的 Bowmark 账户以获得更多调用",
        "description_en": "Creates a free Bowmark account and returns an API key. Call it when a run is refused for hitting the anonymous limit, when you expect to make more than a handful of calls, or any time the user says they want an account. All arguments are optional; register({}) is a complete, valid call. Passing an email creates a Bowmark sign-in for that address; only pass it if the user supplied one.",
        "description_zh": "创建免费的 Bowmark 账户并返回 API 密钥。当运行因达到匿名限制而被拒绝、预计进行多次调用或用户表示需要账户时调用。所有参数均为可选；register({}) 是完整有效的调用。传递电子邮件会为该地址创建 Bowmark 登录；仅在用户提供时才传递。",
        "input_schema": {
          "type": "object",
          "properties": {
            "email": {
              "type": "string",
              "description": "OPTIONAL contact address. It is NOT an API credential — no key depends on it — but passing one CREATES A BOWMARK SIGN-IN for that address, so the user can sign in with an emailed code and manage the account. Pass it only if the user supplied one; omit it entirely otherwise. Never invent, guess, or placeholder this — an address you made up is somebody else's mailbox."
            },
            "agent": {
              "type": "string",
              "description": "OPTIONAL free-text name for this account, so the user can tell their keys apart later (\"claude-code on my laptop\", \"research-bot\"). Purely a label."
            },
            "newsletter": {
              "type": "boolean",
              "description": "OPTIONAL, and it DEFAULTS TO TRUE — occasional product and changelog email to the address you passed. Set false to decline. It does nothing at all when no `email` is given, since there is no address to reach. If you are passing an email, tell your user it subscribes them and that you can decline for them."
            },
            "promotions": {
              "type": "boolean",
              "description": "OPTIONAL, and a SEPARATE consent from `newsletter`. Set true ONLY if the user explicitly agreed to promotional email. Defaults to false. Do not infer this."
            }
          },
          "additionalProperties": false
        },
        "output_schema": {
          "type": "object",
          "properties": {
            "ok": {
              "type": "boolean"
            },
            "apiKey": {
              "type": "string"
            },
            "keyPrefix": {
              "type": "string"
            },
            "accountId": {
              "type": "string"
            },
            "claimUrl": {
              "type": "string"
            },
            "signInUrl": {
              "type": [
                "string",
                "null"
              ]
            },
            "claimExpiresAt": {
              "type": [
                "string",
                "null"
              ]
            },
            "freeCallsPerMonth": {
              "type": "number"
            },
            "activeNow": {
              "type": "boolean"
            },
            "email": {
              "type": [
                "string",
                "null"
              ]
            },
            "newsletter": {
              "type": "boolean"
            },
            "promotions": {
              "type": "boolean"
            },
            "message": {
              "type": "string"
            },
            "reason": {
              "type": "string"
            },
            "error": {
              "type": "string"
            }
          },
          "required": [
            "ok"
          ],
          "additionalProperties": false
        },
        "unit_kind": "mcp_tool",
        "effect": "account_creation",
        "open_world": false,
        "idempotency": "unknown",
        "confirmation": "explicit policy",
        "evidence_ids": [
          "protocol-tools"
        ],
        "runtime_auth": {},
        "pricing": {},
        "metadata": {}
      },
      {
        "name": "report",
        "title_en": "Report what Bowmark could not do for this task",
        "title_zh": "报告 Bowmark 无法为此任务执行的操作",
        "description_en": "Record what was missing, wrong, or incomplete so Bowmark can build it. Pass the runId returned by run when this report is about a run; omit it when get_library did not cover the task. This records feedback only and does not retry a run.",
        "description_zh": "记录缺失、错误或不完整的内容，以便 Bowmark 可以构建它。当报告涉及运行时，传递 run 返回的 runId；当 get_library 未涵盖任务时省略。此操作仅记录反馈，不会重试运行。",
        "input_schema": {
          "type": "object",
          "properties": {
            "report": {
              "type": "string",
              "minLength": 1,
              "maxLength": 4000,
              "description": "What Bowmark could not do or returned incorrectly."
            },
            "runId": {
              "type": "string",
              "format": "uuid",
              "description": "Optional `runId` returned by `run` for the result you are reporting."
            }
          },
          "required": [
            "report"
          ],
          "additionalProperties": false
        },
        "output_schema": {
          "type": "object",
          "properties": {
            "ok": {
              "type": "boolean"
            }
          },
          "required": [
            "ok"
          ],
          "additionalProperties": false
        },
        "unit_kind": "mcp_tool",
        "effect": "write",
        "open_world": false,
        "idempotency": "unknown",
        "confirmation": "explicit policy",
        "evidence_ids": [
          "protocol-tools"
        ],
        "runtime_auth": {},
        "pricing": {},
        "metadata": {}
      },
      {
        "name": "run",
        "title_en": "Do the task on the live websites and return the result",
        "title_zh": "在真实网站上执行任务并返回结果",
        "description_en": "Executes the task on the real websites (search, price check, availability lookup, configurator, booking flow) and returns what came back. Runs a script you authored against the get_library vocabulary, on the live sites, and returns { ok, result, logs, error, ms }. Call get_library first to get the exact function names and argument shapes.",
        "description_zh": "在真实网站上执行任务（搜索、价格检查、库存查询、配置器、预订流程）并返回结果。运行您根据 get_library 词汇表编写的脚本，在真实网站上执行，并返回 { ok, result, logs, error, ms }。请先调用 get_library 以获取确切的函数名称和参数结构。",
        "input_schema": {
          "type": "object",
          "properties": {
            "script": {
              "type": "string",
              "description": "The JavaScript script body to execute (async, against the `bowmark` global). e.g. `const { flights, warnings } = await bowmark.flights.search({from:'SFO',to:'JFK',depart:'2026-09-01'}); return { best: flights.sort((a,b)=>a.price-b.price)[0], warnings };`"
            }
          },
          "required": [
            "script"
          ],
          "additionalProperties": false
        },
        "output_schema": {
          "type": "object",
          "properties": {
            "runId": {
              "type": "string",
              "format": "uuid"
            },
            "ok": {
              "type": "boolean"
            },
            "status": {
              "type": "string",
              "enum": [
                "ok",
                "error",
                "partial",
                "needs_user"
              ]
            },
            "result": {},
            "logs": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "error": {
              "type": [
                "string",
                "null"
              ]
            },
            "ms": {
              "type": "number"
            },
            "needs": {
              "type": "array",
              "items": {}
            },
            "incomplete": {},
            "meta": {}
          },
          "required": [
            "ok"
          ],
          "additionalProperties": false
        },
        "unit_kind": "mcp_tool",
        "effect": "irreversible",
        "open_world": true,
        "idempotency": "unknown",
        "confirmation": "explicit policy",
        "evidence_ids": [
          "protocol-tools"
        ],
        "runtime_auth": {},
        "pricing": {},
        "metadata": {}
      }
    ],
    "review_profile": {
      "schema_version": "aiworkshub.resource-review/0.2",
      "method_version": "capability-evidence-v2",
      "review_state": {
        "identity": "verified",
        "source": "verified",
        "connectivity": "verified",
        "contract": "partial",
        "safe_use": "untested",
        "real_use": "unobserved"
      },
      "assessment": {
        "capability_definition": "partial",
        "contract_completeness": "partial",
        "access_friction": "medium",
        "operational_transparency": "partial",
        "evidence_strength": "protocol_inspected",
        "use_readiness": "guided_use"
      },
      "profile": {
        "capabilities": [
          {
            "id": "web.action",
            "weight": 100,
            "confidence": 80,
            "evidence_ids": [
              "source-record",
              "protocol-tools"
            ]
          },
          {
            "id": "web.discover",
            "weight": 80,
            "confidence": 90,
            "evidence_ids": [
              "protocol-tools"
            ]
          },
          {
            "id": "account.create",
            "weight": 40,
            "confidence": 90,
            "evidence_ids": [
              "protocol-tools"
            ]
          },
          {
            "id": "feedback.report",
            "weight": 20,
            "confidence": 90,
            "evidence_ids": [
              "protocol-tools"
            ]
          }
        ],
        "domains": [
          {
            "id": "web-automation",
            "weight": 100,
            "confidence": 80,
            "evidence_ids": [
              "source-record",
              "protocol-tools"
            ]
          },
          {
            "id": "e-commerce",
            "weight": 60,
            "confidence": 60,
            "evidence_ids": [
              "source-record"
            ]
          },
          {
            "id": "travel",
            "weight": 40,
            "confidence": 50,
            "evidence_ids": [
              "source-record"
            ]
          }
        ],
        "workflow_roles": [
          "execute",
          "transact",
          "retrieve",
          "discover"
        ]
      },
      "capability_units": [
        {
          "id": "tool:get_library",
          "kind": "mcp_tool",
          "capability_id": "web.discover",
          "effect": "read",
          "open_world": false,
          "idempotency": "safe_to_retry",
          "confirmation": "explicit policy",
          "input_contract": "typed",
          "output_contract": "untyped",
          "accepts": [
            "string"
          ],
          "produces": [
            "text"
          ],
          "runtime_auth": {},
          "pricing": {},
          "evidence_ids": [
            "protocol-tools"
          ],
          "metadata": {}
        },
        {
          "id": "tool:run",
          "kind": "mcp_tool",
          "capability_id": "web.action",
          "effect": "irreversible",
          "open_world": true,
          "idempotency": "unknown",
          "confirmation": "explicit policy",
          "input_contract": "typed",
          "output_contract": "typed_envelope_dynamic_result",
          "accepts": [
            "string"
          ],
          "produces": [
            "json"
          ],
          "runtime_auth": {},
          "pricing": {},
          "evidence_ids": [
            "protocol-tools"
          ],
          "metadata": {}
        },
        {
          "id": "tool:register",
          "kind": "mcp_tool",
          "capability_id": "account.create",
          "effect": "account_creation",
          "open_world": false,
          "idempotency": "unknown",
          "confirmation": "explicit policy",
          "input_contract": "typed",
          "output_contract": "typed",
          "accepts": [
            "string",
            "boolean"
          ],
          "produces": [
            "json"
          ],
          "runtime_auth": {},
          "pricing": {},
          "evidence_ids": [
            "protocol-tools"
          ],
          "metadata": {}
        },
        {
          "id": "tool:report",
          "kind": "mcp_tool",
          "capability_id": "feedback.report",
          "effect": "write",
          "open_world": false,
          "idempotency": "unknown",
          "confirmation": "explicit policy",
          "input_contract": "typed",
          "output_contract": "typed",
          "accepts": [
            "string"
          ],
          "produces": [
            "json"
          ],
          "runtime_auth": {},
          "pricing": {},
          "evidence_ids": [
            "protocol-tools"
          ],
          "metadata": {}
        }
      ],
      "access": {
        "distribution_license": {},
        "runtime_auth": {
          "type": "unknown",
          "details": "Anonymous usage with rate limits; optional free account via register tool for higher limits."
        },
        "runtime_pricing": {
          "model": "unknown",
          "details": "Free tier available; no explicit pricing information in evidence."
        },
        "dependencies": []
      },
      "operational_flags": [
        "open_world_tool_present",
        "account_creation_tool_present"
      ],
      "trust": {
        "signal": "none",
        "evidence_ids": [],
        "reason": "No suspicious or malicious evidence found."
      },
      "fit": {
        "good_for": [
          "Automating tasks on live websites such as price checks, availability, bookings",
          "Agents needing to execute JavaScript against real web services",
          "Scenarios where a function library helps discover web capabilities"
        ],
        "not_for": [
          "Tasks requiring offline or static data",
          "Users needing guaranteed idempotent operations",
          "Scenarios where explicit confirmation for external actions is not acceptable"
        ]
      },
      "evidence": [
        {
          "id": "source-record",
          "type": "registry_record",
          "source": "https://github.com/bowmark-ai/skill",
          "observation": "MCP source record for Bowmark; version 8.89.3.",
          "observed_at": null,
          "payload": {}
        },
        {
          "id": "protocol-tools",
          "type": "protocol_observation",
          "source": "https://api.bowmark.ai/mcp/registry#tools/list",
          "observation": "4 tools were returned by MCP discovery; 4 were retained for review.",
          "observed_at": "2026-09-03T06:19:28.022Z",
          "payload": {}
        }
      ],
      "unknowns": [
        "Exact pricing model beyond free tier",
        "Authentication requirements for higher usage limits",
        "Full list of supported websites and capabilities",
        "Idempotency of run and register tools",
        "Data retention and privacy policies"
      ],
      "id": "REV_6DA86534C83A",
      "resource_id": "RES_4C2CCBAAB85A",
      "evaluator_type": "platform_ai",
      "provider": "deepseek",
      "model": "deepseek-v4-flash",
      "review_scope": "protocol-inspected-mcp",
      "created_at": "2026-09-03T06:33:18.427Z"
    }
  }
}