todance-mcp 1.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/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +295 -0
- package/dist/index.js.map +1 -0
- package/package.json +37 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// todance-mcp — MCP server for todance.today
|
|
3
|
+
// Exposes event management as LLM tools via stdio transport.
|
|
4
|
+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
5
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
6
|
+
import { CallToolRequestSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
|
|
7
|
+
// ---------------------------------------------------------------------------
|
|
8
|
+
// Config
|
|
9
|
+
// ---------------------------------------------------------------------------
|
|
10
|
+
const API_KEY = process.env.TODANCE_API_KEY ?? '';
|
|
11
|
+
const BASE_URL = (process.env.TODANCE_API_URL ?? 'https://todance.today').replace(/\/$/, '');
|
|
12
|
+
if (!API_KEY) {
|
|
13
|
+
process.stderr.write('ERROR: TODANCE_API_KEY environment variable is not set.\n');
|
|
14
|
+
process.exit(1);
|
|
15
|
+
}
|
|
16
|
+
// ---------------------------------------------------------------------------
|
|
17
|
+
// HTTP helper
|
|
18
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
async function apiRequest(method, path, body) {
|
|
20
|
+
const url = `${BASE_URL}${path}`;
|
|
21
|
+
const res = await fetch(url, {
|
|
22
|
+
method,
|
|
23
|
+
headers: {
|
|
24
|
+
Authorization: `Bearer ${API_KEY}`,
|
|
25
|
+
'Content-Type': 'application/json',
|
|
26
|
+
},
|
|
27
|
+
...(body !== undefined ? { body: JSON.stringify(body) } : {}),
|
|
28
|
+
});
|
|
29
|
+
const data = await res.json();
|
|
30
|
+
if (!res.ok) {
|
|
31
|
+
const err = data.error ?? res.statusText;
|
|
32
|
+
const fieldErrors = data.fieldErrors;
|
|
33
|
+
throw new Error(fieldErrors
|
|
34
|
+
? `${err}\nField errors: ${JSON.stringify(fieldErrors)}`
|
|
35
|
+
: String(err));
|
|
36
|
+
}
|
|
37
|
+
return data;
|
|
38
|
+
}
|
|
39
|
+
function ok(data) {
|
|
40
|
+
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
41
|
+
}
|
|
42
|
+
// ---------------------------------------------------------------------------
|
|
43
|
+
// Tool definitions
|
|
44
|
+
// ---------------------------------------------------------------------------
|
|
45
|
+
const TOOLS = [
|
|
46
|
+
{
|
|
47
|
+
name: 'list_dances',
|
|
48
|
+
description: 'List all available dance types (salsa, bachata, kizomba, etc.) with their codes. ' +
|
|
49
|
+
'Call this first to get valid dance codes for create_event.',
|
|
50
|
+
inputSchema: { type: 'object', properties: {}, required: [] },
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
name: 'list_events',
|
|
54
|
+
description: 'List all your upcoming events with registration and interest counts.',
|
|
55
|
+
inputSchema: { type: 'object', properties: {}, required: [] },
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
name: 'get_analytics',
|
|
59
|
+
description: 'Get organizer analytics: views, registrations (leader/follower), and interests for all your events in the last 30 days and upcoming.',
|
|
60
|
+
inputSchema: { type: 'object', properties: {}, required: [] },
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
name: 'create_event',
|
|
64
|
+
description: 'Create a new dance event or recurring series on todance.today. ' +
|
|
65
|
+
'Use list_dances first to get valid dance codes. ' +
|
|
66
|
+
'For recurring events set recurrence_rule to "weekly", "monthly", or "yearly" and provide end_date. ' +
|
|
67
|
+
'Returns the series_id and instance IDs.',
|
|
68
|
+
inputSchema: {
|
|
69
|
+
type: 'object',
|
|
70
|
+
required: ['name', 'address', 'city', 'country', 'dances', 'start_date'],
|
|
71
|
+
properties: {
|
|
72
|
+
name: {
|
|
73
|
+
type: 'string',
|
|
74
|
+
description: 'Event name (max 200 chars)',
|
|
75
|
+
},
|
|
76
|
+
address: {
|
|
77
|
+
type: 'string',
|
|
78
|
+
description: 'Street address of the venue, e.g. "Torstraße 20"',
|
|
79
|
+
},
|
|
80
|
+
city: {
|
|
81
|
+
type: 'string',
|
|
82
|
+
description: 'City name, e.g. "Berlin"',
|
|
83
|
+
},
|
|
84
|
+
country: {
|
|
85
|
+
type: 'string',
|
|
86
|
+
description: 'Country name in English, e.g. "Germany"',
|
|
87
|
+
},
|
|
88
|
+
dances: {
|
|
89
|
+
type: 'array',
|
|
90
|
+
items: { type: 'string' },
|
|
91
|
+
description: 'Array of dance type codes from list_dances, e.g. ["salsa", "bachata"]',
|
|
92
|
+
},
|
|
93
|
+
start_date: {
|
|
94
|
+
type: 'string',
|
|
95
|
+
description: 'Start date in YYYY-MM-DD format',
|
|
96
|
+
},
|
|
97
|
+
end_date: {
|
|
98
|
+
type: 'string',
|
|
99
|
+
description: 'End date in YYYY-MM-DD format. For single events: last day of the event. For recurring series: last occurrence date.',
|
|
100
|
+
},
|
|
101
|
+
start_time: {
|
|
102
|
+
type: 'string',
|
|
103
|
+
description: 'Start time in HH:MM format (24h), e.g. "20:00". Defaults to 20:00.',
|
|
104
|
+
},
|
|
105
|
+
end_time: {
|
|
106
|
+
type: 'string',
|
|
107
|
+
description: 'End time in HH:MM format (24h), e.g. "23:00". Defaults to 23:00.',
|
|
108
|
+
},
|
|
109
|
+
recurrence_rule: {
|
|
110
|
+
type: 'string',
|
|
111
|
+
enum: ['once', 'weekly', 'monthly', 'yearly'],
|
|
112
|
+
description: 'How often the event repeats. Defaults to "once".',
|
|
113
|
+
},
|
|
114
|
+
weekday: {
|
|
115
|
+
type: 'number',
|
|
116
|
+
description: 'Day of week for weekly/monthly events: 0=Sunday, 1=Monday, ... 5=Friday, 6=Saturday',
|
|
117
|
+
},
|
|
118
|
+
monthly_nth: {
|
|
119
|
+
type: 'number',
|
|
120
|
+
description: 'For monthly nth-weekday events: which occurrence (1=first, 2=second, 3=third, 4=fourth)',
|
|
121
|
+
},
|
|
122
|
+
monthly_weekday: {
|
|
123
|
+
type: 'number',
|
|
124
|
+
description: 'For monthly nth-weekday events: weekday (0=Sunday ... 6=Saturday)',
|
|
125
|
+
},
|
|
126
|
+
description: {
|
|
127
|
+
type: 'string',
|
|
128
|
+
description: 'Event description (max 5000 chars)',
|
|
129
|
+
},
|
|
130
|
+
location_name: {
|
|
131
|
+
type: 'string',
|
|
132
|
+
description: 'Venue name, e.g. "Tanzstudio Mitte"',
|
|
133
|
+
},
|
|
134
|
+
organizer_name: {
|
|
135
|
+
type: 'string',
|
|
136
|
+
description: 'Organizer or studio name shown on the event',
|
|
137
|
+
},
|
|
138
|
+
url: {
|
|
139
|
+
type: 'string',
|
|
140
|
+
description: 'Event website URL (must start with https://)',
|
|
141
|
+
},
|
|
142
|
+
ticket_url: {
|
|
143
|
+
type: 'string',
|
|
144
|
+
description: 'Ticket purchase URL (must start with https://)',
|
|
145
|
+
},
|
|
146
|
+
flyer_url: {
|
|
147
|
+
type: 'string',
|
|
148
|
+
description: 'Publicly accessible URL of the event flyer image',
|
|
149
|
+
},
|
|
150
|
+
categories: {
|
|
151
|
+
type: 'array',
|
|
152
|
+
items: { type: 'string', enum: ['social', 'workshop', 'festival'] },
|
|
153
|
+
description: 'Event categories. Defaults to ["social"].',
|
|
154
|
+
},
|
|
155
|
+
},
|
|
156
|
+
},
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
name: 'update_event',
|
|
160
|
+
description: 'Update basic metadata of one of your events (applies to the whole series). ' +
|
|
161
|
+
'Updatable fields: name, description, url, ticket_url, organizer_name, flyer_url. ' +
|
|
162
|
+
'Location and date changes must be done in the todance.today web editor.',
|
|
163
|
+
inputSchema: {
|
|
164
|
+
type: 'object',
|
|
165
|
+
required: ['instance_id'],
|
|
166
|
+
properties: {
|
|
167
|
+
instance_id: {
|
|
168
|
+
type: 'string',
|
|
169
|
+
description: 'Event instance ID from list_events',
|
|
170
|
+
},
|
|
171
|
+
name: { type: 'string', description: 'New event name' },
|
|
172
|
+
description: { type: 'string', description: 'New description (null to clear)' },
|
|
173
|
+
url: { type: 'string', description: 'New event URL (null to clear)' },
|
|
174
|
+
ticket_url: { type: 'string', description: 'New ticket URL (null to clear)' },
|
|
175
|
+
organizer_name: { type: 'string', description: 'New organizer name (null to clear)' },
|
|
176
|
+
flyer_url: { type: 'string', description: 'New flyer image URL (null to clear)' },
|
|
177
|
+
},
|
|
178
|
+
},
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
name: 'delete_event',
|
|
182
|
+
description: 'Delete a single event instance or an entire event series. ' +
|
|
183
|
+
'Set delete_series=true to remove all occurrences of a recurring series.',
|
|
184
|
+
inputSchema: {
|
|
185
|
+
type: 'object',
|
|
186
|
+
required: ['instance_id'],
|
|
187
|
+
properties: {
|
|
188
|
+
instance_id: {
|
|
189
|
+
type: 'string',
|
|
190
|
+
description: 'Event instance ID from list_events',
|
|
191
|
+
},
|
|
192
|
+
delete_series: {
|
|
193
|
+
type: 'boolean',
|
|
194
|
+
description: 'If true, deletes the entire series (all past and future occurrences). Default: false.',
|
|
195
|
+
},
|
|
196
|
+
},
|
|
197
|
+
},
|
|
198
|
+
},
|
|
199
|
+
{
|
|
200
|
+
name: 'extend_series',
|
|
201
|
+
description: 'Extend a recurring event series by adding more occurrences. ' +
|
|
202
|
+
'Only works for recurring events (weekly/monthly/yearly).',
|
|
203
|
+
inputSchema: {
|
|
204
|
+
type: 'object',
|
|
205
|
+
required: ['series_id', 'weeks'],
|
|
206
|
+
properties: {
|
|
207
|
+
series_id: {
|
|
208
|
+
type: 'string',
|
|
209
|
+
description: 'Series ID from list_events or create_event response',
|
|
210
|
+
},
|
|
211
|
+
weeks: {
|
|
212
|
+
type: 'number',
|
|
213
|
+
enum: [4, 8, 12, 26, 52],
|
|
214
|
+
description: 'Number of weeks to extend: 4, 8, 12, 26, or 52',
|
|
215
|
+
},
|
|
216
|
+
},
|
|
217
|
+
},
|
|
218
|
+
},
|
|
219
|
+
];
|
|
220
|
+
// ---------------------------------------------------------------------------
|
|
221
|
+
// Server
|
|
222
|
+
// ---------------------------------------------------------------------------
|
|
223
|
+
const server = new Server({ name: 'todance-mcp', version: '1.0.0' }, { capabilities: { tools: {} } });
|
|
224
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => ({ tools: TOOLS }));
|
|
225
|
+
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
226
|
+
const { name, arguments: args } = request.params;
|
|
227
|
+
const a = (args ?? {});
|
|
228
|
+
try {
|
|
229
|
+
switch (name) {
|
|
230
|
+
case 'list_dances': {
|
|
231
|
+
const data = await apiRequest('GET', '/api/v1/dances');
|
|
232
|
+
return ok(data);
|
|
233
|
+
}
|
|
234
|
+
case 'list_events': {
|
|
235
|
+
const data = await apiRequest('GET', '/api/v1/events');
|
|
236
|
+
return ok(data);
|
|
237
|
+
}
|
|
238
|
+
case 'get_analytics': {
|
|
239
|
+
const data = await apiRequest('GET', '/api/v1/analytics');
|
|
240
|
+
return ok(data);
|
|
241
|
+
}
|
|
242
|
+
case 'create_event': {
|
|
243
|
+
const data = await apiRequest('POST', '/api/v1/events', a);
|
|
244
|
+
return ok(data);
|
|
245
|
+
}
|
|
246
|
+
case 'update_event': {
|
|
247
|
+
const { instance_id, ...updates } = a;
|
|
248
|
+
if (!instance_id || typeof instance_id !== 'string') {
|
|
249
|
+
throw new Error('instance_id is required');
|
|
250
|
+
}
|
|
251
|
+
const data = await apiRequest('PATCH', `/api/v1/events/${instance_id}`, updates);
|
|
252
|
+
return ok(data);
|
|
253
|
+
}
|
|
254
|
+
case 'delete_event': {
|
|
255
|
+
const { instance_id, delete_series } = a;
|
|
256
|
+
if (!instance_id || typeof instance_id !== 'string') {
|
|
257
|
+
throw new Error('instance_id is required');
|
|
258
|
+
}
|
|
259
|
+
const qs = delete_series === true ? '?deleteSeries=true' : '';
|
|
260
|
+
const data = await apiRequest('DELETE', `/api/v1/events/${instance_id}${qs}`);
|
|
261
|
+
return ok(data);
|
|
262
|
+
}
|
|
263
|
+
case 'extend_series': {
|
|
264
|
+
const { series_id, weeks } = a;
|
|
265
|
+
if (!series_id || typeof series_id !== 'string') {
|
|
266
|
+
throw new Error('series_id is required');
|
|
267
|
+
}
|
|
268
|
+
const data = await apiRequest('POST', `/api/v1/events/series/${series_id}/extend`, { weeks });
|
|
269
|
+
return ok(data);
|
|
270
|
+
}
|
|
271
|
+
default:
|
|
272
|
+
throw new Error(`Unknown tool: ${name}`);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
catch (err) {
|
|
276
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
277
|
+
return {
|
|
278
|
+
content: [{ type: 'text', text: `Error: ${message}` }],
|
|
279
|
+
isError: true,
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
});
|
|
283
|
+
// ---------------------------------------------------------------------------
|
|
284
|
+
// Start
|
|
285
|
+
// ---------------------------------------------------------------------------
|
|
286
|
+
async function main() {
|
|
287
|
+
const transport = new StdioServerTransport();
|
|
288
|
+
await server.connect(transport);
|
|
289
|
+
process.stderr.write(`todance-mcp started — connected to ${BASE_URL}\n`);
|
|
290
|
+
}
|
|
291
|
+
main().catch((err) => {
|
|
292
|
+
process.stderr.write(`Fatal: ${err instanceof Error ? err.message : String(err)}\n`);
|
|
293
|
+
process.exit(1);
|
|
294
|
+
});
|
|
295
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "todance-mcp",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "MCP server for todance.today — create and manage dance events via LLM tools",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"mcp",
|
|
7
|
+
"dance",
|
|
8
|
+
"events",
|
|
9
|
+
"todance"
|
|
10
|
+
],
|
|
11
|
+
"license": "MIT",
|
|
12
|
+
"type": "module",
|
|
13
|
+
"bin": {
|
|
14
|
+
"todance-mcp": "dist/index.js"
|
|
15
|
+
},
|
|
16
|
+
"main": "./dist/index.js",
|
|
17
|
+
"files": [
|
|
18
|
+
"dist"
|
|
19
|
+
],
|
|
20
|
+
"scripts": {
|
|
21
|
+
"build": "tsc",
|
|
22
|
+
"start": "node dist/index.js",
|
|
23
|
+
"dev": "tsx src/index.ts",
|
|
24
|
+
"prepare": "npm run build"
|
|
25
|
+
},
|
|
26
|
+
"dependencies": {
|
|
27
|
+
"@modelcontextprotocol/sdk": "^1.12.1"
|
|
28
|
+
},
|
|
29
|
+
"devDependencies": {
|
|
30
|
+
"@types/node": "^22.0.0",
|
|
31
|
+
"tsx": "^4.19.0",
|
|
32
|
+
"typescript": "^5.8.3"
|
|
33
|
+
},
|
|
34
|
+
"engines": {
|
|
35
|
+
"node": ">=18"
|
|
36
|
+
}
|
|
37
|
+
}
|