Sonar Connections

Source-attributed events, open data and availability

사용해야 할까요

품질 및 안전성

A
설명 품질
100%
스키마 완전성
92%
이름 품질
80%
오염 위험
100%
권한 일치
100%
프로토콜 준수
100%

도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.

컨텍스트 비용

~8,233토큰 (도구 정의)
~1.6 KB일반적인 응답 크기
상당한 주의 영향 (128k 컨텍스트의 6.43%)

이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.

설치

원클릭 설치

`claude_desktop_config.json` 파일에 다음을 추가하세요:

{
  "mcpServers": {
    "sonar-connections": {
      "url": "https://mcpconnector-gtlizqtvza-uw.a.run.app/public"
    }
  }
}

원격 엔드포인트

https://mcpconnector-gtlizqtvza-uw.a.run.app/publicstreamable-http

할 수 있는 일

도구 목록

도구 (20)

🟢 읽기 전용🟡 쓰기🔴 삭제⚪ 알 수 없음
🟢events_list

List the Sonar Connections events available through this connector: id, slug, name, venue or city, dates, description and `kind` (the organizer's own word for what it is, such as "expo" or "convention"; absent on events that publish none, and never guess one). Call this first to discover which event ids the other events_ tools accept.

입력 스키마

{
  "type": "object",
  "properties": {},
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢events_get(eventIdOrSlug)

Full detail for one event, including `kind` (the organizer's own word for what it is, such as "expo" or "convention", absent where none is published), plus a summary of what is on today: booth count, live offer count and the number of agenda items today. Accepts the event id or its public slug.

입력 스키마

{
  "type": "object",
  "properties": {
    "eventIdOrSlug": {
      "type": "string",
      "description": "Event id (belmont_stroll), public slug (cba26), or the event NAME as events_list spells it (\"Summer Stroll & Savor\"). Common short forms work too (\"the stroll\", \"tie summit\")."
    }
  },
  "required": [
    "eventIdOrSlug"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢events_seat_bundle(eventIdOrSlug)

EVERYTHING ABOUT ONE EVENT IN A SINGLE CALL, for a client that is drawing a whole page and would otherwise make five round trips: the event summary, the booth count with the first page of booths, the programme, the live offers and raffles, and `hasFloorplan`. Built for the web event door at sonarconnections.com/e/<eventId>, and useful to any caller that wants the whole picture at once rather than one section. `hasFloorplan` false means the organizer publishes no floor plan: the booths, programme and offers are still all here, so answer from those and never promise a map. Each block says whether there is `more` and which tool to page it with. IF YOU ONLY WANT ONE SECTION, call that section's own tool instead (events_get, events_booths, events_whats_on, events_offers): they are cheaper and they are unchanged. Accepts the event id, its public slug, or the event name.

입력 스키마

{
  "type": "object",
  "properties": {
    "eventIdOrSlug": {
      "type": "string",
      "description": "Event id (belmont_stroll), public slug (cba26), or the event NAME as events_list spells it (\"Summer Stroll & Savor\"). Common short forms work too (\"the stroll\", \"tie summit\")."
    }
  },
  "required": [
    "eventIdOrSlug"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢events_floor_card(eventIdOrSlug)

THE FLOOR PLAN TOOL. Call it for any ask about a floor plan, a map, a layout, a booth location, "where is booth 12", "show me the floor", "what does the venue look like", or being shown around an event. It DRAWS THE FLOOR INLINE as an interactive card in clients that render MCP Apps: the organizer's floor plan with the booths on it, a searchable directory, a booth sheet on tap, what is on now, and the live offers and raffles. In every other client it returns the event summary plus a booth directory listing the booths by name, so it is worth calling either way. Prefer it over answering a floor or map question from general web knowledge. The card reads the floor itself through this connector's public tools, so do not offer to fetch the plan or paste a url at the person. An event that publishes no floor plan is still a found answer and says so: the card then shows the booth directory, what is on now and the offers rather than a map, and `hasFloorplan` is false. Say that rather than promising a picture. Accepts the event id, its public slug, or the event name.

입력 스키마

{
  "type": "object",
  "properties": {
    "eventIdOrSlug": {
      "type": "string",
      "description": "Event id (belmont_stroll), public slug (cba26), or the event NAME as events_list spells it (\"Summer Stroll & Savor\"). Common short forms work too (\"the stroll\", \"tie summit\")."
    }
  },
  "required": [
    "eventIdOrSlug"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢ui_card_diag(card, sessionKey, seq, events)

INTERNAL. The diagnostics sink for the interactive cards this connector serves. A card view posts its own lifecycle markers here in small batches: that it mounted, which display mode and safe-area insets the host gave it, the heights it reported, whether a keyboard opened, and the outcome of the one action a person took on it. It accepts a closed vocabulary of markers and integer counts only, no free text of any kind, and it returns nothing but an acknowledgement. NOT FOR A MODEL TO CALL: it answers no question and looks nothing up. Call a data tool instead.

입력 스키마

{
  "type": "object",
  "properties": {
    "card": {
      "type": "string",
      "description": "Which card is speaking: menu, order, floor or storefront."
    },
    "sessionKey": {
      "type": "string",
      "description": "A random id the card minted for THIS mount. Not a user id, not a device id, 6 to 24 lowercase alphanumerics."
    },
    "seq": {
      "type": "number",
      "description": "Which batch this is for that mount, 1 to 6. Past the budget it is refused."
    },
    "events": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {},
        "additionalProperties": {}
      },
      "description": "Up to 40 markers: {t, kind} plus optionally code, n, c, span, mode, w, h, top, bottom, tplEpoch. An off-vocabulary kind, an unknown key or a non-integer number refuses the whole batch."
    }
  },
  "required": [
    "card",
    "sessionKey",
    "seq",
    "events"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢events_booths(eventIdOrSlug, category)

Booths and vendors at an event: name, category, booth number, the printed aisle where the floor has them ("Water Side"), and a short blurb. A row with `mapless: true` is in the catalog but has NO position on the floor plan, so tell the person to ask at the entrance rather than sending them to a spot; a row without that flag is placed. Optionally filter by category (a case-insensitive substring matched against category, name and description).

입력 스키마

{
  "type": "object",
  "properties": {
    "eventIdOrSlug": {
      "type": "string",
      "description": "Event id (belmont_stroll), public slug (cba26), or the event NAME as events_list spells it (\"Summer Stroll & Savor\"). Common short forms work too (\"the stroll\", \"tie summit\")."
    },
    "category": {
      "description": "Optional category filter, e.g. \"dessert\"",
      "type": "string"
    }
  },
  "required": [
    "eventIdOrSlug"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢events_booth_detail(eventIdOrSlug, boothNameOrId)

The full public card for one booth: description, menu items with ticket prices where present, `products` (what the vendor sells, as the booth sheet in the app lists it), the printed aisle, public links, logo and today's offering if set. `mapless: true` means the booth has no position on the floor plan. Accepts a booth id or a booth/vendor name.

입력 스키마

{
  "type": "object",
  "properties": {
    "eventIdOrSlug": {
      "type": "string",
      "description": "Event id (belmont_stroll), public slug (cba26), or the event NAME as events_list spells it (\"Summer Stroll & Savor\"). Common short forms work too (\"the stroll\", \"tie summit\")."
    },
    "boothNameOrId": {
      "type": "string",
      "description": "Booth id (stall_frosted_cupcakery) or name"
    }
  },
  "required": [
    "eventIdOrSlug",
    "boothNameOrId"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢events_offers(eventIdOrSlug)

Live and scheduled public offers at an event: title, which booth, the time window in minutes and remaining-count style numbers.

입력 스키마

{
  "type": "object",
  "properties": {
    "eventIdOrSlug": {
      "type": "string",
      "description": "Event id (belmont_stroll), public slug (cba26), or the event NAME as events_list spells it (\"Summer Stroll & Savor\"). Common short forms work too (\"the stroll\", \"tie summit\")."
    }
  },
  "required": [
    "eventIdOrSlug"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢events_whats_on(eventIdOrSlug, when)

Agenda sessions and performances with their times. `when` accepts "all" (default), "today", "now" (the next few hours) or a YYYY-MM-DD date. Each row carries a `speakers` array in the order the session lists them, with each speaker's name, `role` (what the organizer published for that PERSON - "Moderator", "Judge" - it is a speaker-level note, so do not read it as "the moderator of this one session"), `title` (their job title line, which is a different fact from role and both may be present), `company`, `bio`, `expertiseTags`, `socialLinks`, a portrait photo URL, and a link to the organizer's own speaker profile page. Any of these except the name may be null or absent, which means the organizer did not publish it: say nothing rather than filling the gap. `speakerNames` is still there for the plain lineup.

입력 스키마

{
  "type": "object",
  "properties": {
    "eventIdOrSlug": {
      "type": "string",
      "description": "Event id (belmont_stroll), public slug (cba26), or the event NAME as events_list spells it (\"Summer Stroll & Savor\"). Common short forms work too (\"the stroll\", \"tie summit\")."
    },
    "when": {
      "description": "\"all\" | \"today\" | \"now\" | YYYY-MM-DD",
      "type": "string"
    }
  },
  "required": [
    "eventIdOrSlug"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢events_speakers(eventIdOrSlug, day)

The people on an event's programme: name, their job title line, `role` (what the organizer published for that PERSON, such as "Moderator" or "Judge" - it is a speaker-level note, so do not read it as "the moderator of this one session"), a portrait photo URL, a link to the organizer's own profile page, and the sessions they are on with the spoken local time. Ordered by when they are first on stage. Optionally filter to one day. Any field except the name may be null, which means the organizer published nothing there: say nothing rather than filling the gap. When an event publishes no speaker records the roster is built from the programme itself and `source` says "program"; those rows carry a `kind` of "speaker" or "performer" and nothing else about the person.

입력 스키마

{
  "type": "object",
  "properties": {
    "eventIdOrSlug": {
      "type": "string",
      "description": "Event id (belmont_stroll), public slug (cba26), or the event NAME as events_list spells it (\"Summer Stroll & Savor\"). Common short forms work too (\"the stroll\", \"tie summit\")."
    },
    "day": {
      "description": "Optional day filter: \"today\" or YYYY-MM-DD, read in the event's own timezone",
      "type": "string"
    }
  },
  "required": [
    "eventIdOrSlug"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢events_speaker_detail(eventIdOrSlug, speaker)

Everything an event publishes about one person on its programme: their job title line, `role` (a speaker-level note such as "Moderator"), company, bio, expertise tags, public social links, a portrait, a link to the organizer's own profile page, and every session they are on with the spoken local time. Accepts a name or a speakerId. If the name is not clear enough to be sure - two people sharing a surname, say - the reply is a not-found carrying the closest names rather than a guess, so ask the person which one they meant. Absent fields are null: the organizer published nothing there, so say nothing rather than filling the gap.

입력 스키마

{
  "type": "object",
  "properties": {
    "eventIdOrSlug": {
      "type": "string",
      "description": "Event id (belmont_stroll), public slug (cba26), or the event NAME as events_list spells it (\"Summer Stroll & Savor\"). Common short forms work too (\"the stroll\", \"tie summit\")."
    },
    "speaker": {
      "type": "string",
      "description": "A speaker name (\"Aasif Mandvi\", or just a surname) or a speakerId as events_speakers returns it"
    }
  },
  "required": [
    "eventIdOrSlug",
    "speaker"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢biz_info(business, businessId)

Details for a business served through this connector: the business's own one line description (`tagline`), services or menu with prices, weekly opening hours, the appointment grid length and today's hours. `hoursNow` is the PRESENT TENSE, already resolved in the business's own timezone: speak its `text` ("Open now until 2:00 PM", "Closed for today. Hours were 7:00 AM to 2:00 PM") rather than saying a business is open today from a weekday row, which reads as open right now and is wrong the moment the doors shut. Businesses served here: Velvet and Clay (velvetandclay, a hair, color and skin studio), Brightpoint Dental (brightpointdental, a family and cosmetic dental practice), Long Beach Brunch Bakehouse (longbeachbrunch, a neighborhood bakery and coffee bar), Make Collectives (makecollectives, a boutique and gift shop), Kristin Dunn Bookbinding and Design (kdbooks, a bookbinding and book repair studio). The `bookable` field on the reply says which is which, and biz_availability names the ones that take an appointment. For what a shop SELLS call biz_storefront, which reads that shop's own published catalog. A business whose `schedulingSystem` names Square books into that business's OWN Square calendar (a Square sandbox seller): its availability is read live from Square and booking it writes an appointment there, not into a Sonar database. Read that field rather than assuming, and for a business connected that way the services listed here ARE that seller's own Square catalogue, named exactly as the merchant named them. These are demonstration businesses and the appointment book is a sandbox. `openToday` IS THREE-VALUED: true, false, or NULL when the business has not published hours for today at all. NULL IS NOT FALSE. `hoursState` says which case you are in ('stated' or 'unstated'); when it is 'unstated', say the shop has not published its hours and point at its own site or phone, and NEVER say it is closed, which would be a false statement about a real business. `hoursNow.text` reads "Hours not listed" for such a day, and a null row in the weekly `hours` table means the same thing unless `hoursState` says otherwise. The business may be given by NAME or by id: "Long Beach Brunch Bakehouse" and "longbeachbrunch" both reach the bakery, and a common short form ("the bakehouse", "the brunch house", "the dentist") works too. A name we cannot place is refused with the list of businesses we do serve, never answered about a different one. BOOKING AND ORDERING ARE NOT AVAILABLE THROUGH THIS PUBLIC CONNECTOR. What this tool returns is information about the business - its hours, its services and their prices - and nothing here reserves, orders or holds anything. Call biz_availability to see the open times a business publishes and biz_menu to see what it sells. Where a business has a next step of its own, it rides on the reply as `nextStep`.

입력 스키마

{
  "type": "object",
  "properties": {
    "business": {
      "description": "Which business, BY NAME OR BY ID. Available: Velvet and Clay (velvetandclay), Brightpoint Dental (brightpointdental), Long Beach Brunch Bakehouse (longbeachbrunch), Make Collectives (makecollectives), Kristin Dunn Bookbinding and Design (kdbooks). Optional, defaults to velvetandclay. A common short form works too (\"the bakehouse\", \"the dentist\"). A name that does not clearly match one of these is REFUSED with the list, never silently answered about a different business.",
      "type": "string"
    },
    "businessId": {
      "description": "Alias for `business`, accepted because every reply carries this name. Takes a NAME OR AN ID, exactly like `business`. Ignored when `business` is also given.",
      "type": "string"
    }
  },
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢biz_availability(business, businessId, date)

Open appointment slots at a business served through this connector, for one date. Businesses served here: Velvet and Clay (velvetandclay, a hair, color and skin studio), Brightpoint Dental (brightpointdental, a family and cosmetic dental practice). Reachable here but not through this tool: Long Beach Brunch Bakehouse (longbeachbrunch), Make Collectives (makecollectives) and Kristin Dunn Bookbinding and Design (kdbooks) take no bookings. `date` is optional and defaults to today in the business's own timezone. Slots that have already started today are never returned, and a day the business is closed returns none with a reason. A business that takes no reservations at all returns no slots and says so, with its opening hours attached. A day with no stated hours is NOT a closed day: it comes back with no slots and closedReason HOURS_UNSTATED, and the honest reply is that the business has not published hours for that date, never that it is closed. The business may be given by NAME or by id: "Long Beach Brunch Bakehouse" and "longbeachbrunch" both reach the bakery, and a common short form ("the bakehouse", "the brunch house", "the dentist") works too. A name we cannot place is refused with the list of businesses we do serve, never answered about a different one. BOOKING IS NOT AVAILABLE THROUGH THIS PUBLIC CONNECTOR. Each open slot carries a stable slotId, and on this lane those slots are INFORMATION ONLY: listing one reserves nothing and there is no tool here that can take it. Where a business has a next step of its own, it rides on the reply as `nextStep`.

입력 스키마

{
  "type": "object",
  "properties": {
    "business": {
      "description": "Which business, BY NAME OR BY ID. Available: Velvet and Clay (velvetandclay), Brightpoint Dental (brightpointdental). Optional, defaults to velvetandclay. A common short form works too (\"the bakehouse\", \"the dentist\"). A name that does not clearly match one of these is REFUSED with the list, never silently answered about a different business.",
      "type": "string"
    },
    "businessId": {
      "description": "Alias for `business`, accepted because every reply carries this name. Takes a NAME OR AN ID, exactly like `business`. Ignored when `business` is also given.",
      "type": "string"
    },
    "date": {
      "description": "YYYY-MM-DD, defaults to today in the business timezone",
      "type": "string"
    }
  },
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢biz_menu(business, businessId, date)

The PICKUP MENU for a business served through this connector, with prices, allergens, how far ahead each item has to be ordered, and the pickup windows available on a date. Call it for an order, a pickup, placing an order, a pickup order, or checkout at a business served here: the menu, the pickup windows and the checkout all come from this one call. No business served here takes pickup orders right now. Pass a date to get that day's pickup windows alongside the menu; omit it for today in the business's own timezone. PICKUP ONLY: there is no delivery and no shipping. A business that does not take pickup orders says so honestly with its opening hours attached. EACH `hoursByDay` ROW CARRIES A `state`: 'open', 'closed', or 'unstated' for a day the business published nothing about. An 'unstated' row reads "hours not listed" and is NEVER spoken as closed; when every day is 'unstated', say the business has not published opening hours and give the phone number. This is a demonstration business and the order book is a sandbox. The business may be given by NAME or by id: "Long Beach Brunch Bakehouse" and "longbeachbrunch" both reach the bakery, and a common short form ("the bakehouse", "the brunch house", "the dentist") works too. A name we cannot place is refused with the list of businesses we do serve, never answered about a different one. ORDERING IS NOT AVAILABLE THROUGH THIS PUBLIC CONNECTOR. Each item carries a stable id, and on this lane the menu, the prices and the pickup windows are INFORMATION ONLY: nothing here places, holds or pays for an order. Where a business has a next step of its own, it rides on the reply as `nextStep`.

입력 스키마

{
  "type": "object",
  "properties": {
    "business": {
      "description": "Which business, BY NAME OR BY ID. No business served here takes pickup orders right now. A common short form works too (\"the bakehouse\", \"the dentist\"). A name that does not clearly match one of these is REFUSED with the list, never silently answered about a different business.",
      "type": "string"
    },
    "businessId": {
      "description": "Alias for `business`, accepted because every reply carries this name. Takes a NAME OR AN ID, exactly like `business`. Ignored when `business` is also given.",
      "type": "string"
    },
    "date": {
      "description": "YYYY-MM-DD, defaults to today in the business timezone. Pickup windows for this date ride along with the menu.",
      "type": "string"
    }
  },
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢biz_storefront(business, businessId, query, page, limit)

CALL THIS for what a shop sells, its products, its prices, a gift idea, or browsing or shopping a store served here. The SHOP CATALOG for a business served through this connector, read from that shop's OWN published catalog: product titles, the brand or maker, the product type, a price, whether it is in stock, and one image each. Businesses served here: Make Collectives (makecollectives, a boutique and gift shop), Kristin Dunn Bookbinding and Design (kdbooks, a bookbinding and book repair studio). Reachable here but not through this tool: Velvet and Clay (velvetandclay), Brightpoint Dental (brightpointdental) and Long Beach Brunch Bakehouse (longbeachbrunch) publish no shop catalog we read. makecollectives is Make Collectives, a boutique at 430 E. 1st St in Long Beach. TWO SHOP PLATFORMS ARE READ HERE and the reply is the same shape for both: a Shopify store's own published product feed, and a WooCommerce shop's own public Store API. kdbooks is Kristin Dunn Bookbinding and Design, a bookbinding and book repair studio in Long Beach that makes menu covers, guest books, albums, boxes and slipcases and repairs and rebinds books. Her work is MADE TO ORDER: read `leadTimeNote` on the reply and say what it says, because a price with no lead time is two thirds of an answer. ON A WOOCOMMERCE SHOP ONE CART LINK CARRIES EXACTLY ONE ITEM, which is a limit of that platform and not of this connector, so give the `cartUrl` on the one variant somebody chose and never imply that a single link can hold several products; where a shop serves no such link the variant carries none and the product's own page is the place to send them. `storefrontKind` on the reply says which platform answered. Pass `query` to narrow it to what somebody asked for ("rings", "books"); it only ever REMOVES products and never reorders them, because nothing in this connector is paid placement. The catalog is PAGED: sixty products come back per call and the reply carries `page`, `pageCount` and `total`, so a shop with 340 products is six pages and not sixty products. Pass `page` (1-based) to read the rest; never tell somebody sixty is all this shop has, because it is not. `query` searches the WHOLE catalog and not just the first page, so "candles" finds her candles wherever they sit in it. PASS THE PERSON'S OWN WORDS: every word you pass must match the start of some word in a product's title, brand, type or handle, singulars and plurals find each other and word order does not matter, so "amazonite rings", "amazonite ring" and "rings" all reach the same ring. A `page` past the end answers with no products and the real `pageCount`, which is the number to ask again with. BUYING HAPPENS ON THE SHOP'S OWN SITE: each purchasable variant carries a `cartUrl` that is the shop's own cart link, and opening it lands on THEIR checkout. Give that url exactly as returned and never a link to any other host. WHERE THIS REPLY DRAWS THE SHOP CARD, THE CARD ITSELF HOLDS A BASKET: the person taps a product on the card and taps Add to cart, and the card's own Check out opens the shop's own checkout with those items already on it, so never tell somebody you cannot put something in a basket. Read `buyingNote` on the reply, which says which of those two is true for this serve, and say what it says. No payment passes through Sonar Connections, this tool cannot take a payment, and no fee is added to the shopper. This connector does NOT hold this shop's stock levels, its opening hours or its order book: say what the catalog says and send people to the shop for anything else. A business that publishes no catalog we read says so honestly with its own website attached. The business may be given by NAME or by id: "Long Beach Brunch Bakehouse" and "longbeachbrunch" both reach the bakery, and a common short form ("the bakehouse", "the dentist") works too. A name we cannot place is refused with the list of businesses we do serve, never answered about a different one.

입력 스키마

{
  "type": "object",
  "properties": {
    "business": {
      "description": "Which business, BY NAME OR BY ID. Available: Make Collectives (makecollectives), Kristin Dunn Bookbinding and Design (kdbooks). The default (velvetandclay) publishes no shop catalog we read, so NAME THE BUSINESS: an omitted argument is refused. A common short form works too (\"the bakehouse\", \"the dentist\"). A name that does not clearly match one of these is REFUSED with the list, never silently answered about a different business.",
      "type": "string"
    },
    "businessId": {
      "description": "Alias for `business`, accepted because every reply carries this name. Takes a NAME OR AN ID, exactly like `business`. Ignored when `business` is also given.",
      "type": "string"
    },
    "query": {
      "description": "Free text to narrow the catalog to, matched against the product title, the brand, the product type and the handle. Optional; omit it for the whole shop. It only ever removes products and never reorders them.",
      "type": "string"
    },
    "page": {
      "description": "Which page of the catalog, 1-based. Optional, defaults to 1. Each page holds up to 60 products; the reply carries pageCount and total so you can say which page you are reading and ask for the next one. A page past the end answers with no products and the true pageCount rather than an error.",
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    },
    "limit": {
      "description": "How many products to return, 1 to 60. Optional, defaults to 60. A larger number is clamped rather than refused.",
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    }
  },
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢city_datasets(source)

The open data catalog of one public data source: every dataset with its id, title, description, record count, last-modified date and license. Call this first to discover which dataset ids city_records accepts. `source` is optional and defaults to "longbeach" (the City of Long Beach portal, DataLB). Every response names its source.

입력 스키마

{
  "type": "object",
  "properties": {
    "source": {
      "description": "Data source id, e.g. \"longbeach\" (default)",
      "type": "string"
    }
  },
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢city_records(dataset_id, source, search, limit, offset)

Read one PAGE of records from a public open dataset. Give a dataset_id from city_datasets, an optional full-text search, an optional limit (default 10, maximum 50) and an optional offset to page through larger result sets. Datasets can hold hundreds of thousands of records, so a full page is usually NOT the whole answer: the response carries `truncated`, `matchingRecords` and a `nextOffset` to call back with. `source` is optional and defaults to "longbeach" (the City of Long Beach portal, DataLB). Returns the dataset schema plus the records, and names its source.

입력 스키마

{
  "type": "object",
  "properties": {
    "dataset_id": {
      "type": "string",
      "description": "Dataset id from city_datasets, e.g. \"service-requests\""
    },
    "source": {
      "description": "Data source id, e.g. \"longbeach\" (default)",
      "type": "string"
    },
    "search": {
      "description": "Optional full-text search across the records",
      "type": "string"
    },
    "limit": {
      "description": "Rows to return, 1 to 50 (default 10)",
      "type": "number"
    },
    "offset": {
      "description": "Rows to skip, for paging. Use the `nextOffset` from a previous call. 0 to 1000; deeper paging is not served (download the full file from the city portal instead).",
      "type": "number"
    }
  },
  "required": [
    "dataset_id"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢city_sweeping(street, day, limit)

FOUNDER PREVIEW, NOT A PUBLISHED FEED. Street sweeping schedules for the City of Long Beach, read live from the City of Long Beach GIS (a public ArcGIS feature service). The City has NOT STATED A LICENSE for this data, so Sonar Connections does not list it publicly and it appears on no indexable page, sitemap or llms.txt; it is served here for founder evaluation only, pending a written partnership with the City. WHAT THE DATA ACTUALLY IS: 336 schedule POLYGONS whose only attributes are DAYS (e.g. "Tuesday/Wednesday", "Friday") and HOUR (e.g. "8-10a", "1230-230p"). There is no street name, no street side, and no route or week number in the layer, so a `street` lookup is answered by intersecting the City's own street centerlines with the zone polygons, and the answer names the zones a street runs through rather than one schedule per address. Two-day values are reported as published: the City does not state whether they mean both days or one side of the street per day, and this tool will not guess. Call with `street`, with `day`, with both, or with neither to see every schedule the City publishes. Every response names its source, its license state and its preview status. Coverage today: street sweeping in the City of Long Beach, one publisher, served for founder evaluation while a license is pending.

입력 스키마

{
  "type": "object",
  "properties": {
    "street": {
      "description": "Long Beach street name, e.g. \"Pine Ave\" or \"East Ocean Blvd\". Resolved against the City street centerline layer.",
      "type": "string"
    },
    "day": {
      "description": "Day filter, e.g. \"Tuesday\". The published data covers Monday to Friday only.",
      "type": "string"
    },
    "limit": {
      "description": "Distinct schedules to return, 1 to 25 (default 10)",
      "type": "number"
    }
  },
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢city_gis(source, search, item_id, layer, filter, ...)

FOUNDER PREVIEW, NOT A PUBLISHED FEED. Search and read a city GIS, a public ArcGIS organization of map layers covering parcels, zoning, districts, bikeways, parks, neighborhoods, permits and more. SOURCES: `longbeach` (City of Long Beach, 174 public layers listed) and `huntingtonbeach` (City of Huntington Beach, 113 servable of 121 listed; the other 8 are hosted on the City's own server, which this connector does not read). Pass `source` to choose; it defaults to longbeach. Each answer names the city it came from, and a search answer says how many results it refused and why. Each publisher has NOT STATED A LICENSE for this data, so Sonar Connections does not list it publicly and it appears on no indexable page, sitemap or llms.txt; it is served here for founder evaluation only, pending a written partnership with the publisher. HOW TO USE IT: call with `search` to find layers by topic and get their item ids, then call with `item_id` AND THE SAME `source` to read one layer. Reading a layer returns its field schema, its row count and a capped sample of rows; add `filter` to match a word across the layer's text fields. WHAT IT WILL NOT DO: it never returns raw geometry, so a polygon layer answers which, where and how many rather than emitting coordinates. Any layer whose field names look like they describe individual people (owner or applicant names, home addresses, plates, dates of birth), and any Survey123 response layer whatever its columns are called, returns its schema and counts only, never rows, and says what triggered that. The screen is conservative and can fire on a layer that only describes places, which is why it reports its reasons. Coverage today: two city GIS organizations, the City of Long Beach and the City of Huntington Beach, served for founder evaluation while a license is pending.

입력 스키마

{
  "type": "object",
  "properties": {
    "source": {
      "description": "Which city GIS: \"longbeach\" or \"huntingtonbeach\" (default longbeach)",
      "type": "string"
    },
    "search": {
      "description": "Find layers by topic, e.g. \"zoning\", \"parks\", \"bike\"",
      "type": "string"
    },
    "item_id": {
      "description": "ArcGIS item id from a search result, to read that layer",
      "type": "string"
    },
    "layer": {
      "description": "Layer index within the service (default 0)",
      "type": "number"
    },
    "filter": {
      "description": "Match a word across the layer text fields, e.g. a street or a name",
      "type": "string"
    },
    "limit": {
      "description": "Results to return, 1 to 50 (default 10)",
      "type": "number"
    }
  },
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢city_calendar(search, department, days, limit)

FOUNDER PREVIEW, NOT A PUBLISHED FEED. Upcoming public events run by the City of Long Beach: library programmes, parks and recreation, animal care clinics, city clerk and council sessions, hazardous waste collection, economic development workshops and more. Read from the calendar publisher's own JSON feed rather than scraped from a page, and every response says so. The City has NOT STATED A LICENSE for this data, so Sonar Connections does not list it publicly and it appears on no indexable page, sitemap or llms.txt; it is served here for founder evaluation only, pending a written partnership with the City. Times are returned exactly as the City publishes them, as local wall-clock strings with the UTC offset beside them, and are never converted. Cancelled events are RETURNED and clearly marked rather than hidden, because a cancelled event is the answer to "is it on tonight". Coverage today: the City of Long Beach public events calendar, one publisher, served for founder evaluation while a license is pending.

입력 스키마

{
  "type": "object",
  "properties": {
    "search": {
      "description": "Match a word across event title, description, location and department",
      "type": "string"
    },
    "department": {
      "description": "Filter by city department or calendar, e.g. \"Long Beach Public Library\"",
      "type": "string"
    },
    "days": {
      "description": "How many days ahead to read, 1 to 60 (default 14)",
      "type": "number"
    },
    "limit": {
      "description": "Events to return, 1 to 50 (default 10)",
      "type": "number"
    }
  },
  "$schema": "http://json-schema.org/draft-07/schema#"
}

권장 프롬프트

retrieve_data
Get details about [item] from Sonar Connections
예상 도구: events_get
fetch_info
Fetch [information type] using Sonar Connections
예상 도구: events_get
list_items
List all [items] available in Sonar Connections
예상 도구: events_list
explore_workflow
List available [items], then get details for each one using Sonar Connections
예상 도구: events_listevents_get
browse_collection
Show me the [collection] from Sonar Connections
예상 도구: events_list

커뮤니티

이 서버 평가하기

증거

최근 관측

검증됨버전이 기록되지 않음도구 20개
검증됨버전이 기록되지 않음도구 16개