Skip to main content
Glama

Search venues

search_venues
Read-onlyIdempotent

Find restaurants and bars by city, cuisine, opening time or features. Filters are HARD, prefer_* and avoid are SOFT (rank only), and query is a name, a keyword or a short description. Each result has slug, capabilities, open_now and distance_km; a destination city's venues are here, its listings in destination_listings.

Input Schema

NameRequiredDescriptionDefault
atNoA local time (20:00 or 8pm) for the open_on filter; requires open_on.
cityNoHARD filter: only venues in this city (case-insensitive); call list_cities for the exact values this directory knows.
nearNoHARD filter: only venues within radius_km of this 'latitude,longitude' point, nearest first, each with a distance_km; venues with no coordinates are excluded.
avoidNoSOFT: venues matching these cuisine/neighbourhood tokens rank LOWER; not dropped.
limitNoMaximum number of items to return.
queryNoA name, a cuisine word or a short description of the place (e.g. 'quiet seafood with a sea view'); a dish is in search_menus. Venues whose name, description, cuisine, neighbourhood, city or alternate names contain every word come first, then venues whose profile is closest in meaning, each with match.similarity; omit to list all.
cursorNoNumber of items to skip; pass `next_cursor` from the previous page.
facetsNoHARD experiential-facet filter: each token is '<facet_type>:<value>' (e.g. 'dietary:vegetarian', 'view:sea'). A venue must match every facet_type given (values OR within a type); a miss EXCLUDES it. Values: vibe: authentic, bustling, buzzy, calm, casual, charming, chic, chill, classic, cozy, creative, elegant, energetic, family-friendly, friendly, fun, hidden-gem, historic, intimate, laid-back, lively, local, local-favorite, luxurious, modern, neighbourhood, party, quiet, refined, relaxed, romantic, rustic, scenic, sophisticated, stylish, traditional, trendy, upscale, vibrant, warm, welcoming; good_for: business-dinner, business-lunch, celebration, date-night, drinks, family, groups, nightlife, quick-bite, solo, work-friendly; not_good_for: alcohol, budget, date-night, dogs, fine-dining, kids, large-groups, late-night, outdoor-dining, quick-bite, quiet-conversation, sports-watching, vegetarians, work-friendly; feature: alcohol-free, beach-club, beer, bib-gourmand, cocktails, coffee, delivery, desserts, dog-friendly, kids-menu, live-music, michelin-guide, michelin-star, nightclub, outdoor-seating, private-dining, reservations, rooftop, serves-alcohol, shisha, sports-screening, takeout, waterfront, wine-list; noise_level: lively, loud, moderate, quiet; view: garden, sea, skyline, street, waterfront; dress_code: casual, formal, smart-casual; meal_period: breakfast, brunch, dinner, late-night, lunch; dietary: dairy-free, gluten-free, halal, jain, kosher, nut-free, pescatarian, vegan, vegetarian; accessibility: accessible-parking, accessible-restroom, step-free, wheelchair-accessible; cuisine: a cuisine word, e.g. italian, japanese, seafood.
cuisineNoHARD filter: only venues with this cuisine (case-insensitive exact match; a miss's reason lists the valid values).
open_onNoHARD filter: only venues open on this weekday, or today/tomorrow in the venue's own timezone (optionally at 'at'); for tonight use open_on=today with at. Venues with no published hours are excluded. A result's open_now is still the request time (open_now_at), not the open_on/at time.
open_nowNoSet true = open at this moment, not later today (venue local time, as open_now_at); for tonight use open_on=today with at; omit otherwise.
radius_kmNoSearch radius in km around 'near' (default applied when omitted).
price_bandNoHARD filter: only venues in this price band, e.g. '$$'.
neighbourhoodNoHARD filter: only venues in this neighbourhood (case-insensitive exact match; a miss's reason lists the valid values).
prefer_facetsNoSOFT experiential-facet preference, the same '<facet_type>:<value>' tokens and values as facets: a venue that declares them ranks higher but is NEVER dropped.
prefer_cuisineNoSOFT: venues of these cuisines rank higher; non-matches are NOT dropped.
accepts_reservationsNoSet true to require venues that take reservations (a booking link or a live booking tool); omit otherwise.
prefer_neighbourhoodNoSOFT: venues in these neighbourhoods rank higher; non-matches are NOT dropped.

Output Schema

NameRequiredDescriptionDefault
itemNo
itemsNo
reasonNo
sampleNo
sourceNo
statusYes
paginationNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • changedInput schema / properties / at / description
      Previous value: -"A local time (20:00 or 8pm); requires open_on."New value: +"A local time (20:00 or 8pm) for the open_on filter; requires open_on."
    • changedInput schema / properties / open_now / description
      Previous value: -"Set true = open at this moment, not later today (venue local time); for tonight use open_on=today with at; omit otherwise."New value: +"Set true = open at this moment, not later today (venue local time, as open_now_at); for tonight use open_on=today with at; omit otherwise."
    • changedInput schema / properties / open_on / description
      Previous value: -"HARD filter: only venues open on this weekday, or today/tomorrow in the venue's own timezone (optionally at 'at'); for tonight use open_on=today with at. Venues with no published hours are excluded."New value: +"HARD filter: only venues open on this weekday, or today/tomorrow in the venue's own timezone (optionally at 'at'); for tonight use open_on=today with at. Venues with no published hours are excluded. A result's open_now is still the request time (open_now_at), not the open_on/at time."
  2. Changed2 schema fields changed
    • changedInput schema / properties / facets / description
      Previous value: -"HARD experiential-facet filter: each token is '<facet_type>:<value>' (e.g. 'dietary:vegetarian', 'vibe:romantic'); types are vibe, good_for, not_good_for, feature, noise_level, view, dress_code, meal_period, cuisine, dietary, accessibility. A venue must match every facet_type given (values OR within a type); a miss EXCLUDES it."New value: +"HARD experiential-facet filter: each token is '<facet_type>:<value>' (e.g. 'dietary:vegetarian', 'view:sea'). A venue must match every facet_type given (values OR within a type); a miss EXCLUDES it. Values: vibe: authentic, bustling, buzzy, calm, casual, charming, chic, chill, classic, cozy, creative, elegant, energetic, family-friendly, friendly, fun, hidden-gem, historic, intimate, laid-back, lively, local, local-favorite, luxurious, modern, neighbourhood, party, quiet, refined, relaxed, romantic, rustic, scenic, sophisticated, stylish, traditional, trendy, upscale, vibrant, warm, welcoming; good_for: business-dinner, business-lunch, celebration, date-night, drinks, family, groups, nightlife, quick-bite, solo, work-friendly; not_good_for: alcohol, budget, date-night, dogs, fine-dining, kids, large-groups, late-night, outdoor-dining, quick-bite, quiet-conversation, sports-watching, vegetarians, work-friendly; feature: alcohol-free, beach-club, beer, bib-gourmand, cocktails, coffee, delivery, desserts, dog-friendly, kids-menu, live-music, michelin-guide, michelin-star, nightclub, outdoor-seating, private-dining, reservations, rooftop, serves-alcohol, shisha, sports-screening, takeout, waterfront, wine-list; noise_level: lively, loud, moderate, quiet; view: garden, sea, skyline, street, waterfront; dress_code: casual, formal, smart-casual; meal_period: breakfast, brunch, dinner, late-night, lunch; dietary: dairy-free, gluten-free, halal, jain, kosher, nut-free, pescatarian, vegan, vegetarian; accessibility: accessible-parking, accessible-restroom, step-free, wheelchair-accessible; cuisine: a cuisine word, e.g. italian, japanese, seafood."
    • changedInput schema / properties / prefer_facets / description
      Previous value: -"SOFT experiential-facet preference, same '<facet_type>:<value>' tokens as facets: a venue that declares them ranks higher but is NEVER dropped."New value: +"SOFT experiential-facet preference, the same '<facet_type>:<value>' tokens and values as facets: a venue that declares them ranks higher but is NEVER dropped."
  3. Changed1 schema field changed
    • changedInput schema / properties / query / description
      Previous value: -"ONE keyword: a name or cuisine word; for a dish use search_menus. Matched in name, description, cuisine, neighbourhood, city or alternate names; omit to list all."New value: +"A name, a cuisine word or a short description of the place (e.g. 'quiet seafood with a sea view'); a dish is in search_menus. Venues whose name, description, cuisine, neighbourhood, city or alternate names contain every word come first, then venues whose profile is closest in meaning, each with match.similarity; omit to list all."
  4. Changed66 schema fields changed
    • removedInput schema / additionalProperties
      Removed value: -false
    • removedInput schema / properties / accepts_reservations / anyOf
      Removed value: -[
      -  {
      -    "type": "boolean"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • changedInput schema / properties / accepts_reservations / description
      Previous value: -"Filter by whether the venue takes reservations (has a live booking tool or a booking link); omit for both."New value: +"Set true to require venues that take reservations (a booking link or a live booking tool); omit otherwise."
    • addedInput schema / properties / accepts_reservations / type
      Added value: +[
      +  "boolean",
      +  "null"
      +]
    • removedInput schema / properties / at / anyOf
      Removed value: -[
      -  {
      -    "format": "time",
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • changedInput schema / properties / at / description
      Previous value: -"A 24-hour HH:MM time; with open_on, require the venue be open then."New value: +"A local time (20:00 or 8pm); requires open_on."
    • addedInput schema / properties / at / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • changedInput schema / properties / avoid / description
      Previous value: -"Soft preference: venues matching these cuisine/neighbourhood tokens rank LOWER; not dropped."New value: +"SOFT: venues matching these cuisine/neighbourhood tokens rank LOWER; not dropped."
    • removedInput schema / properties / city / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • changedInput schema / properties / city / description
      Previous value: -"Only return venues in this city (case-insensitive); call list_cities for the exact values this directory knows."New value: +"HARD filter: only venues in this city (case-insensitive); call list_cities for the exact values this directory knows."
    • addedInput schema / properties / city / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedInput schema / properties / cuisine / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • changedInput schema / properties / cuisine / description
      Previous value: -"Only return venues with this cuisine (case-insensitive exact match)."New value: +"HARD filter: only venues with this cuisine (case-insensitive exact match; a miss's reason lists the valid values)."
    • addedInput schema / properties / cuisine / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • changedInput schema / properties / facets / description
      Previous value: -"HARD experiential-facet filter: each token is '<facet_type>:<value>' (e.g. 'dietary:vegetarian', 'vibe:romantic'). A venue must match every facet_type given (values OR within a type, types AND across); a miss EXCLUDES it. Call facet_vocabulary for the legal types and values."New value: +"HARD experiential-facet filter: each token is '<facet_type>:<value>' (e.g. 'dietary:vegetarian', 'vibe:romantic'); types are vibe, good_for, not_good_for, feature, noise_level, view, dress_code, meal_period, cuisine, dietary, accessibility. A venue must match every facet_type given (values OR within a type); a miss EXCLUDES it."
    • removedInput schema / properties / near / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • changedInput schema / properties / near / description
      Previous value: -"Only return venues within radius_km of this 'latitude,longitude' point, nearest first, each with a distance_km; venues with no coordinates are excluded."New value: +"HARD filter: only venues within radius_km of this 'latitude,longitude' point, nearest first, each with a distance_km; venues with no coordinates are excluded."
    • addedInput schema / properties / near / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedInput schema / properties / neighbourhood / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • changedInput schema / properties / neighbourhood / description
      Previous value: -"Only return venues in this neighbourhood (case-insensitive exact match)."New value: +"HARD filter: only venues in this neighbourhood (case-insensitive exact match; a miss's reason lists the valid values)."
    • addedInput schema / properties / neighbourhood / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedInput schema / properties / open_now / anyOf
      Removed value: -[
      -  {
      -    "type": "boolean"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • changedInput schema / properties / open_now / description
      Previous value: -"Only return venues open (true) or closed (false) at their own local time now; venues with no timezone or hours are excluded."New value: +"Set true = open at this moment, not later today (venue local time); for tonight use open_on=today with at; omit otherwise."
    • addedInput schema / properties / open_now / type
      Added value: +[
      +  "boolean",
      +  "null"
      +]
    • changedInput schema / properties / open_on / anyOf
      Previous value: -[
      -  {
      -    "enum": [
      -      "monday",
      -      "tuesday",
      -      "wednesday",
      -      "thursday",
      -      "friday",
      -      "saturday",
      -      "sunday"
      -    ],
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "enum": [
      +      "monday",
      +      "tuesday",
      +      "wednesday",
      +      "thursday",
      +      "friday",
      +      "saturday",
      +      "sunday",
      +      "today",
      +      "tomorrow"
      +    ],
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / open_on / description
      Previous value: -"Only return venues open on this weekday (optionally at 'at'); venues with no published hours are excluded."New value: +"HARD filter: only venues open on this weekday, or today/tomorrow in the venue's own timezone (optionally at 'at'); for tonight use open_on=today with at. Venues with no published hours are excluded."
    • changedInput schema / properties / prefer_cuisine / description
      Previous value: -"Soft preference: venues of these cuisines rank higher; non-matches are NOT dropped."New value: +"SOFT: venues of these cuisines rank higher; non-matches are NOT dropped."
    • changedInput schema / properties / prefer_facets / description
      Previous value: -"SOFT experiential-facet preference, same '<facet_type>:<value>' tokens as facets: a venue that declares them ranks higher but is NEVER dropped. Call facet_vocabulary for the legal types and values."New value: +"SOFT experiential-facet preference, same '<facet_type>:<value>' tokens as facets: a venue that declares them ranks higher but is NEVER dropped."
    • changedInput schema / properties / prefer_neighbourhood / description
      Previous value: -"Soft preference: venues in these neighbourhoods rank higher; non-matches are NOT dropped."New value: +"SOFT: venues in these neighbourhoods rank higher; non-matches are NOT dropped."
    • removedInput schema / properties / price_band / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • changedInput schema / properties / price_band / description
      Previous value: -"Only return venues in this price band, e.g. '$$' (case-insensitive)."New value: +"HARD filter: only venues in this price band, e.g. '$$'."
    • addedInput schema / properties / price_band / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedInput schema / properties / query / anyOf
      Removed value: -[
      -  {
      -    "maxLength": 256,
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • changedInput schema / properties / query / description
      Previous value: -"Text to match against venue names and descriptions; omit to list all."New value: +"ONE keyword: a name or cuisine word; for a dish use search_menus. Matched in name, description, cuisine, neighbourhood, city or alternate names; omit to list all."
    • addedInput schema / properties / query / maxLength
      Added value: +256
    • addedInput schema / properties / query / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedInput schema / properties / radius_km / anyOf
      Removed value: -[
      -  {
      -    "maximum": 50,
      -    "minimum": 0,
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedInput schema / properties / radius_km / maximum
      Added value: +50
    • addedInput schema / properties / radius_km / minimum
      Added value: +0
    • addedInput schema / properties / radius_km / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • removedOutput schema / properties / item / anyOf
      Removed value: -[
      -  {
      -    "additionalProperties": true,
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedOutput schema / properties / item / default
      Removed value: -null
    • removedOutput schema / properties / item / title
      Removed value: -"Item"
    • addedOutput schema / properties / item / type
      Added value: +[
      +  "object",
      +  "null"
      +]
    • removedOutput schema / properties / items / anyOf
      Removed value: -[
      -  {
      -    "items": {
      -      "additionalProperties": true,
      -      "type": "object"
      -    },
      -    "type": "array"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedOutput schema / properties / items / default
      Removed value: -null
    • removedOutput schema / properties / items / title
      Removed value: -"Items"
    • addedOutput schema / properties / items / type
      Added value: +[
      +  "array",
      +  "null"
      +]
    • removedOutput schema / properties / pagination / anyOf
      Removed value: -[
      -  {
      -    "additionalProperties": false,
      -    "description": "The page a paginated read actually served (FR-13, INV-8).\n\n``next_cursor`` is ``None`` both at the end of the results and when the next\ncursor would exceed ``max_public_cursor`` — in either case there is no\nfurther page a caller can legally request.",
      -    "properties": {
      -      "cursor": {
      -        "title": "Cursor",
      -        "type": "integer"
      -      },
      -      "limit": {
      -        "title": "Limit",
      -        "type": "integer"
      -      },
      -      "next_cursor": {
      -        "anyOf": [
      -          {
      -            "type": "integer"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null,
      -        "title": "Next Cursor"
      -      },
      -      "total": {
      -        "title": "Total",
      -        "type": "integer"
      -      }
      -    },
      -    "required": [
      -      "limit",
      -      "cursor",
      -      "total"
      -    ],
      -    "title": "Pagination",
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedOutput schema / properties / pagination / default
      Removed value: -null
    • addedOutput schema / properties / pagination / type
      Added value: +[
      +  "object",
      +  "null"
      +]
    • removedOutput schema / properties / reason / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedOutput schema / properties / reason / default
      Removed value: -null
    • removedOutput schema / properties / reason / title
      Removed value: -"Reason"
    • addedOutput schema / properties / reason / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / sample / anyOf
      Removed value: -[
      -  {
      -    "type": "boolean"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedOutput schema / properties / sample / default
      Removed value: -null
    • removedOutput schema / properties / sample / title
      Removed value: -"Sample"
    • addedOutput schema / properties / sample / type
      Added value: +[
      +  "boolean",
      +  "null"
      +]
    • removedOutput schema / properties / source / additionalProperties
      Removed value: -false
    • removedOutput schema / properties / source / description
      Removed value: -"FR-13: which approved revision an answer was read from, and how fresh.\n\n``source`` is ``approved-content-revision:<id>`` for every read that answers\nfrom one venue, and the literal ``directory`` for the two cross-venue reads,\nwhich have no single revision to cite."
    • removedOutput schema / properties / source / properties
      Removed value: -{
      -  "approved_at": {
      -    "anyOf": [
      -      {
      -        "type": "string"
      -      },
      -      {
      -        "type": "null"
      -      }
      -    ],
      -    "default": null,
      -    "title": "Approved At"
      -  },
      -  "content_version": {
      -    "title": "Content Version",
      -    "type": "integer"
      -  },
      -  "powered_by": {
      -    "anyOf": [
      -      {
      -        "type": "string"
      -      },
      -      {
      -        "type": "null"
      -      }
      -    ],
      -    "default": null,
      -    "title": "Powered By"
      -  },
      -  "source": {
      -    "title": "Source",
      -    "type": "string"
      -  }
      -}
    • removedOutput schema / properties / source / required
      Removed value: -[
      -  "content_version",
      -  "source"
      -]
    • removedOutput schema / properties / source / title
      Removed value: -"SourceReference"
    • removedOutput schema / properties / status / title
      Removed value: -"Status"
    • removedOutput schema / title
      Removed value: -"PublicResponse"
  5. Changed3 schema fields changed
    • addedInput schema / properties / near / examples
      Added value: +[
      +  "19.0413,-98.2062"
      +]
    • changedInput schema / properties / query / anyOf
      Previous value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "maxLength": 256,
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • addedOutput schema / properties / sample
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "boolean"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Sample"
      +}
  6. First observed

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the description correctly spends its words elsewhere: it discloses that hard filters exclude and soft filters only rank, and previews the result shape (slug, capabilities, open_now, distance_km). It omits pagination behavior and any note on result size, which keeps it below a 5.

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

Conciseness5/5

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

Three dense sentences: what it finds, the filter semantics that govern all 18 params, and the sibling boundary. No restatement of the title, no filler, and the most consequential rule (HARD vs SOFT) is front-loaded.

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?

For an 18-parameter tool with an output schema, the description covers the decisions an agent must get right (filter strictness, query interpretation, sibling routing) and need not enumerate return fields further. Missing is any mention of paging via cursor/limit or how empty results should be handled, leaving a small gap.

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 baseline is 3, but with 18 parameters the description adds real value by stating the hard/soft filtering contract once at the top and by defining what `query` accepts (name, keyword, short description) with the dish lookup routed to search_menus. That aggregation is meaningfully beyond the per-parameter schema text.

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

Purpose5/5

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

Opens with a specific verb and resource plus the filter axes ('Find restaurants and bars by city, cuisine, opening time or features'), which immediately separates it from sibling tools like venue_profile or search_menus. The closing clause explicitly positions it against destination_listings, so an agent can route without opening either schema.

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

Usage Guidelines4/5

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

The HARD vs SOFT distinction for filters (including prefer_*/avoid ranking-only behavior) is exactly the guidance needed to choose parameters correctly, and 'a destination city's venues are here, its listings in destination_listings' names the alternative. It stops short of stating when not to use the tool at all, so it is a strong 4 rather than a 5.

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.

Resources