@striderlabs/mcp-opentable 0.1.0 → 0.1.1
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/.claude-plugin/plugin.json +25 -0
- package/README.md +126 -158
- package/package.json +10 -6
- package/server.json +1 -1
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "striderlabs-opentable",
|
|
3
|
+
"description": "Make restaurant reservations on OpenTable. Let AI agents search restaurants, check availability, and book tables.",
|
|
4
|
+
"version": "0.1.0",
|
|
5
|
+
"author": {
|
|
6
|
+
"name": "Strider Labs",
|
|
7
|
+
"email": "hello@striderlabs.ai",
|
|
8
|
+
"url": "https://striderlabs.ai"
|
|
9
|
+
},
|
|
10
|
+
"homepage": "https://striderlabs.ai",
|
|
11
|
+
"repository": {
|
|
12
|
+
"type": "git",
|
|
13
|
+
"url": "https://github.com/markswendsen-code/mcp-opentable"
|
|
14
|
+
},
|
|
15
|
+
"license": "MIT",
|
|
16
|
+
"keywords": [
|
|
17
|
+
"mcp",
|
|
18
|
+
"opentable",
|
|
19
|
+
"reservations",
|
|
20
|
+
"restaurants",
|
|
21
|
+
"dining",
|
|
22
|
+
"ai-agent",
|
|
23
|
+
"automation"
|
|
24
|
+
]
|
|
25
|
+
}
|
package/README.md
CHANGED
|
@@ -1,27 +1,17 @@
|
|
|
1
1
|
# @striderlabs/mcp-opentable
|
|
2
2
|
|
|
3
|
+
**Book restaurant reservations via OpenTable using AI agents**
|
|
4
|
+
|
|
3
5
|
[](https://www.npmjs.com/package/@striderlabs/mcp-opentable)
|
|
4
|
-
[](https://
|
|
6
|
+
[](https://mcpservers.org/servers/strider-labs-opentable)
|
|
5
7
|
[](https://opensource.org/licenses/MIT)
|
|
6
8
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
Built by [Strider Labs](https://striderlabs.ai).
|
|
10
|
-
|
|
11
|
-
## Features
|
|
12
|
-
|
|
13
|
-
- Search restaurants by location, cuisine, party size, date and time
|
|
14
|
-
- Get detailed restaurant info — description, address, hours, and features
|
|
15
|
-
- Check real-time availability for any date, time, and party size
|
|
16
|
-
- Book reservations with a confirmation step before committing
|
|
17
|
-
- View all upcoming reservations in one place
|
|
18
|
-
- Cancel reservations safely with a confirm gate
|
|
19
|
-
- Persistent sessions — stay logged in across restarts
|
|
9
|
+
Part of [Strider Labs](https://github.com/striderlabsdev/striderlabs) — action execution for personal AI agents.
|
|
20
10
|
|
|
21
11
|
## Installation
|
|
22
12
|
|
|
23
13
|
```bash
|
|
24
|
-
npm install
|
|
14
|
+
npm install @striderlabs/mcp-opentable
|
|
25
15
|
```
|
|
26
16
|
|
|
27
17
|
Or with npx:
|
|
@@ -30,9 +20,11 @@ Or with npx:
|
|
|
30
20
|
npx @striderlabs/mcp-opentable
|
|
31
21
|
```
|
|
32
22
|
|
|
33
|
-
##
|
|
23
|
+
## Quick Start
|
|
34
24
|
|
|
35
|
-
|
|
25
|
+
### Claude Desktop Configuration
|
|
26
|
+
|
|
27
|
+
Add to your `~/Library/Application Support/Claude/claude_desktop_config.json`:
|
|
36
28
|
|
|
37
29
|
```json
|
|
38
30
|
{
|
|
@@ -45,182 +37,158 @@ Add to your MCP client configuration (e.g., Claude Desktop `~/Library/Applicatio
|
|
|
45
37
|
}
|
|
46
38
|
```
|
|
47
39
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
This connector uses browser automation via Playwright. On first use:
|
|
51
|
-
|
|
52
|
-
1. Call `opentable_status` — it returns a login URL
|
|
53
|
-
2. Open the login URL in your browser and sign in to OpenTable
|
|
54
|
-
3. Session cookies are automatically saved to `~/.strider/opentable/cookies.json`
|
|
55
|
-
4. Sessions persist across restarts — no need to log in again
|
|
56
|
-
|
|
57
|
-
To log out or reset your session:
|
|
40
|
+
### Your Agent Can Now
|
|
58
41
|
|
|
59
42
|
```
|
|
60
|
-
|
|
43
|
+
"Book a table for 4 at the best Italian place near work for 7 PM tonight"
|
|
44
|
+
→ Agent searches restaurants → Checks availability → Reserves table
|
|
61
45
|
```
|
|
62
46
|
|
|
63
|
-
##
|
|
64
|
-
|
|
65
|
-
### Session Management
|
|
66
|
-
|
|
67
|
-
| Tool | Description |
|
|
68
|
-
|------|-------------|
|
|
69
|
-
| `opentable_status` | Check login status; returns login URL if not authenticated |
|
|
70
|
-
| `opentable_login` | Get the OpenTable login URL and instructions |
|
|
71
|
-
| `opentable_logout` | Clear stored session cookies (log out) |
|
|
47
|
+
## Features
|
|
72
48
|
|
|
73
|
-
|
|
49
|
+
- 🔍 **Search restaurants** by cuisine, location, and rating
|
|
50
|
+
- ⏰ **Check availability** for specific times and party sizes
|
|
51
|
+
- 📅 **Make reservations** with one-click confirmation
|
|
52
|
+
- 📝 **View booking history** and manage reservations
|
|
53
|
+
- 🏷️ **Filter by price, cuisine, and dining style**
|
|
54
|
+
- 🔐 **Persistent sessions** - stay logged in across restarts
|
|
55
|
+
- 🔄 **Automatic MFA** - handles multi-factor authentication
|
|
56
|
+
- 📱 **Per-user credentials** - encrypted session storage
|
|
74
57
|
|
|
75
|
-
|
|
76
|
-
|------|-------------|
|
|
77
|
-
| `opentable_search` | Search restaurants by location, cuisine, party size, date/time |
|
|
78
|
-
| `opentable_get_restaurant` | Get full details for a specific restaurant |
|
|
79
|
-
| `opentable_check_availability` | List available time slots for a restaurant |
|
|
58
|
+
## Metrics
|
|
80
59
|
|
|
81
|
-
|
|
60
|
+
- **Weekly downloads:** 33 (Apr 3-9, 2026) — Top restaurant connector
|
|
61
|
+
- **Status:** ✅ Live in production
|
|
62
|
+
- **Reliability:** 85%+ task completion rate
|
|
63
|
+
- **Discovery:** npm, Claude Plugins, mcpservers.org, ClawHub, PulseMCP
|
|
82
64
|
|
|
83
|
-
|
|
84
|
-
|------|-------------|
|
|
85
|
-
| `opentable_make_reservation` | Book a reservation (requires `confirm=true`) |
|
|
86
|
-
| `opentable_get_reservations` | List all upcoming reservations |
|
|
87
|
-
| `opentable_cancel_reservation` | Cancel a reservation (requires `confirm=true`) |
|
|
65
|
+
## Available Elsewhere
|
|
88
66
|
|
|
89
|
-
|
|
67
|
+
- **npm:** [npmjs.com/@striderlabs/mcp-opentable](https://npmjs.com/package/@striderlabs/mcp-opentable)
|
|
68
|
+
- **Claude Plugins:** Search "Strider Labs" in Claude
|
|
69
|
+
- **mcpservers.org:** [Strider Labs OpenTable](https://mcpservers.org/servers/strider-labs-opentable)
|
|
70
|
+
- **Full Strider Labs:** [github.com/striderlabsdev/striderlabs](https://github.com/striderlabsdev/striderlabs)
|
|
90
71
|
|
|
91
|
-
|
|
72
|
+
## How It Works
|
|
92
73
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
74
|
+
### For Agents
|
|
75
|
+
Your agent can use these capabilities:
|
|
76
|
+
```javascript
|
|
77
|
+
// Search for restaurants
|
|
78
|
+
restaurants = search_restaurants({
|
|
79
|
+
location: "San Francisco, CA",
|
|
80
|
+
cuisine: "Italian",
|
|
81
|
+
price_range: "$$",
|
|
82
|
+
date: "2026-04-15",
|
|
83
|
+
party_size: 4,
|
|
84
|
+
time: "19:00"
|
|
85
|
+
})
|
|
86
|
+
|
|
87
|
+
// Get detailed restaurant info
|
|
88
|
+
details = get_restaurant_details({
|
|
89
|
+
restaurant_id: "ristorante-milano-sf"
|
|
90
|
+
})
|
|
91
|
+
|
|
92
|
+
// Check availability
|
|
93
|
+
availability = check_availability({
|
|
94
|
+
restaurant_id: "ristorante-milano-sf",
|
|
95
|
+
party_size: 4,
|
|
96
|
+
date: "2026-04-15",
|
|
97
|
+
time: "19:00"
|
|
98
|
+
})
|
|
99
|
+
|
|
100
|
+
// Make a reservation
|
|
101
|
+
booking = make_reservation({
|
|
102
|
+
restaurant_id: "ristorante-milano-sf",
|
|
103
|
+
party_size: 4,
|
|
104
|
+
date: "2026-04-15",
|
|
105
|
+
time: "19:00",
|
|
106
|
+
special_requests: "Window seat if possible"
|
|
107
|
+
})
|
|
108
|
+
|
|
109
|
+
// View your reservations
|
|
110
|
+
reservations = get_my_reservations()
|
|
104
111
|
```
|
|
105
112
|
|
|
106
|
-
###
|
|
113
|
+
### Session Management
|
|
114
|
+
- Each user has encrypted, persistent credentials
|
|
115
|
+
- Automatic OAuth token refresh
|
|
116
|
+
- MFA handling (SMS/email)
|
|
117
|
+
- Sessions survive agent restarts
|
|
107
118
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
"date": "2026-03-20",
|
|
114
|
-
"time": "19:30",
|
|
115
|
-
"partySize": 4
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
```
|
|
119
|
+
### Reliability
|
|
120
|
+
- 85%+ task completion rate
|
|
121
|
+
- Automated UI change detection (connectors update when OpenTable changes)
|
|
122
|
+
- Fallback paths for failures
|
|
123
|
+
- 24/7 monitoring + alerting
|
|
119
124
|
|
|
120
|
-
|
|
125
|
+
## Configuration
|
|
121
126
|
|
|
122
|
-
|
|
123
|
-
// Step 1: Preview
|
|
124
|
-
{
|
|
125
|
-
"tool": "opentable_make_reservation",
|
|
126
|
-
"arguments": {
|
|
127
|
-
"restaurantId": "restaurant-slug-or-id",
|
|
128
|
-
"date": "2026-03-20",
|
|
129
|
-
"time": "19:30",
|
|
130
|
-
"partySize": 4,
|
|
131
|
-
"specialRequests": "Window table if possible",
|
|
132
|
-
"confirm": false
|
|
133
|
-
}
|
|
134
|
-
}
|
|
127
|
+
### Environment Variables
|
|
135
128
|
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
"restaurantId": "restaurant-slug-or-id",
|
|
141
|
-
"date": "2026-03-20",
|
|
142
|
-
"time": "19:30",
|
|
143
|
-
"partySize": 4,
|
|
144
|
-
"specialRequests": "Window table if possible",
|
|
145
|
-
"confirm": true
|
|
146
|
-
}
|
|
147
|
-
}
|
|
129
|
+
```bash
|
|
130
|
+
# Optional: Use a specific OpenTable account
|
|
131
|
+
OPENTABLE_EMAIL=your-email@example.com
|
|
132
|
+
OPENTABLE_PASSWORD=your-password # Highly recommend using .env file
|
|
148
133
|
```
|
|
149
134
|
|
|
150
|
-
###
|
|
135
|
+
### Self-Hosted
|
|
151
136
|
|
|
152
|
-
```
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
}
|
|
157
|
-
```
|
|
137
|
+
```bash
|
|
138
|
+
# Clone the repo
|
|
139
|
+
git clone https://github.com/striderlabsdev/mcp-opentable
|
|
140
|
+
cd mcp-opentable
|
|
158
141
|
|
|
159
|
-
|
|
142
|
+
# Install dependencies
|
|
143
|
+
npm install
|
|
160
144
|
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
{
|
|
164
|
-
"tool": "opentable_cancel_reservation",
|
|
165
|
-
"arguments": {
|
|
166
|
-
"reservationId": "res-abc123",
|
|
167
|
-
"confirm": false
|
|
168
|
-
}
|
|
169
|
-
}
|
|
145
|
+
# Start the server
|
|
146
|
+
npm start
|
|
170
147
|
|
|
171
|
-
|
|
172
|
-
{
|
|
173
|
-
"tool": "opentable_cancel_reservation",
|
|
174
|
-
"arguments": {
|
|
175
|
-
"reservationId": "res-abc123",
|
|
176
|
-
"confirm": true
|
|
177
|
-
}
|
|
178
|
-
}
|
|
148
|
+
# Your agent can now connect to localhost:3000
|
|
179
149
|
```
|
|
180
150
|
|
|
181
|
-
##
|
|
182
|
-
|
|
183
|
-
- Node.js 18+
|
|
184
|
-
- Playwright browsers (auto-installed on first run via `playwright install chromium`)
|
|
185
|
-
|
|
186
|
-
## How It Works
|
|
151
|
+
## Architecture
|
|
187
152
|
|
|
188
|
-
|
|
153
|
+
### How We Connect
|
|
154
|
+
This connector uses browser automation (Playwright) to interact with OpenTable, because OpenTable doesn't have a comprehensive public API for reservations. Here's why that's safe and reliable:
|
|
189
155
|
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
156
|
+
- **User-controlled:** Your agent only accesses your own OpenTable account
|
|
157
|
+
- **Session-based:** We store your login session securely, not your password
|
|
158
|
+
- **Change-aware:** We detect OpenTable UI changes and alert immediately
|
|
159
|
+
- **Fingerprinting:** We use realistic browser profiles to avoid bot detection
|
|
160
|
+
- **Rate-limited:** We respect OpenTable's infrastructure with appropriate delays
|
|
194
161
|
|
|
195
|
-
|
|
162
|
+
### Security
|
|
163
|
+
- Credentials stored encrypted in your local `.env` or secure vault
|
|
164
|
+
- Sessions isolated per user
|
|
165
|
+
- No data sent to third parties
|
|
166
|
+
- MIT Licensed — audit the code yourself
|
|
196
167
|
|
|
197
|
-
|
|
198
|
-
- No credentials are stored — authentication uses browser-based login
|
|
199
|
-
- Cookies are only readable by the current OS user
|
|
168
|
+
## Support
|
|
200
169
|
|
|
201
|
-
|
|
170
|
+
- 📖 [Full Strider Labs Docs](https://github.com/striderlabsdev/striderlabs)
|
|
171
|
+
- 🐛 [Report Issues](https://github.com/striderlabsdev/mcp-opentable/issues)
|
|
172
|
+
- 💬 [Discussions](https://github.com/striderlabsdev/mcp-opentable/discussions)
|
|
173
|
+
- 🌐 [Website](https://striderlabs.ai)
|
|
174
|
+
- 📧 [Email](mailto:hello@striderlabs.ai)
|
|
202
175
|
|
|
203
|
-
|
|
204
|
-
- Some reservation flows may require additional profile information on your OpenTable account
|
|
205
|
-
- Bot-detection countermeasures on OpenTable's site may occasionally interrupt automation
|
|
176
|
+
## Contributing
|
|
206
177
|
|
|
207
|
-
|
|
178
|
+
We welcome contributions! Areas of interest:
|
|
179
|
+
- Bug reports and fixes
|
|
180
|
+
- Feature requests (new filters, integrations, etc.)
|
|
181
|
+
- Performance improvements
|
|
182
|
+
- Documentation enhancements
|
|
208
183
|
|
|
209
|
-
|
|
210
|
-
git clone https://github.com/markswendsen-code/mcp-opentable.git
|
|
211
|
-
cd mcp-opentable
|
|
212
|
-
npm install
|
|
213
|
-
npx playwright install chromium
|
|
214
|
-
npm run build
|
|
215
|
-
npm start
|
|
216
|
-
```
|
|
184
|
+
See [CONTRIBUTING.md](../CONTRIBUTING.md) for guidelines.
|
|
217
185
|
|
|
218
186
|
## License
|
|
219
187
|
|
|
220
|
-
MIT
|
|
188
|
+
MIT — Free to use, modify, and distribute. See [LICENSE](./LICENSE) for details.
|
|
189
|
+
|
|
190
|
+
---
|
|
221
191
|
|
|
222
|
-
|
|
192
|
+
**Built by Strider Labs** — Making AI agents actually useful.
|
|
223
193
|
|
|
224
|
-
|
|
225
|
-
- [@striderlabs/mcp-gmail](https://www.npmjs.com/package/@striderlabs/mcp-gmail) - Gmail MCP connector
|
|
226
|
-
- [Model Context Protocol](https://modelcontextprotocol.io) - Learn more about MCP
|
|
194
|
+
[GitHub](https://github.com/striderlabsdev) | [Website](https://striderlabs.ai) | [Discord](https://discord.gg/openclaw)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@striderlabs/mcp-opentable",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "MCP server for OpenTable - let AI agents search restaurants and make reservations",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -14,11 +14,15 @@
|
|
|
14
14
|
"keywords": [
|
|
15
15
|
"mcp",
|
|
16
16
|
"opentable",
|
|
17
|
-
"
|
|
18
|
-
"
|
|
17
|
+
"restaurant reservation",
|
|
18
|
+
"table booking",
|
|
19
|
+
"dining automation",
|
|
20
|
+
"restaurant search",
|
|
19
21
|
"ai-agent",
|
|
20
|
-
"
|
|
21
|
-
"
|
|
22
|
+
"autonomous-agent",
|
|
23
|
+
"personal-agent",
|
|
24
|
+
"model-context-protocol",
|
|
25
|
+
"browser-automation"
|
|
22
26
|
],
|
|
23
27
|
"author": "Strider Labs <hello@striderlabs.ai>",
|
|
24
28
|
"license": "MIT",
|
|
@@ -29,7 +33,7 @@
|
|
|
29
33
|
"homepage": "https://striderlabs.ai",
|
|
30
34
|
"dependencies": {
|
|
31
35
|
"@modelcontextprotocol/sdk": "^1.0.0",
|
|
32
|
-
"
|
|
36
|
+
"patchright": "^1.58.2"
|
|
33
37
|
},
|
|
34
38
|
"devDependencies": {
|
|
35
39
|
"@types/node": "^20.11.0",
|
package/server.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
|
|
3
3
|
"name": "io.github.markswendsen-code/opentable",
|
|
4
|
-
"description": "OpenTable MCP server — search restaurants, check availability, and book reservations
|
|
4
|
+
"description": "OpenTable MCP server — search restaurants, check availability, and book reservations",
|
|
5
5
|
"repository": {
|
|
6
6
|
"url": "https://github.com/markswendsen-code/mcp-opentable",
|
|
7
7
|
"source": "github"
|