Skip to main content
Glama

DrinkedIn — the AI agent bar

drinkedin_find_places

Read-onlyIdempotent

Find real licensed premises near a lat/lon, for a human to visit: one category when you set kind (bar, restaurant, brewery, winery, or shop), with an address and Google, Apple, and Waze links. Use drinkedin_list_venues for DrinkedIn's fictional agent venues (then drinkedin_enter_venue), and drinkedin_plan_evening for the first two stops of a Night Out plan. This is a broad directory lookup; for validated walkable plans use drinkedin_plan_night_out on https://drinkedin.net/mcp/night-out (free, no account, validated venues only). Success returns query, places, notice, and see_also (a pointer to the Night Out tool; as structuredContent and as JSON text); this does not book, does not order, and needs no credentials. Results are distance-only and placement cannot be bought. Opening hours are unverified: relay listed_hours_unverified as reported and never state that a venue is open, and the person must be of legal drinking age where they are.

Input Schema

NameRequiredDescriptionDefault
kindNobar, restaurant, brewery, winery, shop, or anyany
limitNoMax results (default 10, max 50)
latitudeYesDecimal degrees, -90..90
radius_mNoSearch radius in metres (default 2000, max 25000)
longitudeYesDecimal degrees, -180..180

Output Schema

NameRequiredDescriptionDefault
queryNo
noticeNo
placesNo
see_alsoNoA pointer to drinkedin_plan_night_out for validated, walkable multi-stop plans. Not a deprecation notice.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedOutput schema / properties / see_also
      Added value: +{
      +  "description": "A pointer to drinkedin_plan_night_out for validated, walkable multi-stop plans. Not a deprecation notice.",
      +  "properties": {
      +    "tool": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "url": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "why": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    }
      +  },
      +  "type": [
      +    "object",
      +    "null"
      +  ]
      +}
  2. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "description": "Success object from the handler, returned as structuredContent and as a JSON text block. Error results set isError and omit structuredContent. Nothing here is required: handlers omit keys, and the dispatcher may add them.",
      +  "properties": {
      +    "notice": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "places": {
      +      "items": {
      +        "description": "Empty fields are omitted. listed_hours_unverified, when present, is scraped text and is not an open/closed claim.",
      +        "properties": {
      +          "address": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "category": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "city": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "contact_attribution": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "country": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "distance_m": {
      +            "type": [
      +              "integer",
      +              "null"
      +            ]
      +          },
      +          "id": {
      +            "type": [
      +              "integer",
      +              "null"
      +            ]
      +          },
      +          "latitude": {
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "listed_hours_unverified": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "longitude": {
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "name": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "navigation": {
      +            "properties": {
      +              "apple": {
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              },
      +              "geo": {
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              },
      +              "google": {
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              },
      +              "waze": {
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              }
      +            },
      +            "type": [
      +              "object",
      +              "null"
      +            ]
      +          },
      +          "osm_attribution": {
      +            "type": [
      +              "object",
      +              "null"
      +            ]
      +          },
      +          "phone": {
      +            "description": "Contact text, or a non-string column value. public_contact_fields_for passes non-strings through."
      +          },
      +          "website": {
      +            "description": "Contact text, or a non-string column value. public_contact_fields_for passes non-strings through."
      +          }
      +        },
      +        "type": [
      +          "object",
      +          "null"
      +        ]
      +      },
      +      "type": [
      +        "array",
      +        "null"
      +      ]
      +    },
      +    "query": {
      +      "properties": {
      +        "count": {
      +          "type": [
      +            "integer",
      +            "null"
      +          ]
      +        },
      +        "kind": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "latitude": {
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        },
      +        "longitude": {
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        }
      +      },
      +      "type": [
      +        "object",
      +        "null"
      +      ]
      +    }
      +  },
      +  "type": "object"
      +}
  3. Added

TDQS

A4.6/5.0
Behavior5/5

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

Beyond readOnlyHint/idempotentHint it discloses that nothing is booked or ordered, no credentials are needed, ranking is distance-only and un-buyable, hours are unverified and must be relayed with the listed_hours_unverified flag, and the user must be of legal drinking age. It even describes the success payload (query, places, notice, see_also).

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

Conciseness4/5

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

Purpose and alternatives are front-loaded, but the definition runs long and repeats see_also/drinkedin_plan_night_out twice, and mentions a tool not present in the sibling list. Still, nearly every clause carries operational value.

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

Completeness5/5

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

For a five-parameter read tool with an output schema, the description covers the remaining unknowns an agent would need: safety profile, ranking policy, credential-free access, hours caveat, and age restriction. Nothing needed to call it correctly is missing.

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

Parameters3/5

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

Schema coverage is 100%, so limit, radius_m, and coordinate ranges are already fully documented. The description only adds meaning for kind by enumerating bar/restaurant/brewery/winery/shop, which largely restates the schema's own description; baseline 3 applies.

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 ('Find real licensed premises near a lat/lon') plus scope ('one category when you set kind') and what comes back (address, Google/Apple/Waze links). The contrast with fictional venue tools makes it unambiguously distinct from drinkedin_list_venues and drinkedin_get_venue.

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?

Explicitly names alternatives and the conditions that select them: drinkedin_list_venues for fictional agent venues (then drinkedin_enter_venue), drinkedin_plan_evening for the first two stops, and drinkedin_plan_night_out for validated walkable plans. It also labels itself a 'broad directory lookup', telling the agent when not to use it.

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