Dayplay
Official# Dayplay โ Local Concierge & Vibe Scout MCP
**`@dayplayai/mcp-server`** ยท v1.2.1 ยท MIT
[](https://smithery.ai/servers/dayplayai/dayplay)
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.
> ๐ **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.
**Remote endpoint:** `https://www.dayplay.io/api/mcp` (Streamable HTTP / MCP)
---
## Quickstart
### Cursor
**Option A โ direct remote server (recommended, no install).** Add to `~/.cursor/mcp.json` or this repo's `.cursor/mcp.json`:
```json
{
"mcpServers": {
"dayplay": {
"url": "https://www.dayplay.io/api/mcp"
}
}
}
```
**Option B โ zero-config stdio proxy (works with any client):**
```json
{
"mcpServers": {
"dayplay": {
"command": "npx",
"args": ["-y", "@dayplayai/mcp-server"]
}
}
}
```
### Claude Desktop
Edit `claude_desktop_config.json`:
- macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
- Windows: `%APPDATA%\Claude\claude_desktop_config.json`
```json
{
"mcpServers": {
"dayplay": {
"command": "npx",
"args": ["-y", "@dayplayai/mcp-server"]
}
}
}
```
Restart Claude Desktop, then ask: *"What's happening in the Mission tonight?"*
### Grok Bot
Add the Dayplay remote connector:
```
https://www.dayplay.io/api/mcp
```
Or bridge it over stdio in Grok's MCP config:
```json
{
"mcpServers": {
"dayplay": {
"command": "npx",
"args": ["-y", "@dayplayai/mcp-server"]
}
}
}
```
Pair it with the [`vibe-scout` skill](skills/vibe-scout/SKILL.md) for prompt-level scope enforcement.
### Terminal smoke test
```bash
npx -y @dayplayai/mcp-server --smoke
```
Prints the live endpoint and available tool names. Exits non-zero on failure.
---
## Tools
Every tool is bound to the SF Bay Area (San Francisco, Oakland, Berkeley โ 35 centroids). Out-of-market locations are declined, never fabricated.
### `get_places`
Query curated places filtered by neighborhood, open-now status, ratings, or newly opened window.
**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.
| Parameter | Type | Description |
| --- | --- | --- |
| `neighborhood` | string | SF Bay Area neighborhood name (SF, Oakland, Berkeley only) |
| `open_now` | boolean | Filter strictly for places open right now |
| `sort` | `"rating"` \| `"distance"` | Sort order |
| `newly_opened_days` | integer | Filter for places opened in the last N days |
| `limit` | integer | Max places to return (default 20) |
Example prompt: *"Find a place open right now in North Beach with a 4.5+ rating."*
### `get_events`
Query verified, real-time event occurrences strictly filtered by date, neighborhood, and category.
**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.
| Parameter | Type | Description |
| --- | --- | --- |
| `date` | string (`YYYY-MM-DD`) | Target date |
| `neighborhood` | string | SF Bay Area neighborhood name (e.g. Mission, North Beach, Oakland, Berkeley) |
| `category` | string | Category filter (e.g. music, art, food) |
| `source` | string | Data source filter |
| `limit` | integer | Max events to return (default 20) |
Example prompt: *"Which Berkeley music events are on this Saturday?"*
### `get_neighborhoods`
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.
Example prompt: *"Give me the neighborhood list, then build a Saturday itinerary that never leaves Bernal Heights."*
---
## The Anti-Drift Guarantee
Most local AI answers fail the same way: a "Mission" recommendation lands in Oakland, a "Berkeley" event is actually in San Jose, and a walking itinerary silently requires a bridge crossing.
**Scope:** SF Bay Area only (San Francisco, Oakland, Berkeley). No national or global coverage.
**Dayplay receipts:**
- **Spatially verified.** Every place and event result is validated against neighborhood centroid coordinates and radii pulled live from `get_neighborhoods` (35 Bay Area neighborhoods).
- **Neighborhood-bound queries.** `neighborhood` is an exact-match binding parameter, not a fuzzy keyword hint โ results outside the bound radius are dropped, not ranked down.
- **Zero cross-bay drift.** No Oakland result in a San Francisco query. No Marin result in an East Bay query. No bridge-crossing itinerary that claims to be walkable.
- **Real-time, not stale.** `get_events` queries verified occurrences by `date`, so "tonight" means tonight โ not an SEO page from last season.
- **Out-of-market refusal.** Non-Bay-Area market names are refused before any upstream call, and the surfaced copy states the SF-Bay-Area-only boundary rather than returning plausible-but-wrong geography.
- **Honest emptiness.** If a bounded query has no verified matches, it returns nothing rather than padding with invented places.
That is the product: the answer stays where you are.
---
## Configuration
| Env var | Default | Purpose |
| --- | --- | --- |
| `DAYPLAY_MCP_URL` | `https://www.dayplay.io/api/mcp` | Override the remote endpoint (staging, self-hosted, local dev) |
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.
---
## How the proxy works
```
MCP client (stdio) โ bin/dayplay-mcp.js โ https://www.dayplay.io/api/mcp (Streamable HTTP)
```
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.
Prefer direct HTTP if your client supports it; use the shim for stdio-only clients.
---
## Repository layout
```
dayplay-mcp/
โโโ .cursor/
โ โโโ mcp.json # Direct Cursor MCP connection
โโโ .cursor-plugin/
โ โโโ plugin.json # Cursor Marketplace catalog plugin manifest
โโโ skills/
โ โโโ vibe-scout/
โ โโโ SKILL.md # Grok Bot & Cursor Agent prompt instructions
โโโ bin/
โ โโโ dayplay-mcp.js # Executable proxy for `npx -y @dayplayai/mcp-server`
โโโ assets/
โ โโโ logo.svg
โโโ test/
โ โโโ e2e.mjs
โโโ smithery.yaml # Smithery.ai registry manifest
โโโ plugin.json # Agent Plugins standard manifest
โโโ package.json # npm metadata (@dayplayai/mcp-server v1.2.1, MIT)
โโโ README.md # This file
โโโ LICENSE # MIT (Dayplay Team)
```
---
## Development
```bash
node bin/dayplay-mcp.js --smoke # verify remote endpoint + tool discovery
node bin/dayplay-mcp.js # run the stdio proxy
node test/e2e.mjs # end-to-end stdio smoke (tools + 3 tool calls)
```
---
## Releasing (maintainers)
Publishing is fully automated via **npm Trusted Publishing (OIDC)** โ no `NPM_TOKEN`, no 2FA prompts. The `.github/workflows/publish.yml` workflow is bound in the package's npm settings to this exact repo + workflow.
```bash
npm version patch # or minor / major โ bumps package.json, creates the vX.Y.Z tag
git push --follow-tags
```
CI then: verifies `package.json` version matches the tag โ `npm ci` โ smoke test โ `npm publish --provenance` (sigstore-signed, OIDC-attested).
**Gotcha:** `--follow-tags` doesn't always push the tag. If no workflow run appears under *Actions* within a minute, finish with:
```bash
git push origin v1.X.Y
```
Notes:
- The registry shows *"package is being processed"* for ~3 minutes after publish before the new version resolves โ don't panic-verify too early.
- npm's OIDC flow requires **npm โฅ 11.5.1** in CI; the workflow installs `npm@latest` for this reason.
- If the workflow ever gains an `environment:` block, the npm Trusted Publisher binding must be updated to the same environment name, or publishes will be rejected.
---
## License
MIT ยฉ Dayplay Team โ https://www.dayplay.io
TDQS
Scored across 3 tools
Each tool targets a distinct resource type: neighborhoods, events, and places. Though get_events and get_places share geographic constraints and filtering by neighborhood, their domain nouns are unambiguous and the descriptions clearly separate them.
All three tools follow the same get_<plural-noun> naming convention. This is a consistent, predictable pattern with no mixed styles or vague verbs.
Three tools is well-scoped for a read-only local discovery service, with each tool covering one core data type. No tool is redundant, and additional tools would likely be unnecessary.
The server provides neighborhood lookup plus event and place discovery, which covers the core read-only domain. Minor gaps exist, such as no explicit category enumeration or individual detail-fetch tool, but filtered queries should handle most typical requests.