Skip to main content
Glama

Bowmark web data: LinkedIn, Amazon, YouTube, Reddit, Airbnb, Instagram

Check what Bowmark can do for this task

get_library
Read-onlyIdempotent

Use this whenever a task touches a live website. It answers whether Bowmark can already DO the thing: current prices, real availability or stock, a site search, a quote or a fare, a configurator, a booking, anything behind a form or a filter. Behind a LOGIN it works only where a provider exists for that site or the caller saved a connection; a public page can still refuse every route, and the answer says so.

Use this for Bowmark questions too. Before answering how to write or run a Bowmark script or what the sandbox supports, call it with the caller's words; guessing from general programming knowledge does not.

Checking is cheap, so check. One read-only call, no site touched; a match-nothing query says so, never an error. If nothing fits, you lost one cheap call; use your normal approach.

Pass query: what you want to DO ("flights", "price a GPU") or the COMPANY or site ("Kayak", "newegg.com"). Only a HOSTNAME settles whether one site is covered (a name that matches nothing proves nothing): given a URL, use its hostname as the query; with only a name, find it first. Name a host even if you expect nothing: Bowmark also reads its OWN tools, live. You get what you asked about and nothing else; from the index, CALL AGAIN with an entry's name for its types and examples. Several parts? Pass queries: ["amazon", "youtube"], one per part, in ONE call.

Read the first lines of the answer. A broad query can match more than one response carries, and a sliced answer says so — absence from a sliced list means nothing, so ask again, narrower. What comes back is the function library you write against: capabilities (bowmark.flights.search(...)), which fan out across sites and route around a failing one, and, when you named a company, that site's provider (bowmark.providers.kayak.search(...)). Prefer the capability.

Loop: call get_library → write a JS script against the bowmark global → send it to run. The full reference is get_library({ query: "run guide" }).

Input Schema

NameRequiredDescriptionDefault
queryNoOptional, 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"). If they supplied only a URL, pass its hostname rather than the full URL or its query parameters — and a HOSTNAME is worth passing even for a site you expect nothing to exist for, because that is what makes Bowmark look for the site's own tools. A rough guess is always safe: a value that matches nothing says so and what to try next rather than erroring, and omitting it returns the one-line index.
minimalNoOptional. `true` answers only whether `query` is covered, in one line — no types, no examples, no fallback tools. For a quick coverage check, not for writing a script against the result.
queriesNoOptional. Several lookups in ONE call, one per part of the task: `["amazon", "youtube"]`, `["flights", "hotels in Lisbon"]`. Each entry is written exactly like `query` and answered exactly as `query` alone would be, in its own section. Use this instead of calling get_library once per part. At most 6; a `query` passed alongside is folded in.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / minimal
      Added value: +{
      +  "description": "Optional. `true` answers only whether `query` is covered, in one line — no types, no examples, no fallback tools. For a quick coverage check, not for writing a script against the result.",
      +  "type": "boolean"
      +}
  2. Changed1 schema field changed
    • changedInput schema / properties / query / description
      Previous value: -"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\"). If they supplied only a URL, pass its hostname rather than the full URL or its query parameters — and a HOSTNAME is worth passing even for a site you expect nothing to exist for, because that is what makes Bowmark look for the site's own tools. 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."New value: +"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\"). If they supplied only a URL, pass its hostname rather than the full URL or its query parameters — and a HOSTNAME is worth passing even for a site you expect nothing to exist for, because that is what makes Bowmark look for the site's own tools. A rough guess is always safe: a value that matches nothing says so and what to try next rather than erroring, and omitting it returns the one-line index."
  3. Changed1 schema field changed
    • addedInput schema / properties / queries
      Added value: +{
      +  "description": "Optional. Several lookups in ONE call, one per part of the task: `[\"amazon\", \"youtube\"]`, `[\"flights\", \"hotels in Lisbon\"]`. Each entry is written exactly like `query` and answered exactly as `query` alone would be, in its own section. Use this instead of calling get_library once per part. At most 6; a `query` passed alongside is folded in.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
  4. Changed1 schema field changed
    • changedInput schema / properties / query / description
      Previous value: -"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\"). If they supplied only a URL, pass its hostname rather than the full URL or its query parameters. 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."New value: +"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\"). If they supplied only a URL, pass its hostname rather than the full URL or its query parameters — and a HOSTNAME is worth passing even for a site you expect nothing to exist for, because that is what makes Bowmark look for the site's own tools. 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."
  5. Changed1 schema field changed
    • changedInput schema / properties / query / description
      Previous value: -"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."New value: +"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\"). If they supplied only a URL, pass its hostname rather than the full URL or its query parameters. 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."
  6. Changed1 schema field changed
    • removedInput schema / $schema
      Removed value: -"http://json-schema.org/draft-07/schema#"
  7. Changed1 schema field changed
    • changedInput schema / properties / query / description
      Previous value: -"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 of the whole library rather than an error, and so does omitting it."New value: +"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."
  8. Changed1 schema field changed
    • changedInput schema / properties / query / description
      Previous value: -"Optional. 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\"). Omit for the full catalog; an unrecognized value also returns the full catalog, so a rough guess is always safe."New value: +"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 of the whole library rather than an error, and so does omitting it."
  9. Changed1 schema field changed
    • changedInput schema / properties / query / description
      Previous value: -"Optional. What you want to do (\"flights\", \"price a GPU\"), or a company/site if you specifically want one (\"Kayak\", \"newegg.com\"). Omit for the full catalog; an unrecognized value also returns the full catalog."New value: +"Optional. 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\"). Omit for the full catalog; an unrecognized value also returns the full catalog, so a rough guess is always safe."
  10. Added

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations: no site is touched, a match-nothing query returns an explanation rather than an error, a broad query can return a sliced list where absence proves nothing, and login-gated sites only work with an existing provider/connection. It also discloses the follow-up pattern (call again with an index entry's name for types and examples). All consistent with readOnlyHint/openWorldHint=false.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the primary trigger and bold section headers, but it is long and repetitive for a three-parameter lookup — the 'Checking is cheap, so check' paragraph and the closing loop restate guidance already given. Several clauses could be cut without losing instruction.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the burden of explaining returns, and it does: capability functions, per-site provider functions, an index when no query is given, and one-line output under `minimal`. Truncation behavior is flagged. Only the exact shape of a sliced response is left vague.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real semantics beyond the schema: a hostname is what settles single-site coverage (a name matching nothing proves nothing), and a returned index entry should be re-queried by name for its types and examples. Multi-part tasks should use `queries` in one call rather than repeating calls.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description makes clear this is a capability/index lookup ('It answers whether Bowmark can already DO the thing') and later states plainly 'What comes back is the function library you write against.' It distinguishes itself from the execution sibling by describing the loop 'get_library → write a JS script → send it to run.' The framing is somewhat indirect (it never says 'returns a list of callable functions' up front), which keeps it below a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use ('whenever a task touches a live website', 'for Bowmark questions too'), when-not ('Behind a LOGIN it works only where a provider exists'), and cost of a wrong call ('If nothing fits, you lost one cheap call; use your normal approach'). It also routes between its own parameters (query vs queries vs minimal) and names the follow-on tool (run).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.