@protocoltooling/fullcalendar 0.3.0 → 0.3.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/LICENSE +1 -1
- package/README.md +43 -79
- package/package.json +7 -7
package/LICENSE
CHANGED
package/README.md
CHANGED
|
@@ -1,103 +1,63 @@
|
|
|
1
1
|
# FullCalendar WebMCP
|
|
2
2
|
|
|
3
|
-
Add WebMCP calendar tools to an existing FullCalendar React
|
|
3
|
+
Add WebMCP calendar tools to an existing FullCalendar React app.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Created by Roberto Nevarez. FullCalendar WebMCP exposes structured browser tools without replacing your calendar UI, backend, database, or application state.
|
|
6
|
+
|
|
7
|
+
[Live demo](https://protocoltooling.com/demo) · [Documentation](https://protocoltooling.com/integrations/fullcalendar) · [WebMCP Challenge notes](./CHALLENGE.md)
|
|
8
|
+
|
|
9
|
+
## Install
|
|
6
10
|
|
|
7
11
|
```bash
|
|
8
12
|
npm install @protocoltooling/fullcalendar
|
|
9
13
|
```
|
|
10
14
|
|
|
11
|
-
## Minimal integration
|
|
12
|
-
|
|
13
15
|
```tsx
|
|
14
16
|
useFullCalendarWebMCP({
|
|
15
17
|
calendarRef,
|
|
16
|
-
events: repository,
|
|
18
|
+
events: repository,
|
|
17
19
|
onEventsChanged: refreshEvents,
|
|
18
20
|
});
|
|
19
21
|
```
|
|
20
22
|
|
|
21
|
-
|
|
22
|
-
import FullCalendar from "@fullcalendar/react";
|
|
23
|
-
import { useCallback, useRef, useState } from "react";
|
|
24
|
-
import {
|
|
25
|
-
useFullCalendarWebMCP,
|
|
26
|
-
type CalendarEvent,
|
|
27
|
-
type CalendarEventRepository,
|
|
28
|
-
} from "@protocoltooling/fullcalendar";
|
|
29
|
-
|
|
30
|
-
const repository: CalendarEventRepository = {
|
|
31
|
-
/* wire to your API */
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
export function MyCalendar() {
|
|
35
|
-
const calendarRef = useRef<FullCalendar>(null);
|
|
36
|
-
const [events, setEvents] = useState<CalendarEvent[]>([]);
|
|
37
|
-
|
|
38
|
-
const refreshEvents = useCallback(async () => {
|
|
39
|
-
setEvents(await repository.list());
|
|
40
|
-
}, []);
|
|
41
|
-
|
|
42
|
-
useFullCalendarWebMCP({
|
|
43
|
-
calendarRef,
|
|
44
|
-
events: repository,
|
|
45
|
-
onEventsChanged: refreshEvents,
|
|
46
|
-
});
|
|
47
|
-
|
|
48
|
-
return (
|
|
49
|
-
<FullCalendar
|
|
50
|
-
ref={calendarRef}
|
|
51
|
-
events={events.map((event) => ({
|
|
52
|
-
...event,
|
|
53
|
-
end: event.end ?? undefined,
|
|
54
|
-
}))}
|
|
55
|
-
/>
|
|
56
|
-
);
|
|
57
|
-
}
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
## WebMCP tools
|
|
23
|
+
Your repository stays authoritative. FullCalendar WebMCP routes agent reads and writes through the same persistence layer your app already uses.
|
|
61
24
|
|
|
62
|
-
|
|
25
|
+
## Agent tools
|
|
63
26
|
|
|
64
27
|
| Tool | Purpose |
|
|
65
|
-
|
|
66
|
-
| `calendar_get_context` |
|
|
67
|
-
| `calendar_list_events` | Search
|
|
68
|
-
| `calendar_get_event` |
|
|
69
|
-
| `calendar_create_event` | Create
|
|
70
|
-
| `calendar_update_event` |
|
|
71
|
-
| `calendar_delete_event` |
|
|
72
|
-
|
|
73
|
-
Tools return
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
## Peer dependencies
|
|
28
|
+
| --- | --- |
|
|
29
|
+
| `calendar_get_context` | Read time, timezone, view, and visible range |
|
|
30
|
+
| `calendar_list_events` | Search persisted events |
|
|
31
|
+
| `calendar_get_event` | Read one event by stable id |
|
|
32
|
+
| `calendar_create_event` | Create an event |
|
|
33
|
+
| `calendar_update_event` | Update an event |
|
|
34
|
+
| `calendar_delete_event` | Delete an event |
|
|
35
|
+
|
|
36
|
+
Tools return structured domain state. The consuming agent handles the conversation.
|
|
37
|
+
|
|
38
|
+
## Shared state
|
|
39
|
+
|
|
40
|
+
```text
|
|
41
|
+
Person ───────────────┐
|
|
42
|
+
↓
|
|
43
|
+
FullCalendar UI
|
|
44
|
+
↓
|
|
45
|
+
host repository
|
|
46
|
+
↑
|
|
47
|
+
WebMCP agent → FullCalendar WebMCP
|
|
48
|
+
```
|
|
87
49
|
|
|
88
|
-
|
|
89
|
-
- `@fullcalendar/react`: `^6.0.0 || ^7.0.0`
|
|
50
|
+
A person can drag or resize an event, then an agent can read the updated state. An agent can create or reschedule an event, and the same change appears in the human interface.
|
|
90
51
|
|
|
91
|
-
|
|
52
|
+
The demo uses browser-local persistence so every visitor gets an isolated, resettable workspace. Production apps can connect the same repository contract to their existing API and database.
|
|
92
53
|
|
|
93
|
-
|
|
54
|
+
## Security boundary
|
|
94
55
|
|
|
95
|
-
|
|
56
|
+
FullCalendar WebMCP does not authenticate users, store events, or authorize mutations. The host application remains responsible for authentication, authorization, and persistence.
|
|
96
57
|
|
|
97
|
-
|
|
58
|
+
Optional `capabilities` can limit which WebMCP tools are registered. This is defense in depth, not a replacement for server-side authorization.
|
|
98
59
|
|
|
99
|
-
|
|
100
|
-
Current package: `@protocoltooling/fullcalendar`
|
|
60
|
+
Host-selected event `metadata` is JSON-safe and read-only through WebMCP writes. FullCalendar `extendedProps` are never exposed automatically.
|
|
101
61
|
|
|
102
62
|
## Development
|
|
103
63
|
|
|
@@ -107,11 +67,15 @@ npm test
|
|
|
107
67
|
npm run typecheck
|
|
108
68
|
npm run lint
|
|
109
69
|
npm run test:pack
|
|
110
|
-
npm run docs:
|
|
70
|
+
npm run docs:build
|
|
111
71
|
```
|
|
112
72
|
|
|
113
|
-
Local example:
|
|
73
|
+
Local example:
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
npm run dev
|
|
77
|
+
```
|
|
114
78
|
|
|
115
79
|
## License
|
|
116
80
|
|
|
117
|
-
MIT
|
|
81
|
+
MIT © 2026 Roberto Nevarez
|
package/package.json
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@protocoltooling/fullcalendar",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.1",
|
|
4
4
|
"description": "Add WebMCP tools to FullCalendar React applications.",
|
|
5
|
+
"author": "Roberto Nevarez",
|
|
5
6
|
"publishConfig": {
|
|
6
7
|
"access": "public"
|
|
7
8
|
},
|
|
@@ -9,20 +10,19 @@
|
|
|
9
10
|
"webmcp",
|
|
10
11
|
"fullcalendar",
|
|
11
12
|
"react",
|
|
12
|
-
"mcp",
|
|
13
|
-
"model-context-protocol",
|
|
14
13
|
"calendar",
|
|
15
|
-
"ai-agents"
|
|
14
|
+
"ai-agents",
|
|
15
|
+
"browser-tools"
|
|
16
16
|
],
|
|
17
17
|
"type": "module",
|
|
18
18
|
"license": "MIT",
|
|
19
19
|
"repository": {
|
|
20
20
|
"type": "git",
|
|
21
|
-
"url": "git+https://github.com/robertonevarez/
|
|
21
|
+
"url": "git+https://github.com/robertonevarez/fullcalendar-webmcp.git"
|
|
22
22
|
},
|
|
23
|
-
"homepage": "https://
|
|
23
|
+
"homepage": "https://protocoltooling.com/integrations/fullcalendar",
|
|
24
24
|
"bugs": {
|
|
25
|
-
"url": "https://github.com/robertonevarez/
|
|
25
|
+
"url": "https://github.com/robertonevarez/fullcalendar-webmcp/issues"
|
|
26
26
|
},
|
|
27
27
|
"main": "./dist/index.js",
|
|
28
28
|
"module": "./dist/index.js",
|