ioffice-mcp 1.1.0 → 1.2.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.
@@ -0,0 +1,42 @@
1
+ {
2
+ "$schema": "https://anthropic.com/claude-code/marketplace.schema.json",
3
+ "name": "ioffice-mcp",
4
+ "owner": {
5
+ "name": "Chris Hall",
6
+ "email": "chris.c.hall@gmail.com"
7
+ },
8
+ "metadata": {
9
+ "description": "MCP server for iOffice — natural-language workspace and facility management via the iOffice API",
10
+ "version": "1.1.0"
11
+ },
12
+ "plugins": [
13
+ {
14
+ "name": "ioffice-mcp",
15
+ "source": {
16
+ "source": "npm",
17
+ "package": "ioffice-mcp",
18
+ "version": "1.1.0"
19
+ },
20
+ "description": "MCP server for iOffice — manage buildings, spaces, reservations, visitors, and more via natural language",
21
+ "version": "1.1.0",
22
+ "author": {
23
+ "name": "Chris Hall"
24
+ },
25
+ "homepage": "https://github.com/chrischall/ioffice-mcp",
26
+ "repository": "https://github.com/chrischall/ioffice-mcp",
27
+ "license": "MIT",
28
+ "keywords": ["ioffice", "workspace", "facility-management", "mcp"],
29
+ "category": "productivity",
30
+ "mcpServers": {
31
+ "ioffice": {
32
+ "command": "npx",
33
+ "args": ["ioffice-mcp"],
34
+ "env": {
35
+ "IOFFICE_HOST": "${IOFFICE_HOST}",
36
+ "IOFFICE_TOKEN": "${IOFFICE_TOKEN}"
37
+ }
38
+ }
39
+ }
40
+ }
41
+ ]
42
+ }
@@ -0,0 +1,24 @@
1
+ {
2
+ "name": "ioffice-mcp",
3
+ "version": "1.1.0",
4
+ "description": "MCP server for iOffice — natural-language workspace and facility management via the iOffice API",
5
+ "author": {
6
+ "name": "Chris Hall",
7
+ "email": "chris.c.hall@gmail.com"
8
+ },
9
+ "homepage": "https://github.com/chrischall/ioffice-mcp",
10
+ "repository": "https://github.com/chrischall/ioffice-mcp",
11
+ "license": "MIT",
12
+ "keywords": ["ioffice", "workspace", "facility-management", "mcp"],
13
+ "skills": "./SKILL.md",
14
+ "mcpServers": {
15
+ "ioffice": {
16
+ "command": "npx",
17
+ "args": ["ioffice-mcp"],
18
+ "env": {
19
+ "IOFFICE_HOST": "${IOFFICE_HOST}",
20
+ "IOFFICE_TOKEN": "${IOFFICE_TOKEN}"
21
+ }
22
+ }
23
+ }
24
+ }
package/.mcp.json ADDED
@@ -0,0 +1,14 @@
1
+ {
2
+ "mcpServers": {
3
+ "ioffice": {
4
+ "command": "node",
5
+ "args": ["dist/index.js"],
6
+ "env": {
7
+ "IOFFICE_HOST": "${IOFFICE_HOST}",
8
+ "IOFFICE_TOKEN": "${IOFFICE_TOKEN}",
9
+ "IOFFICE_USERNAME": "${IOFFICE_USERNAME}",
10
+ "IOFFICE_PASSWORD": "${IOFFICE_PASSWORD}"
11
+ }
12
+ }
13
+ }
14
+ }
package/SKILL.md ADDED
@@ -0,0 +1,201 @@
1
+ ---
2
+ name: ioffice-mcp
3
+ description: Access iOffice workspace and facility data via MCP. Use when the user asks about iOffice buildings, floors, spaces, reservations, visitors, maintenance requests, moves, or mail. Triggers on phrases like "book a room in iOffice", "check who's visiting today", "file a maintenance request", "log a package", "schedule a move", or any request involving workplace management in iOffice. Requires ioffice-mcp installed and the ioffice server registered (see Setup below).
4
+ ---
5
+
6
+ # ioffice-mcp
7
+
8
+ MCP server for iOffice — natural-language workspace and facility management via the iOffice API.
9
+
10
+ - **npm:** [npmjs.com/package/ioffice-mcp](https://www.npmjs.com/package/ioffice-mcp)
11
+ - **Source:** [github.com/chrischall/ioffice-mcp](https://github.com/chrischall/ioffice-mcp)
12
+
13
+ ## Setup
14
+
15
+ ### Option A — npx (recommended)
16
+
17
+ Add to `.mcp.json` in your project or `~/.claude/mcp.json`:
18
+
19
+ ```json
20
+ {
21
+ "mcpServers": {
22
+ "ioffice": {
23
+ "command": "npx",
24
+ "args": ["-y", "ioffice-mcp"],
25
+ "env": {
26
+ "IOFFICE_HOST": "your-tenant.ioffice.com",
27
+ "IOFFICE_TOKEN": "your-token-here"
28
+ }
29
+ }
30
+ }
31
+ }
32
+ ```
33
+
34
+ ### Option B — from source
35
+
36
+ ```bash
37
+ git clone https://github.com/chrischall/ioffice-mcp
38
+ cd ioffice-mcp
39
+ npm install && npm run build
40
+ ```
41
+
42
+ Then add to `.mcp.json`:
43
+
44
+ ```json
45
+ {
46
+ "mcpServers": {
47
+ "ioffice": {
48
+ "command": "node",
49
+ "args": ["/path/to/ioffice-mcp/dist/index.js"],
50
+ "env": {
51
+ "IOFFICE_HOST": "your-tenant.ioffice.com",
52
+ "IOFFICE_TOKEN": "your-token-here"
53
+ }
54
+ }
55
+ }
56
+ }
57
+ ```
58
+
59
+ Or use a `.env` file in the project directory with `IOFFICE_HOST` and `IOFFICE_TOKEN`.
60
+
61
+ ## Authentication
62
+
63
+ Token auth (preferred) — set `IOFFICE_TOKEN`. Alternatively, set `IOFFICE_USERNAME` + `IOFFICE_PASSWORD`. If both are present, the token takes precedence.
64
+
65
+ ## Tools
66
+
67
+ ### Buildings
68
+ | Tool | Description |
69
+ |------|-------------|
70
+ | `io_list_buildings` | List buildings with optional search, pagination, and sorting |
71
+ | `io_get_building(id)` | Get a single building by ID |
72
+ | `io_create_building(name, address1?, city?, ...)` | Create a new building |
73
+ | `io_update_building(id, ...)` | Update a building — only provide fields to change |
74
+ | `io_delete_building(id)` | Delete a building |
75
+
76
+ ### Floors
77
+ | Tool | Description |
78
+ |------|-------------|
79
+ | `io_list_floors(buildingId?)` | List floors, optionally filtered by building |
80
+ | `io_get_floor(id)` | Get a single floor by ID |
81
+ | `io_create_floor(name, buildingId, ...)` | Create a floor within a building |
82
+ | `io_update_floor(id, ...)` | Update a floor |
83
+ | `io_delete_floor(id)` | Delete a floor |
84
+
85
+ ### Spaces
86
+ | Tool | Description |
87
+ |------|-------------|
88
+ | `io_list_spaces(floorId?)` | List spaces/rooms, optionally filtered by floor |
89
+ | `io_get_space(id)` | Get a single space by ID |
90
+ | `io_create_space(name, floorId, capacity?, ...)` | Create a space on a floor |
91
+ | `io_update_space(id, ...)` | Update a space |
92
+ | `io_delete_space(id)` | Delete a space |
93
+
94
+ ### Users
95
+ | Tool | Description |
96
+ |------|-------------|
97
+ | `io_list_users(search?)` | List users with optional search |
98
+ | `io_get_user(id)` | Get a single user by ID |
99
+ | `io_create_user(firstName, lastName, email, ...)` | Create a new user |
100
+ | `io_update_user(id, ...)` | Update a user |
101
+ | `io_delete_user(id)` | Delete a user |
102
+
103
+ ### Reservations
104
+ | Tool | Description |
105
+ |------|-------------|
106
+ | `io_list_reservations(spaceId?, userId?, startDate?, endDate?)` | List reservations with optional filters |
107
+ | `io_get_reservation(id)` | Get a single reservation by ID |
108
+ | `io_create_reservation(title, spaceId, startDate, endDate, ...)` | Reserve a space |
109
+ | `io_update_reservation(id, ...)` | Update a reservation |
110
+ | `io_delete_reservation(id)` | Cancel/delete a reservation |
111
+ | `io_checkin_reservation(id)` | Check in to a reservation, confirming room usage |
112
+ | `io_checkout_reservation(id)` | Check out early, releasing the room |
113
+
114
+ ### Visitors
115
+ | Tool | Description |
116
+ |------|-------------|
117
+ | `io_list_visitors(buildingId?, startDate?, endDate?)` | List visitors with optional filters |
118
+ | `io_get_visitor(id)` | Get a single visitor record by ID |
119
+ | `io_create_visitor(firstName, lastName, hostId?, expectedArrival?, ...)` | Pre-register a visitor |
120
+ | `io_update_visitor(id, ...)` | Update a visitor record |
121
+ | `io_checkin_visitor(id)` | Check in a visitor upon arrival |
122
+ | `io_checkout_visitor(id)` | Check out a visitor upon departure |
123
+
124
+ ### Maintenance Requests
125
+ | Tool | Description |
126
+ |------|-------------|
127
+ | `io_list_maintenance_requests(status?, spaceId?, buildingId?)` | List maintenance requests |
128
+ | `io_get_maintenance_request(id)` | Get a single maintenance request |
129
+ | `io_create_maintenance_request(title, spaceId?, buildingId?, ...)` | File a new maintenance request |
130
+ | `io_update_maintenance_request(id, ...)` | Update a maintenance request |
131
+ | `io_accept_maintenance_request(id)` | Accept a pending request (pending → accepted) |
132
+ | `io_start_maintenance_request(id)` | Start work (accepted → in-progress) |
133
+ | `io_complete_maintenance_request(id, resolution?)` | Mark as complete |
134
+ | `io_archive_maintenance_request(id)` | Archive a completed request |
135
+
136
+ ### Moves
137
+ | Tool | Description |
138
+ |------|-------------|
139
+ | `io_list_moves(status?, buildingId?)` | List move requests |
140
+ | `io_get_move(id)` | Get a single move request |
141
+ | `io_create_move(name, fromSpaceId?, toSpaceId?, scheduledDate?, ...)` | Create a move request |
142
+ | `io_update_move(id, ...)` | Update a move request |
143
+ | `io_approve_move(id, notes?)` | Approve a move request |
144
+ | `io_cancel_move(id, reason?)` | Cancel a move request |
145
+
146
+ ### Mail
147
+ | Tool | Description |
148
+ |------|-------------|
149
+ | `io_list_mail(status?, recipientId?, buildingId?)` | List mail items (packages and letters) |
150
+ | `io_get_mail(id)` | Get a single mail item |
151
+ | `io_create_mail(recipientId, buildingId, carrier?, trackingNumber?, ...)` | Log a received mail item |
152
+ | `io_deliver_mail(id, deliveredDate?, signature?)` | Mark a mail item as delivered |
153
+ | `io_return_mail(id, reason?)` | Mark a mail item as returned to sender |
154
+
155
+ ## Workflows
156
+
157
+ **Book a meeting room:**
158
+ ```
159
+ io_list_buildings → find building ID
160
+ io_list_floors(buildingId) → find floor ID
161
+ io_list_spaces(floorId) → pick a room
162
+ io_create_reservation(title, spaceId, startDate, endDate)
163
+ ```
164
+
165
+ **Pre-register a visitor:**
166
+ ```
167
+ io_list_users(search: "host name") → find hostId
168
+ io_create_visitor(firstName, lastName, hostId, buildingId, expectedArrival)
169
+ io_checkin_visitor(id) → when they arrive
170
+ io_checkout_visitor(id) → when they leave
171
+ ```
172
+
173
+ **File and resolve a maintenance request:**
174
+ ```
175
+ io_list_spaces(search: "room name") → find spaceId
176
+ io_create_maintenance_request(title, spaceId, buildingId)
177
+ io_accept_maintenance_request(id)
178
+ io_start_maintenance_request(id)
179
+ io_complete_maintenance_request(id, resolution: "Fixed the issue")
180
+ ```
181
+
182
+ **Log and deliver a package:**
183
+ ```
184
+ io_list_users(search: "recipient name") → find recipientId
185
+ io_create_mail(recipientId, buildingId, carrier: "FedEx", trackingNumber: "...")
186
+ io_deliver_mail(id) → when delivered to recipient
187
+ ```
188
+
189
+ **Schedule and approve a move:**
190
+ ```
191
+ io_list_spaces → find fromSpaceId and toSpaceId
192
+ io_create_move(name, fromSpaceId, toSpaceId, scheduledDate)
193
+ io_approve_move(id, notes: "Approved")
194
+ ```
195
+
196
+ ## Notes
197
+
198
+ - All dates use ISO 8601 format (e.g. `2026-03-21T09:00:00`)
199
+ - All list tools support `search`, `limit` (default 50, max 100), `startAt`, `orderBy`, and `orderByType`
200
+ - `io_list_floors(buildingId)` and `io_list_spaces(floorId)` use nested API paths when an ID is provided
201
+ - Building → Floor → Space is the physical location hierarchy