@dayplayai/mcp-server 1.3.3 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.cursor/mcp.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "mcpServers": {
3
3
  "dayplay": {
4
- "url": "https://www.dayplay.io/api/mcp"
4
+ "url": "https://api.dayplay.io/mcp"
5
5
  }
6
6
  }
7
7
  }
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # DayPlay MCP — SF Bay Area Events, Places & Itineraries for AI Agents
2
2
 
3
- **`@dayplayai/mcp-server`** · v1.3.2 · MIT
3
+ **`@dayplayai/mcp-server`** · v2.0.0 · MIT
4
4
 
5
5
  [![Run on Apify](https://img.shields.io/badge/Apify_Store-DayPlay%20Actor-orange?logo=apify)](https://apify.com/dayplay/dayplay-local-intelligence)
6
6
 
@@ -8,11 +8,13 @@
8
8
 
9
9
  [![dayplayTeam/dayplay-mcp MCP server](https://glama.ai/mcp/servers/dayplayTeam/dayplay-mcp/badges/score.svg)](https://glama.ai/mcp/servers/dayplayTeam/dayplay-mcp)
10
10
 
11
+ [![Listed on mcpservers.org](https://mcpservers.org/badge.svg)](https://mcpservers.org/servers/dayplayteam/dayplay-mcp)
12
+
11
13
  A zero-configuration MCP server that gives any AI agent a *locally grounded* concierge for the **San Francisco Bay Area only** — curated places, verified real-time events, and neighborhood binding that eliminates cross-bay drift.
12
14
 
13
15
  > 🔒 **Scope: SF Bay Area only.** This server serves **strictly San Francisco, Oakland, and Berkeley — 35 neighborhood centroids**. It does **not** serve New York, Los Angeles, Chicago, Austin, Seattle, Miami, London, Tokyo, or any other city, region, or country. **Out-of-market locations are not served.** If a user asks about any location outside the SF Bay Area, the agent must state *"Dayplay is strictly San Francisco Bay Area only (San Francisco, Oakland, Berkeley); it does not cover \<location\>"* and must **not** call a tool or fabricate venues, events, dates, hours, or neighborhoods for that location. Zero results for a valid SF Bay Area query are reported honestly, never filled with invented places.
14
16
 
15
- **Remote endpoint:** `https://www.dayplay.io/api/mcp` (Streamable HTTP / MCP)
17
+ **Remote endpoint:** `https://api.dayplay.io/mcp` (Streamable HTTP / MCP)
16
18
 
17
19
  ---
18
20
 
@@ -26,7 +28,7 @@ A zero-configuration MCP server that gives any AI agent a *locally grounded* con
26
28
  {
27
29
  "mcpServers": {
28
30
  "dayplay": {
29
- "url": "https://www.dayplay.io/api/mcp"
31
+ "url": "https://api.dayplay.io/mcp"
30
32
  }
31
33
  }
32
34
  }
@@ -70,7 +72,7 @@ Restart Claude Desktop, then ask: *"What's happening in the Mission tonight?"*
70
72
  Add the Dayplay remote connector:
71
73
 
72
74
  ```
73
- https://www.dayplay.io/api/mcp
75
+ https://api.dayplay.io/mcp
74
76
  ```
75
77
 
76
78
  Or bridge it over stdio in Grok's MCP config:
@@ -100,56 +102,48 @@ Prints the live endpoint and available tool names. Exits non-zero on failure.
100
102
 
101
103
  ## Tools
102
104
 
103
- Every tool is bound to the SF Bay Area (San Francisco, Oakland, Berkeley — 35 centroids). Out-of-market locations are declined, never fabricated.
104
-
105
- ### `get_places`
105
+ The catalog covers the SF Bay Area (San Francisco, Oakland, Berkeley — 35 centroids). Out-of-market locations are declined, never fabricated.
106
106
 
107
- Query curated places filtered by neighborhood, open-now status, ratings, or newly opened window.
107
+ **Open tools** run immediately — no account needed. **Gated tools** 🔒 return `401` on first call; your host opens Google sign-in and a free DayPlay account unlocks them. Through the npm stdio bridge, gated calls fail instead of opening sign-in — prefer the direct remote URL for gated tools.
108
108
 
109
- **SCOPE:** San Francisco Bay Area only (San Francisco, Oakland, Berkeley). Out-of-market locations (e.g. Austin, New York, Tokyo) are declined — never fabricate venues. Spatially verified to eliminate cross-bay and geographic drift.
109
+ ### Discovery (open)
110
110
 
111
- | Parameter | Type | Description |
112
- | --- | --- | --- |
113
- | `neighborhood` | string | SF Bay Area neighborhood name (SF, Oakland, Berkeley only) |
114
- | `open_now` | boolean | Filter strictly for places open right now |
115
- | `sort` | `"rating"` \| `"distance"` | Sort order |
116
- | `newly_opened_days` | integer | Filter for places opened in the last N days |
117
- | `limit` | integer | Max places to return (default 20) |
111
+ - `get_happening_today` — events + places happening today, by location and radius
112
+ - `get_live_now` — what is happening right now
113
+ - `get_weekend` — Saturday/Sunday feed (`weekend_day: "sat" | "sun"`)
114
+ - `get_decision_feed` — ranked decision feed (send `user_lat` / `user_lng`)
115
+ - `browse_places` — places inside a radius, sorted by distance
116
+ - `get_listing` — full detail for one place or venue by `id`
117
+ - `get_top_restaurants` / `get_top_venues` — ranked lists, optional city
118
+ - `get_local_gems` — curated local gems
119
+ - `get_locals_favorites` — locals' favorites
120
+ - `get_venue_events` — upcoming events at one venue (`id`)
121
+ - `get_subcategories` / `get_genres` / `get_event_bridge` — taxonomy feeds
118
122
 
119
- Example prompt: *"Find a place open right now in North Beach with a 4.5+ rating."*
123
+ ### Marketing feeds (open, X-API-Key)
120
124
 
121
- ### `plan_outing` 🔒 *free account*
125
+ - `get_marketing_events` / `get_marketing_places` / `get_marketing_neighborhoods` — catalog feeds; forward an `X-API-Key` header. `get_marketing_neighborhoods` returns the **35 SF Bay Area neighborhood centroids with coordinates and radii**.
122
126
 
123
- Builds a complete multi-stop outing itinerary (dinner, drinks, events) with walkable legs and timings, matched to vibe, interests, and budget. First call returns a free 2-stop preview plus a one-time connect code (`DP-XXXXXX`) and `https://www.dayplay.io/link`; a free DayPlay account unlocks the full plan, saved to your account and visible in the DayPlay app.
127
+ ### Search 🔒 *free account*
124
128
 
125
- ### `manage_saved_plans` 🔒 *free account*
129
+ - `search_smart`, `search_query_router`, `search_embed`, `search_parse_intent`, `search_rerank`, `search_web` — model-backed semantic search. Requires the user token via Google connect.
126
130
 
127
- Save itineraries, list saved plans, and set alerts (sellouts, closures, weather) via `action: "save" | "list" | "set_alert" | "cancel_alert"`. Requires the same free-account connect. Saved plans appear in your DayPlay account across web and app.
131
+ ### Saves & Outings 🔒 *free account*
128
132
 
133
+ - `save_outing` — save a dated, neighborhood-bound outing plan to the signed-in user's Saved tab
134
+ - `get_my_itinerary` — retrieve the signed-in user's saved itineraries
135
+ - `list_saves`, `save_listing`, `unsave_listing`, `list_going`, `mark_going`, `unmark_going` — saved places and event RSVPs
136
+ - `upvote_listing`, `share_local_favorite`, `share_gem` — community signals
129
137
 
130
- ### `get_events`
138
+ Requires the free-account connect. A host connected to the remote URL opens Google sign-in on the first gated call; the npm stdio package opens a browser for the same connect step. Saved plans appear on the DayPlay Saved tab across web and app.
131
139
 
132
- Query verified, real-time event occurrences strictly filtered by date, neighborhood, and category.
140
+ Requires the free-account connect (`https://www.dayplay.io/link`). Saved plans appear on the DayPlay Saved tab across web and app.
133
141
 
134
- **SCOPE:** San Francisco Bay Area only (San Francisco, Oakland, Berkeley). Out-of-market locations are declined — never fabricate events. Spatially verified to eliminate cross-bay and geographic drift.
135
-
136
- | Parameter | Type | Description |
137
- | --- | --- | --- |
138
- | `date` | string (`YYYY-MM-DD`) | Target date |
139
- | `neighborhood` | string | SF Bay Area neighborhood name (e.g. Mission, North Beach, Oakland, Berkeley) |
140
- | `category` | string | Category filter (e.g. music, art, food) |
141
- | `source` | string | Data source filter |
142
- | `limit` | integer | Max events to return (default 20) |
142
+ Example prompts: *"What's happening in the Mission tonight?"* · *"Build me a Saturday itinerary that never leaves Bernal Heights."* · *"Save this outing to my DayPlay account."*
143
143
 
144
- Example prompt: *"Which Berkeley music events are on this Saturday?"*
144
+ ### Legacy compatibility
145
145
 
146
- ### `get_neighborhoods`
147
-
148
- Returns the complete and exclusive list of **35 San Francisco Bay Area neighborhood centroids with coordinates and radii** (San Francisco, Oakland, Berkeley only). No other market is covered. Use to strictly bind itineraries to a specific neighborhood and to detect out-of-market queries.
149
-
150
- Example prompt: *"Give me the neighborhood list, then build a Saturday itinerary that never leaves Bernal Heights."*
151
-
152
- ---
146
+ The five 1.x tool names (`get_neighborhoods`, `get_events`, `get_places`, `plan_outing`, `manage_saved_plans`) remain temporarily served for transition. They are deprecated — migrate to the catalog above; a future release removes them.
153
147
 
154
148
  ## The Anti-Drift Guarantee
155
149
 
@@ -174,7 +168,7 @@ That is the product: the answer stays where you are.
174
168
 
175
169
  | Env var | Default | Purpose |
176
170
  | --- | --- | --- |
177
- | `DAYPLAY_MCP_URL` | `https://www.dayplay.io/api/mcp` | Override the remote endpoint (staging, self-hosted, local dev) |
171
+ | `DAYPLAY_MCP_URL` | `https://api.dayplay.io/mcp` | Override the remote endpoint (staging, self-hosted, local dev) |
178
172
 
179
173
  No API key is required for the public endpoint. Optional auth tokens, if your deployment needs them, are passed through as standard `Authorization` headers by the MCP client — never commit them to config files.
180
174
 
@@ -183,7 +177,7 @@ No API key is required for the public endpoint. Optional auth tokens, if your de
183
177
  ## How the proxy works
184
178
 
185
179
  ```
186
- MCP client (stdio) ⇄ bin/dayplay-mcp.js ⇄ https://www.dayplay.io/api/mcp (Streamable HTTP)
180
+ MCP client (stdio) ⇄ bin/dayplay-mcp.js ⇄ https://api.dayplay.io/mcp (Streamable HTTP)
187
181
  ```
188
182
 
189
183
  The shim lists tools and forwards `tools/call` verbatim to the remote endpoint, so new Dayplay tools appear automatically without an npm update. It is a transport bridge, not a reimplementation — every schema, filter, and verification rule is served by Dayplay itself.
@@ -211,7 +205,7 @@ dayplay-mcp/
211
205
  │ └── e2e.mjs
212
206
  ├── smithery.yaml # Smithery.ai registry manifest
213
207
  ├── plugin.json # Agent Plugins standard manifest
214
- ├── package.json # npm metadata (@dayplayai/mcp-server v1.3.2, MIT)
208
+ ├── package.json # npm metadata (@dayplayai/mcp-server v1.3.4, MIT)
215
209
  ├── README.md # This file
216
210
  └── LICENSE # MIT (Dayplay Team)
217
211
  ```
@@ -16,17 +16,19 @@ import { Client } from "@modelcontextprotocol/sdk/client/index.js";
16
16
  import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
17
17
  import { Server } from "@modelcontextprotocol/sdk/server/index.js";
18
18
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
19
+ import { UnauthorizedError } from "@modelcontextprotocol/sdk/client/auth.js";
19
20
  import {
20
21
  CallToolRequestSchema,
21
22
  ListToolsRequestSchema,
22
23
  } from "@modelcontextprotocol/sdk/types.js";
24
+ import { createAuthProvider } from "./oauth.js";
23
25
 
24
- const DEFAULT_ENDPOINT = "https://www.dayplay.io/api/mcp";
26
+ const DEFAULT_ENDPOINT = "https://api.dayplay.io/mcp";
25
27
  const ENDPOINT = process.env.DAYPLAY_MCP_URL || DEFAULT_ENDPOINT;
26
28
 
27
29
  const SERVER_INFO = {
28
30
  name: "dayplay",
29
- version: "1.3.1",
31
+ version: "2.0.0",
30
32
  };
31
33
 
32
34
  const log = (...args) => console.error("[dayplay-mcp]", ...args);
@@ -34,14 +36,30 @@ const log = (...args) => console.error("[dayplay-mcp]", ...args);
34
36
  /** Build a connected remote client. */
35
37
  async function connectRemote() {
36
38
  const client = new Client(
37
- { name: "dayplay-mcp-proxy", version: "1.3.1" },
39
+ { name: "dayplay-mcp-proxy", version: "2.0.0" },
38
40
  { capabilities: {} },
39
41
  );
40
- const transport = new StreamableHTTPClientTransport(new URL(ENDPOINT));
42
+ const authProvider = await createAuthProvider(ENDPOINT, log);
43
+ const transport = new StreamableHTTPClientTransport(new URL(ENDPOINT), { authProvider });
41
44
  await client.connect(transport);
42
45
  return client;
43
46
  }
44
47
 
48
+ async function callRemote(remote, request) {
49
+ const params = {
50
+ name: request.params.name,
51
+ arguments: request.params.arguments ?? {},
52
+ };
53
+ try {
54
+ return await remote.callTool(params);
55
+ } catch (error) {
56
+ if (error instanceof UnauthorizedError || error?.name === "UnauthorizedError") {
57
+ return remote.callTool(params);
58
+ }
59
+ throw error;
60
+ }
61
+ }
62
+
45
63
  /** `--smoke`: verify the remote endpoint and exit non-zero on failure. */
46
64
  async function smoke() {
47
65
  const client = await connectRemote();
@@ -75,10 +93,7 @@ async function main() {
75
93
  });
76
94
 
77
95
  server.setRequestHandler(CallToolRequestSchema, async (request) => {
78
- return remote.callTool({
79
- name: request.params.name,
80
- arguments: request.params.arguments ?? {},
81
- });
96
+ return callRemote(remote, request);
82
97
  });
83
98
 
84
99
  const shutdown = async () => {
package/bin/oauth.js ADDED
@@ -0,0 +1,133 @@
1
+ import { spawn } from "node:child_process";
2
+ import fs from "node:fs";
3
+ import http from "node:http";
4
+ import os from "node:os";
5
+ import path from "node:path";
6
+
7
+ const AUTH_PATH = path.join(os.homedir(), ".dayplay", "mcp-auth.json");
8
+
9
+ function readState() {
10
+ try {
11
+ return JSON.parse(fs.readFileSync(AUTH_PATH, "utf8"));
12
+ } catch {
13
+ return {};
14
+ }
15
+ }
16
+
17
+ function writeState(state) {
18
+ fs.mkdirSync(path.dirname(AUTH_PATH), { recursive: true });
19
+ fs.writeFileSync(AUTH_PATH, JSON.stringify(state), { mode: 0o600 });
20
+ }
21
+
22
+ function openBrowser(target) {
23
+ const url = String(target);
24
+ if (process.platform === "win32") {
25
+ spawn("cmd", ["/c", "start", "", url], { detached: true, stdio: "ignore" }).unref();
26
+ return;
27
+ }
28
+ const command = process.platform === "darwin" ? "open" : "xdg-open";
29
+ spawn(command, [url], { detached: true, stdio: "ignore" }).unref();
30
+ }
31
+
32
+ export async function createAuthProvider(endpoint, log) {
33
+ const origin = new URL(endpoint).origin;
34
+ let state = readState();
35
+ let waitForCode = () => Promise.reject(new Error("Dayplay connect is not waiting"));
36
+
37
+ const callback = http.createServer((req, res) => {
38
+ const url = new URL(req.url ?? "/", "http://127.0.0.1");
39
+ if (url.pathname !== "/callback") {
40
+ res.writeHead(404);
41
+ res.end();
42
+ return;
43
+ }
44
+ res.writeHead(200, { "content-type": "text/html; charset=utf-8" });
45
+ res.end("<p>Dayplay is connected. You can close this tab.</p>");
46
+ const code = url.searchParams.get("code");
47
+ const error = url.searchParams.get("error");
48
+ waitForCode(code, error);
49
+ });
50
+ await new Promise((resolve, reject) => {
51
+ callback.once("error", reject);
52
+ callback.listen(0, "127.0.0.1", resolve);
53
+ });
54
+ const { port } = callback.address();
55
+ const redirectUrl = `http://127.0.0.1:${port}/callback`;
56
+
57
+ return {
58
+ get redirectUrl() {
59
+ return redirectUrl;
60
+ },
61
+ get clientMetadata() {
62
+ return {
63
+ client_name: "Dayplay MCP",
64
+ redirect_uris: [redirectUrl],
65
+ grant_types: ["authorization_code", "refresh_token"],
66
+ response_types: ["code"],
67
+ token_endpoint_auth_method: "none",
68
+ };
69
+ },
70
+ clientInformation() {
71
+ return state.client;
72
+ },
73
+ saveClientInformation(client) {
74
+ state = { ...state, client };
75
+ writeState(state);
76
+ },
77
+ tokens() {
78
+ return state.tokens;
79
+ },
80
+ saveTokens(tokens) {
81
+ state = { ...state, tokens };
82
+ writeState(state);
83
+ },
84
+ saveCodeVerifier(verifier) {
85
+ state = { ...state, verifier };
86
+ writeState(state);
87
+ },
88
+ codeVerifier() {
89
+ if (!state.verifier) {
90
+ throw new Error("Dayplay connect is missing its PKCE verifier");
91
+ }
92
+ return state.verifier;
93
+ },
94
+ async redirectToAuthorization(authorizationUrl) {
95
+ log("Opening a browser to connect Dayplay. Sign in with Google, then retry the tool if it does not finish.");
96
+ const code = await new Promise((resolve, reject) => {
97
+ const timer = setTimeout(() => {
98
+ reject(new Error("Dayplay connect timed out. Sign in with Google and call the tool again."));
99
+ }, 3 * 60 * 1000);
100
+ waitForCode = (nextCode, error) => {
101
+ clearTimeout(timer);
102
+ if (error || !nextCode) {
103
+ reject(new Error(error || "Dayplay connect did not return a code"));
104
+ return;
105
+ }
106
+ resolve(nextCode);
107
+ };
108
+ openBrowser(authorizationUrl);
109
+ });
110
+ const clientId = state.client?.client_id;
111
+ if (!clientId) {
112
+ throw new Error("Dayplay connect is missing its client id");
113
+ }
114
+ const body = new URLSearchParams({
115
+ grant_type: "authorization_code",
116
+ code,
117
+ code_verifier: state.verifier,
118
+ redirect_uri: redirectUrl,
119
+ client_id: clientId,
120
+ });
121
+ const response = await fetch(`${origin}/oauth/token`, {
122
+ method: "POST",
123
+ headers: { "content-type": "application/x-www-form-urlencoded" },
124
+ body,
125
+ });
126
+ if (!response.ok) {
127
+ throw new Error("Dayplay connect could not finish sign-in");
128
+ }
129
+ state = { ...state, tokens: await response.json() };
130
+ writeState(state);
131
+ },
132
+ };
133
+ }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@dayplayai/mcp-server",
3
- "version": "1.3.3",
4
- "description": "DayPlay MCP — verified real-time SF Bay Area places, events & walkable itineraries for AI agents. 3 free discovery tools + AI outing planning with a free account. Remote endpoint: https://www.dayplay.io/api/mcp",
3
+ "version": "2.0.0",
4
+ "description": "DayPlay MCP \u2014 verified real-time SF Bay Area places, events & itineraries for AI agents. 35-tool catalog: feeds, search, saves & outing planning (gated tools need a free account via Google connect). Remote endpoint: https://api.dayplay.io/mcp",
5
5
  "keywords": [
6
6
  "mcp",
7
7
  "model-context-protocol",
package/plugin.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
3
3
  "name": "dayplay-local-concierge",
4
- "description": "Verified real-time SF Bay Area places, events & walkable itineraries for AI agents. 3 free discovery tools; a free DayPlay account unlocks plan_outing (full multi-stop outing plans, saved to the user's account) and manage_saved_plans (saved plans + alerts). Strictly San Francisco, Oakland, Berkeley \u2014 out-of-market requests refused by protocol (Anti-Drift Guarantee).",
5
- "version": "1.3.2",
4
+ "description": "Verified real-time SF Bay Area places, events & itineraries for AI agents. 40-tool catalog: open feeds (today/weekend/live-now, browse, venues, gems) + gated search, saves & outing planning via free Google connect. Strictly San Francisco, Oakland, Berkeley (Anti-Drift Guarantee).",
5
+ "version": "2.0.0",
6
6
  "author": {
7
7
  "name": "Dayplay Team",
8
8
  "email": "hello@dayplay.io",
@@ -32,7 +32,7 @@
32
32
  "mcp": {
33
33
  "servers": {
34
34
  "dayplay": {
35
- "url": "https://www.dayplay.io/api/mcp"
35
+ "url": "https://api.dayplay.io/mcp"
36
36
  }
37
37
  }
38
38
  },
@@ -27,8 +27,8 @@ Dayplay serves **strictly the San Francisco Bay Area: San Francisco, Oakland, an
27
27
 
28
28
  ## Instructions
29
29
 
30
- 1. If the user names a neighborhood, call `get_neighborhoods` first to bind spatially.
31
- 2. Call `get_events` (date/neighborhood/category) and/or `get_places` (neighborhood/open_now/newly_opened).
30
+ 1. If the user names a neighborhood, bind spatially: use `get_marketing_neighborhoods` (35 centroids) or pass lat/lng + radius to the feed tools.
31
+ 2. For places/events use `get_happening_today`, `get_weekend`, or `get_live_now` (open tools) and `browse_places`; use `search_smart` for semantic queries (gated — a 401 means the host opens Google connect).
32
32
  3. **Enforce boundaries:** East Bay stays in the East Bay. Never cross-bridge drift. Never drift outside San Francisco, Oakland, or Berkeley.
33
33
  4. Verify open status — never send someone to a closed door.
34
34
  5. Return 2–3 sequenced stops, why each is the move, and hours/walk time.
package/smithery.yaml CHANGED
@@ -1,15 +1,14 @@
1
1
  name: dayplay
2
2
  displayName: DayPlay — SF Bay Area Local Intelligence for AI Agents
3
3
  description: >-
4
- Verified real-time places, events & walkable itineraries for AI agents.
4
+ Verified real-time SF Bay Area places, events & itineraries for AI agents.
5
5
  Geo-locked to San Francisco, Oakland & Berkeley (35 neighborhood centroids).
6
- 3 free discovery tools; a free account unlocks plan_outing — full multi-stop
7
- evening plans with walk times, saved to the user's DayPlay account — plus
8
- saved plans and sellout/closure/weather alerts. Honest zero-results protocol:
6
+ 40-tool catalog: open feeds (today/weekend/live-now, browse, venues, gems)
7
+ plus gated search, saves & outing planning via free Google connect (browser
8
+ open now supported through the stdio bridge). Honest zero-results protocol:
9
9
  agents never fabricate venues, events, dates, or hours (Anti-Drift Guarantee).
10
- One remote URL, no API key. NOT AVAILABLE outside the SF Bay Area — out-of-market
11
- requests are refused by protocol, never invented.
12
- version: 1.3.3
10
+ One remote URL.
11
+ version: 2.0.0
13
12
  license: MIT
14
13
  homepage: https://www.dayplay.io
15
14
  repository: https://github.com/dayplayTeam/dayplay-mcp
@@ -36,27 +35,21 @@ examples:
36
35
  - "What's on in Austin tonight? (out of market - Dayplay is strictly SF Bay Area only, so no results are returned)"
37
36
  startCommand:
38
37
  type: http
39
- url: https://www.dayplay.io/api/mcp
38
+ url: https://api.dayplay.io/mcp
40
39
  configSchema:
41
40
  type: object
42
41
  properties: {}
43
42
  required: []
44
43
  tools:
45
- - name: get_places
46
- description: >-
47
- Query curated places filtered by neighborhood, open-now status, ratings, or
48
- newly opened window. SCOPE: San Francisco Bay Area only (San Francisco,
49
- Oakland, Berkeley, 35 neighborhood centroids). Out-of-market locations
50
- (e.g. Austin, New York, Tokyo) are declined - never fabricate venues.
51
- - name: get_events
52
- description: >-
53
- Query verified, real-time event occurrences strictly filtered by date,
54
- neighborhood, and category. SCOPE: San Francisco Bay Area only (San
55
- Francisco, Oakland, Berkeley, 35 neighborhood centroids). Out-of-market
56
- locations are declined - never fabricate events.
57
- - name: get_neighborhoods
58
- description: >-
59
- Returns the complete and exclusive list of 35 San Francisco Bay Area
60
- neighborhood centroids (San Francisco, Oakland, Berkeley only) with
61
- coordinates and radii. No other market is covered. Use to strictly bind
62
- itineraries to a specific neighborhood and to detect out-of-market queries.
44
+ - name: get_happening_today
45
+ description: Events and places happening today (lat/lng/radius).
46
+ - name: get_weekend
47
+ description: Saturday or Sunday feed.
48
+ - name: get_live_now
49
+ description: What is happening right now.
50
+ - name: search_smart
51
+ description: Smart search (gated - requires free DayPlay account via Google connect).
52
+ - name: save_outing
53
+ description: Save a multi-stop outing plan (gated - free account).
54
+ - name: get_my_itinerary
55
+ description: Retrieve saved itineraries (gated - free account).