@uteamup/mcp-server 1.0.0-beta.9 → 2.3.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
@@ -17,6 +21,58 @@
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 Grok, Grok Bot and ChatGPT
25
+
26
+ Use the environment-specific HTTPS endpoint:
27
+
28
+ | Environment | MCP server URL |
29
+ |---|---|
30
+ | Production | `https://api.uteamup.com/mcp/read-only` |
31
+ | Development | `https://devback.uteamup.com/mcp/read-only` |
32
+
33
+ **Sign in with your UteamUP account (recommended).** A tenant administrator (`Tenant.Update`)
34
+ first turns on **Allow members to connect AI assistants** in the company's **API Keys** tab.
35
+ Then each member connects their own assistant; no API key or secret is involved:
36
+
37
+ - **Grok:** open [Connectors](https://grok.com/connectors), choose **New Connector → Custom**,
38
+ and enter the endpoint. Grok registers itself (RFC 7591), sends you to the UteamUP consent
39
+ page, and you pick the company and allow access. Business/Enterprise workspaces require
40
+ their administrator to provision the connector.
41
+ - **Grok Bot:** add a **Custom MCP server, Remote HTTPS** with the endpoint on the Bot's
42
+ Setup → Plugins card; each teammate signs in the first time they use it.
43
+ - **ChatGPT:** add a custom MCP server with the endpoint and choose OAuth; ChatGPT registers
44
+ itself and you approve on the same consent page.
45
+
46
+ The assistant uses the member's own permissions in the chosen company, and only the read
47
+ tools below. Access tokens last 60 minutes and refresh tokens rotate on every use. A member
48
+ disconnects under **Profile → Accounts**; an administrator sees and revokes every link in the
49
+ API Keys tab, or with the `uteamup_assistant_connection_list` /
50
+ `uteamup_assistant_connection_revoke` MCP tools. Turning the company setting off stops all
51
+ links immediately.
52
+
53
+ **Tenant API key (service integrations).** The **API Keys → Set up UPMate Integration** wizard
54
+ still offers the **Private read-only pilot for ChatGPT and Grok**: select an active role whose
55
+ grants are exclusively `View`/`Read` and create a separate MCP-enabled key per assistant. In
56
+ ChatGPT, configure OAuth with predefined client credentials (the API key as **Client ID**, its
57
+ secret as **Client Secret**). Grok only supports sign-in, so use the option above for Grok.
58
+ Tenant administrators retain the normal key quotas, expiration, IP restrictions, rate
59
+ limits, rotation, and revocation controls.
60
+
61
+ Only the existing asset list, asset search, asset-by-GUID, work-order list and work-order
62
+ search tools are advertised. Current UPMate capability settings, role permissions and
63
+ tenant scope are checked before discovery and invocation. Guessed write/admin tool calls
64
+ are denied before execution. The read-only endpoint also rejects a key if its persisted
65
+ role gains a write or wildcard permission, or if the key is revoked, expired or rotated.
66
+ These reads do not invoke a UteamUP AI provider or spend UteamUP AI credits.
67
+
68
+ The Node proxy can use the same endpoint with `UTEAMUP_MCP_PATH=/mcp/read-only`.
69
+ Its default `/mcp` transport retains the existing behavior and role-based authorization.
70
+ The CLI continues to use existing API-key creation, role selection and revocation commands;
71
+ no separate credential store or tool implementation is required.
72
+
73
+ References: [OpenAI custom MCP servers](https://developers.openai.com/api/docs/guides/custom-mcp-server)
74
+ and [Grok connectors](https://docs.x.ai/grok/connectors).
75
+
20
76
  **Key Features:**
21
77
  - ✅ Automatic OAuth 2.0 + PKCE authentication
22
78
  - ✅ Token caching (7-day expiration, auto-refresh)
@@ -60,6 +116,22 @@ Or install globally:
60
116
  npm install -g @uteamup/mcp-server
61
117
  ```
62
118
 
119
+ ### Install via CLI Plugin Marketplaces
120
+
121
+ - **Claude Code:**
122
+ ```bash
123
+ claude plugin marketplace add UteamUP/uteamup-mcp
124
+ claude plugin install uteamup@uteamup
125
+ ```
126
+ - **Grok Build:**
127
+ ```bash
128
+ grok plugin install https://github.com/UteamUP/uteamup-mcp.git --trust
129
+ ```
130
+ - **Gemini CLI:**
131
+ ```bash
132
+ gemini extensions install https://github.com/UteamUP/uteamup-mcp
133
+ ```
134
+
63
135
  ---
64
136
 
65
137
  ## Quick Start
@@ -150,11 +222,16 @@ That's it! 🎉
150
222
  | `UTEAMUP_DEBUG` | Legacy debug mode (`1` or `true`) | `false` |
151
223
  | `UTEAMUP_REQUEST_TIMEOUT` | Request timeout in milliseconds | `30000` |
152
224
  | `UTEAMUP_MAX_RETRIES` | Max retry attempts for network errors | `3` |
225
+ | `UTEAMUP_MAX_REQUEST_BYTES` | Maximum bytes in one JSON-RPC request | `1048576` |
226
+ | `UTEAMUP_MAX_RESPONSE_BYTES` | Maximum bytes buffered from one backend response | `10485760` |
153
227
  | `UTEAMUP_TOKEN_CACHE_DIR` | Persistent token cache directory | - |
154
228
  | `UTEAMUP_TOKEN_REFRESH_MARGIN` | Token refresh margin in seconds | `300` |
155
229
 
156
230
  ### API Base URLs
157
231
 
232
+ The configured base URL must be a bare HTTPS origin. Credentials, paths, query
233
+ parameters, fragments, and plain HTTP endpoints are rejected.
234
+
158
235
  | Environment | URL | When to Use |
159
236
  |-------------|-----|-------------|
160
237
  | **Production** | `https://api.uteamup.com` | Default - for normal use |
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>