@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.
Files changed (3) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +43 -79
  3. package/package.json +7 -7
package/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2026 Robertonevarez
3
+ Copyright (c) 2026 Roberto Nevarez
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
package/README.md CHANGED
@@ -1,103 +1,63 @@
1
1
  # FullCalendar WebMCP
2
2
 
3
- Add WebMCP calendar tools to an existing FullCalendar React application. Keep your backend, database, and FullCalendar setup.
3
+ Add WebMCP calendar tools to an existing FullCalendar React app.
4
4
 
5
- Protocol Tooling is an **adapter layer** it registers browser WebMCP tools and routes agent reads and writes through your `CalendarEventRepository`. It does not authenticate users, store events, or authorize mutations. Your backend remains authoritative.
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, // list / get / create / update / delete
18
+ events: repository,
17
19
  onEventsChanged: refreshEvents,
18
20
  });
19
21
  ```
20
22
 
21
- ```tsx
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
- Six tools agents can call:
25
+ ## Agent tools
63
26
 
64
27
  | Tool | Purpose |
65
- |---|---|
66
- | `calendar_get_context` | Anchor relative dates; read viewport/timezones |
67
- | `calendar_list_events` | Search/discover persisted events |
68
- | `calendar_get_event` | Fetch one event by stable id |
69
- | `calendar_create_event` | Create a persisted event |
70
- | `calendar_update_event` | Partial update of one event |
71
- | `calendar_delete_event` | Permanently delete one event |
72
-
73
- Tools return **structured domain state** (events, ids, time context) — not conversational messages. The consuming agent phrases results for the user.
74
-
75
- Optional `capabilities` limits which tools register (defense in depth; not a substitute for server-side authorization).
76
-
77
- ## Documentation
78
-
79
- Full docs: [protocoltooling.com/integrations/fullcalendar](https://protocoltooling.com/integrations/fullcalendar)
80
-
81
- - [Quickstart](https://protocoltooling.com/integrations/fullcalendar/quickstart)
82
- - [Security model](https://protocoltooling.com/integrations/fullcalendar/concepts/security)
83
- - [Agent workflows](https://protocoltooling.com/integrations/fullcalendar/concepts/agent-tools)
84
- - [WebMCP tools reference](https://protocoltooling.com/integrations/fullcalendar/concepts/webmcp)
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
- - `react`: `>=17 <20`
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
- ## Persistence and metadata
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
- Your repository is authoritative. FullCalendar WebMCP does not store events.
54
+ ## Security boundary
94
55
 
95
- Optional `metadata` on `CalendarEvent` is host-selected, JSON-safe, and read-only through WebMCP writes. FullCalendar `extendedProps` are never exposed automatically.
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
- ## Package migration
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
- Previous package: `protocoltooling` (deprecated)
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:dev
70
+ npm run docs:build
111
71
  ```
112
72
 
113
- Local example: `npm run dev` (Vite demo in `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.0",
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/protocoltooling.git"
21
+ "url": "git+https://github.com/robertonevarez/fullcalendar-webmcp.git"
22
22
  },
23
- "homepage": "https://github.com/robertonevarez/protocoltooling#readme",
23
+ "homepage": "https://protocoltooling.com/integrations/fullcalendar",
24
24
  "bugs": {
25
- "url": "https://github.com/robertonevarez/protocoltooling/issues"
25
+ "url": "https://github.com/robertonevarez/fullcalendar-webmcp/issues"
26
26
  },
27
27
  "main": "./dist/index.js",
28
28
  "module": "./dist/index.js",