@uteamup/mcp-server 1.0.0-beta.9 → 2.4.0-beta.9

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/README.md CHANGED
@@ -1,3 +1,7 @@
1
+ <p align="center">
2
+ <img src="assets/logo.svg" alt="UteamUP Logo" width="88" />
3
+ </p>
4
+
1
5
  # @uteamup/mcp-server
2
6
 
3
7
  > MCP server client for UteamUP - enables Claude Desktop/Code integration with automatic OAuth 2.0 authentication
@@ -9,21 +13,73 @@
9
13
  ## Links
10
14
 
11
15
  - **📦 [npm Package](https://www.npmjs.com/package/@uteamup/mcp-server)** - Install with `npx -y @uteamup/mcp-server`
12
- - **📖 [Documentation](https://docs.uteamup.com/mcp)** - Full MCP integration guide
13
- - **🐛 [Issues](https://github.com/uteamup/mcp-server/issues)** - Report bugs and request features
14
- - **💬 [Support](mailto:support@uteamup.com)** - Get help
16
+ - **📖 [Documentation](https://github.com/UteamUP/uteamup-mcp#readme)** - Full MCP integration guide
17
+ - **🐛 [Issues](https://github.com/UteamUP/uteamup-mcp/issues)** - Report bugs and request features
18
+ - **💬 [Support](mailto:gisli@uteamup.com)** - Get help
15
19
 
16
20
  ## What is this?
17
21
 
18
22
  This package enables AI assistants like Claude Desktop and Claude Code to connect to your UteamUP CMMS system using the Model Context Protocol (MCP). It handles OAuth 2.0 authentication automatically, so you can manage work orders, assets, inventory, and more through natural conversation.
19
23
 
24
+ ### Read-only access for Claude, Grok, Grok Bot and ChatGPT
25
+
26
+ Use the production HTTPS endpoint:
27
+
28
+ | Environment | MCP server URL |
29
+ |---|---|
30
+ | Production | `https://api.uteamup.com/mcp/read-only` |
31
+
32
+ **Sign in with your UteamUP account (recommended).** A tenant administrator (`Tenant.Update`)
33
+ first turns on **Allow members to connect AI assistants** in the company's **API Keys** tab.
34
+ Then each member connects their own assistant; no API key or secret is involved:
35
+
36
+ - **Grok:** open [Connectors](https://grok.com/connectors), choose **New Connector → Custom**,
37
+ and enter the endpoint. Grok registers itself (RFC 7591), sends you to the UteamUP consent
38
+ page, and you pick the company and allow access. Business/Enterprise workspaces require
39
+ their administrator to provision the connector.
40
+ - **Grok Bot:** add a **Custom MCP server, Remote HTTPS** with the endpoint on the Bot's
41
+ Setup → Plugins card; each teammate signs in the first time they use it.
42
+ - **ChatGPT:** add a custom MCP server with the endpoint and choose OAuth; ChatGPT registers
43
+ itself and you approve on the same consent page.
44
+ - **Claude:** add a custom connector with the endpoint, choose **Sign in now** and
45
+ **Register automatically**, then approve on the UteamUP consent page.
46
+
47
+ The assistant uses the member's own permissions in the chosen company, and only the read
48
+ tools below. Access tokens last 60 minutes and refresh tokens rotate on every use. A member
49
+ disconnects under **Profile → Accounts**; an administrator sees and revokes every link in the
50
+ API Keys tab, or with the `uteamup_assistant_connection_list` /
51
+ `uteamup_assistant_connection_revoke` MCP tools. Turning the company setting off stops all
52
+ links immediately.
53
+
54
+ **Tenant API key (service integrations).** The **API Keys → Set up UPMate Integration** wizard
55
+ still offers the **Private read-only pilot for ChatGPT and Grok**: select an active role whose
56
+ grants are exclusively `View`/`Read` and create a separate MCP-enabled key per assistant. In
57
+ ChatGPT, configure OAuth with predefined client credentials (the API key as **Client ID**, its
58
+ secret as **Client Secret**). Grok only supports sign-in, so use the option above for Grok.
59
+ Tenant administrators retain the normal key quotas, expiration, IP restrictions, rate
60
+ limits, rotation, and revocation controls.
61
+
62
+ Only the existing asset list, asset search, asset-by-GUID, work-order list and work-order
63
+ search tools are advertised. Current UPMate capability settings, role permissions and
64
+ tenant scope are checked before discovery and invocation. Guessed write/admin tool calls
65
+ are denied before execution. The read-only endpoint also rejects a key if its persisted
66
+ role gains a write or wildcard permission, or if the key is revoked, expired or rotated.
67
+ These reads do not invoke a UteamUP AI provider or spend UteamUP AI credits.
68
+
69
+ The Node proxy can use the same endpoint with `UTEAMUP_MCP_PATH=/mcp/read-only`.
70
+ Its default `/mcp` transport retains the existing behavior and role-based authorization.
71
+ The CLI continues to use existing API-key creation, role selection and revocation commands;
72
+ no separate credential store or tool implementation is required.
73
+
74
+ References: [OpenAI custom MCP servers](https://developers.openai.com/api/docs/guides/custom-mcp-server)
75
+ and [Grok connectors](https://docs.x.ai/grok/connectors).
76
+
20
77
  **Key Features:**
21
78
  - ✅ Automatic OAuth 2.0 + PKCE authentication
22
- - ✅ Token caching (7-day expiration, auto-refresh)
79
+ - ✅ Token caching with automatic refresh
23
80
  - ✅ Works with Claude Desktop, Claude Code, and any MCP-compatible client
24
81
  - ✅ Zero configuration - just provide API credentials
25
82
  - ✅ Comprehensive error messages
26
- - ✅ Development mode support (self-signed certificates)
27
83
  - ✅ Server-Sent Events (SSE) response parsing
28
84
  - ✅ Proper JSON-RPC 2.0 notification handling
29
85
  - ✅ **NEW:** Structured logging with Pino (JSON/text formats)
@@ -31,9 +87,10 @@ This package enables AI assistants like Claude Desktop and Claude Code to connec
31
87
  - ✅ **NEW:** Performance monitoring and metrics
32
88
  - ✅ **NEW:** Retry logic with exponential backoff
33
89
  - ✅ **NEW:** CLI utilities (--help, --version, --validate-config, --test-auth)
34
- - ✅ **NEW:** Comprehensive test suite (70 tests)
90
+ - ✅ Comprehensive test suite
35
91
 
36
- **Current Status:** `v1.0.0-beta.7` - Production-ready with enhanced debugging! See [CHANGELOG.md](CHANGELOG.md) for details.
92
+ **Release status:** Beta. The npm badge above shows the published version;
93
+ see [CHANGELOG.md](CHANGELOG.md) for release details.
37
94
 
38
95
  **Example Conversation:**
39
96
  ```
@@ -60,6 +117,22 @@ Or install globally:
60
117
  npm install -g @uteamup/mcp-server
61
118
  ```
62
119
 
120
+ ### Install via CLI Plugin Marketplaces
121
+
122
+ - **Claude Code:**
123
+ ```bash
124
+ claude plugin marketplace add UteamUP/uteamup-mcp
125
+ claude plugin install uteamup@uteamup
126
+ ```
127
+ - **Grok Build:**
128
+ ```bash
129
+ grok plugin install https://github.com/UteamUP/uteamup-mcp.git --trust
130
+ ```
131
+ - **Gemini CLI:**
132
+ ```bash
133
+ gemini extensions install https://github.com/UteamUP/uteamup-mcp
134
+ ```
135
+
63
136
  ---
64
137
 
65
138
  ## Quick Start
@@ -75,8 +148,11 @@ npm install -g @uteamup/mcp-server
75
148
 
76
149
  ### 2. Configure Claude Desktop
77
150
 
78
- **macOS/Linux:** Edit `~/.config/claude/mcp.json`
79
- **Windows:** Edit `%APPDATA%\Claude\mcp.json`
151
+ In Claude Desktop, open **Settings → Developer → Edit Config**.
152
+ The configuration file is located at:
153
+
154
+ - **macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json`
155
+ - **Windows:** `%APPDATA%\Claude\claude_desktop_config.json`
80
156
 
81
157
  Add this configuration:
82
158
 
@@ -95,22 +171,8 @@ Add this configuration:
95
171
  }
96
172
  ```
97
173
 
98
- **Optional:** For development/testing against a local backend:
99
- ```json
100
- {
101
- "mcpServers": {
102
- "uteamup-dev": {
103
- "command": "npx",
104
- "args": ["-y", "@uteamup/mcp-server"],
105
- "env": {
106
- "UTEAMUP_API_KEY": "your-api-key",
107
- "UTEAMUP_SECRET": "your-secret",
108
- "UTEAMUP_API_BASE_URL": "https://devback.uteamup.com"
109
- }
110
- }
111
- }
112
- }
113
- ```
174
+ All UteamUP MCP connections use `https://api.uteamup.com`. Use a restricted key
175
+ from a demo workspace when validating an integration.
114
176
 
115
177
  ### 3. Restart Claude Desktop
116
178
 
@@ -150,16 +212,19 @@ That's it! 🎉
150
212
  | `UTEAMUP_DEBUG` | Legacy debug mode (`1` or `true`) | `false` |
151
213
  | `UTEAMUP_REQUEST_TIMEOUT` | Request timeout in milliseconds | `30000` |
152
214
  | `UTEAMUP_MAX_RETRIES` | Max retry attempts for network errors | `3` |
215
+ | `UTEAMUP_MAX_REQUEST_BYTES` | Maximum bytes in one JSON-RPC request | `1048576` |
216
+ | `UTEAMUP_MAX_RESPONSE_BYTES` | Maximum bytes buffered from one backend response | `10485760` |
153
217
  | `UTEAMUP_TOKEN_CACHE_DIR` | Persistent token cache directory | - |
154
218
  | `UTEAMUP_TOKEN_REFRESH_MARGIN` | Token refresh margin in seconds | `300` |
155
219
 
156
- ### API Base URLs
220
+ ### API Base URL
221
+
222
+ The configured base URL must be a bare HTTPS origin. Credentials, paths, query
223
+ parameters, fragments, and plain HTTP endpoints are rejected.
157
224
 
158
- | Environment | URL | When to Use |
159
- |-------------|-----|-------------|
160
- | **Production** | `https://api.uteamup.com` | Default - for normal use |
161
- | **Development** | `https://devback.uteamup.com` | Testing against dev backend |
162
- | **Local** | `https://localhost:5002` | Local development with self-signed cert |
225
+ Always use `https://api.uteamup.com`, including when running the Node proxy
226
+ locally. The full MCP endpoint is `/mcp`; the read-only endpoint is
227
+ `/mcp/read-only`.
163
228
 
164
229
  ### Permissions
165
230
 
@@ -183,7 +248,7 @@ Your AI assistant's permissions are controlled by the **role assigned to your AP
183
248
  **Cause:** `UTEAMUP_API_KEY` or `UTEAMUP_SECRET` not set in MCP configuration.
184
249
 
185
250
  **Solution:**
186
- 1. Check your MCP configuration file (`~/.config/claude/mcp.json` or `%APPDATA%\Claude\mcp.json`)
251
+ 1. Check your Claude Desktop configuration file (`~/Library/Application Support/Claude/claude_desktop_config.json` on macOS or `%APPDATA%\Claude\claude_desktop_config.json` on Windows)
187
252
  2. Verify the `env` section includes both `UTEAMUP_API_KEY` and `UTEAMUP_SECRET`
188
253
  3. Ensure there are no typos in the environment variable names
189
254
  4. Restart Claude Desktop after making changes
@@ -232,36 +297,32 @@ Your AI assistant's permissions are controlled by the **role assigned to your AP
232
297
  1. **Check your internet connection**
233
298
  2. **Verify the base URL:**
234
299
  - Production: `https://api.uteamup.com` (default, no env var needed)
235
- - Development: Set `UTEAMUP_API_BASE_URL=https://devback.uteamup.com`
236
300
  3. **Check if UteamUP is down:**
237
- - Contact support@uteamup.com
238
- 4. **For local development:**
239
- - Ensure backend is running: `cd UteamUP_Backend/UteamUP_API && make watch`
240
- - Use `UTEAMUP_API_BASE_URL=https://localhost:5002`
301
+ - Contact gisli@uteamup.com
241
302
 
242
303
  ---
243
304
 
244
305
  #### "UNABLE_TO_VERIFY_LEAF_SIGNATURE" or certificate errors
245
306
 
246
- **Cause:** Self-signed certificate (development mode).
307
+ **Cause:** The connection cannot validate the server's TLS certificate.
247
308
 
248
- **Solution:** This package automatically accepts self-signed certificates for development. If you're seeing this error:
249
- 1. Verify `UTEAMUP_API_BASE_URL` is set correctly
250
- 2. If using local backend, ensure it's running on HTTPS
251
- 3. For production, this should never happen - contact support
309
+ **Solution:**
310
+ 1. Verify the API base URL is `https://api.uteamup.com`
311
+ 2. Check the device's date and trusted certificate configuration
312
+ 3. Contact gisli@uteamup.com if the certificate error persists
252
313
 
253
314
  ---
254
315
 
255
316
  #### Tools list is empty or incomplete
256
317
 
257
- **Cause:** API key role has limited permissions.
318
+ **Cause:** The credential, role, or company configuration does not grant the requested tools.
258
319
 
259
320
  **Solution:**
260
321
  1. Go to **Tenant Settings** → **API Keys** in UteamUP
261
- 2. Edit your API key
262
- 3. Change the role to one with more permissions (e.g., Admin or Supervisor)
263
- 4. Available tools depend on your role's permissions
264
- 5. Changes take effect immediately
322
+ 2. Confirm the key is active and MCP-enabled for the intended company
323
+ 3. Ask a company administrator to check the specific read permissions needed for your workflow
324
+ 4. For the remote read-only connector, use a restricted read-only role; write or wildcard grants are not eligible
325
+ 5. Reconnect the client to refresh its tool list after an authorized permission change
265
326
 
266
327
  ---
267
328
 
@@ -325,9 +386,9 @@ Enable different log levels and formats:
325
386
  ```
326
387
 
327
388
  4. **Get help:**
328
- - Email: support@uteamup.com
329
- - Documentation: https://docs.uteamup.com/mcp
330
- - GitHub Issues: https://github.com/uteamup/mcp-server/issues
389
+ - Email: gisli@uteamup.com
390
+ - Documentation: https://github.com/UteamUP/uteamup-mcp#readme
391
+ - GitHub Issues: https://github.com/UteamUP/uteamup-mcp/issues
331
392
 
332
393
  ---
333
394
 
@@ -337,20 +398,20 @@ Enable different log levels and formats:
337
398
 
338
399
  ```bash
339
400
  # Clone the repository
340
- git clone https://github.com/UteamUP/uteamup-mcp-proxy.git
341
- cd uteamup-mcp-proxy
401
+ git clone https://github.com/UteamUP/uteamup-mcp.git
402
+ cd uteamup-mcp
342
403
 
343
404
  # Install dependencies
344
405
  npm install
345
406
 
346
- # Run tests
347
- npm test
407
+ # Run tests only at the final whole-goal gate (see MCPGuidelines.md)
408
+ UTEAMUP_FINAL_GOAL_GATE=1 npm test
348
409
 
349
410
  # Test with debug logging
350
411
  export UTEAMUP_LOG_LEVEL=DEBUG
351
- export UTEAMUP_API_KEY="your-dev-key"
352
- export UTEAMUP_SECRET="your-dev-secret"
353
- export UTEAMUP_API_BASE_URL="https://localhost:5002"
412
+ export UTEAMUP_API_KEY="your-demo-workspace-key"
413
+ export UTEAMUP_SECRET="your-demo-workspace-secret"
414
+ export UTEAMUP_API_BASE_URL="https://api.uteamup.com"
354
415
  node index.js
355
416
 
356
417
  # CLI Utilities
@@ -374,7 +435,7 @@ npm link
374
435
  "mcpServers": {
375
436
  "uteamup-local": {
376
437
  "command": "node",
377
- "args": ["/absolute/path/to/uteamup-mcp-proxy/index.js"],
438
+ "args": ["/absolute/path/to/uteamup-mcp/index.js"],
378
439
  "env": {
379
440
  "UTEAMUP_API_KEY": "your-key",
380
441
  "UTEAMUP_SECRET": "your-secret",
@@ -388,7 +449,7 @@ npm link
388
449
  ### Project Structure
389
450
 
390
451
  ```
391
- uteamup-mcp-proxy/
452
+ uteamup-mcp/
392
453
  ├── index.js # Main entry point (OAuth + MCP client)
393
454
  ├── package.json # Package metadata
394
455
  ├── README.md # This file
@@ -473,9 +534,9 @@ See [LICENSE](LICENSE) for details.
473
534
 
474
535
  ## Support
475
536
 
476
- - **Documentation:** https://docs.uteamup.com/mcp
477
- - **Email:** support@uteamup.com
478
- - **Issues:** https://github.com/uteamup/mcp-server/issues
537
+ - **Documentation:** https://github.com/UteamUP/uteamup-mcp#readme
538
+ - **Email:** gisli@uteamup.com
539
+ - **Issues:** https://github.com/UteamUP/uteamup-mcp/issues
479
540
 
480
541
  ---
481
542
 
Binary file
@@ -0,0 +1,11 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512" fill="none" role="img" aria-label="UteamUP">
2
+ <path d="M372.26,86.67 L372.26,188.95 L255.84,121.72 L255.84,32.00 C268.46,32.00 281.07,34.91 292.65,40.71 L292.66,40.72 Z" fill="#FAA61A"/>
3
+ <path d="M255.84,32.00 L255.84,121.72 L139.40,188.95 L139.40,86.67 L219.07,40.68 C230.63,34.90 243.23,32.00 255.84,32.00 Z" fill="#F37021"/>
4
+ <path d="M461.16,137.59 L460.82,279.69 L460.70,331.35 L460.70,331.37 L460.70,331.39 C459.99,344.51 456.15,357.07 449.74,368.13 C449.74,368.13 449.74,368.14 449.73,368.14 L372.25,323.40 L372.03,323.28 L372.26,188.95 L460.82,137.78 Z" fill="#184795"/>
5
+ <path d="M139.40,188.95 L139.40,323.39 L61.92,368.13 C54.78,355.81 50.84,341.64 50.84,326.91 L50.84,137.82 Z" fill="#198F45"/>
6
+ <path d="M449.74,368.13 C449.74,368.13 449.74,368.14 449.73,368.14 C442.64,380.36 432.40,390.77 419.74,398.07 L296.91,468.99 C284.20,476.32 270.02,480.00 255.84,480.00 L255.84,390.61 L372.25,323.40 L372.26,323.39 Z" fill="#28327A"/>
7
+ <path d="M255.84,390.61 L255.84,480.00 C241.64,480.00 227.46,476.32 214.75,468.98 L91.92,398.07 C79.25,390.76 69.02,380.36 61.92,368.13 L139.40,323.39 Z" fill="#176334"/>
8
+ <path d="M255.84,256.17 L255.84,390.61 L139.40,323.39 L139.40,188.95 Z" fill="#1BAE4B"/>
9
+ <path d="M372.26,188.95 L372.26,323.39 L255.84,390.61 L255.84,256.16 Z" fill="#1A6CB5"/>
10
+ <path d="M372.26,188.95 L255.84,256.16 L255.84,256.17 L139.40,188.95 L255.84,121.72 Z" fill="#F9ED24"/>
11
+ </svg>