@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/CHANGELOG.md +631 -0
- package/README.md +77 -0
- package/assets/logo.png +0 -0
- package/assets/logo.svg +11 -0
- package/index.js +424 -203
- package/lib/config.js +60 -5
- package/lib/logger.js +54 -2
- package/lib/mcp-http-headers.js +87 -0
- package/lib/retry.js +12 -3
- package/lib/transport-security.js +252 -0
- package/openapi-actions.json +234 -0
- package/package.json +27 -13
- package/server.json +77 -0
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 |
|
package/assets/logo.png
ADDED
|
Binary file
|
package/assets/logo.svg
ADDED
|
@@ -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>
|