UOFastMCP
Enterprise MCP server for U2 UniData/UniVerse — JWT auth, RBAC, audit logging, built-in admin UI to simplify the setup process.
Developer: RokiPark · License: MIT · Python: 3.11+
Install & Run
# 1. Create a folder and virtual environment
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
# 2. Install
pip install uofast-mcp
# 3. Set required env var
export JWT_SECRET_KEY=$(python -c "import secrets; print(secrets.token_hex(32))")
# Windows: set JWT_SECRET_KEY=<paste output of above>
# 4. Start
uofast-mcp
Server starts at http://localhost:8000
First-Time Setup
- Open http://localhost:8000/admin
- Log in:
admin/changeme123!
- Click Server Setup in the left menu
- Follow the 5-step wizard:
- Check prerequisites
- Set JWT secret + change admin password
- Configure your U2 connection (with live test)
- Review generated
.envandunidata_config.ini - Copy your Claude / VSCode / CLI connection config
Connect Claude
Important: UOFastMCP is an HTTP/SSE server — it must be connected to via URL, not launched as a subprocess command. Configuring it as a command (
"command": "uofast-mcp") will cause a port conflict if the server is already running.
Step 1 — Start the server
uofast-mcp
Keep this running in a terminal. The server must be running before any client connects.
Step 2 — Get your connection token
Open http://localhost:8000/auth/login, log in, and copy the Authorization token shown — or generate it manually:
python -c "import base64; print(base64.b64encode(b'admin:changeme123!').encode().decode())"
Step 3 — Register with your client
Claude Code CLI / VSCode extension
claude mcp add --transport sse UOFastMCP http://localhost:8000/sse \
--header "Authorization: Basic <your-base64-token>"
This writes the config automatically. To verify it was added:
claude mcp list
VSCode — manual config (.vscode/mcp.json or user settings.json)
{
"servers": {
"UOFastMCP": {
"type": "sse",
"url": "http://localhost:8000/sse",
"headers": {
"Authorization": "Basic <your-base64-token>"
}
}
}
}
Claude Desktop (claude_desktop_config.json)
{
"mcpServers": {
"UOFastMCP": {
"url": "http://localhost:8000/sse",
"headers": {
"Authorization": "Basic <your-base64-token>"
}
}
}
}
Troubleshooting: "port already in use" / "Error during MCP server startup"
This error means the client is trying to launch uofast-mcp as a subprocess instead of connecting to the running server.
Cause: The server is registered as "command": "uofast-mcp" in your MCP config instead of as a URL.
Fix: Remove the command-based entry and re-add it using the claude mcp add --transport sse command above. Then restart the server:
# Windows
taskkill /F /IM python.exe
uofast-mcp
# macOS / Linux
pkill -f uofast-mcp
uofast-mcp
MCP Tools (20 tools)
| Category | Tools |
|---|---|
| Connections | list_connections, add_connection, close_connection |
| Files & Records | list_files, select_records, read_record, query_file, read_record_with_fields, write_record_with_fields |
| Dictionary | get_dict_items, query_with_dict_fields, read_dict_item, write_dict_item, update_dict_item, delete_dict_item |
| Commands & BP | execute_command, read_bp_program, write_bp_program, compile_bp_program |
Roles
| Role | Access |
|---|---|
admin |
Everything |
developer |
Read/write records, DICT, BP + manage connections |
analyst |
Read records, DICT + execute commands |
readonly |
Read connections, files, records, DICT |
service_account |
Same as readonly — customisable |
Manage users and permissions at http://localhost:8000/admin.
Admin UI
http://localhost:8000/admin — login with admin credentials.
| Section | URL | Purpose |
|---|---|---|
| Users | /admin/user/list |
Create/edit users, assign roles |
| Roles / Permissions | /admin/role/list |
Manage RBAC |
| Audit Logs | /admin/auditlog/list |
Every tool call logged — read-only |
| UniData Connections | /admin/connections |
View unidata_config.ini, test connections live |
| Server Setup | /admin/setup |
Change password, JWT secret, U2 connection |
Environment Variables
| Variable | Required | Default | Description |
|---|---|---|---|
JWT_SECRET_KEY |
Yes | — | Long random string — keep secret |
INITIAL_ADMIN_PASSWORD |
No | changeme123! |
Admin password on first startup |
DATABASE_URL |
No | sqlite+aiosqlite:///./data/security.db |
Security DB location |
ENABLE_DOCS |
No | true |
Set false to hide /docs in production |
API Endpoints
| Endpoint | Auth | Description |
|---|---|---|
GET /health |
None | Health check |
GET /sse |
Basic | MCP SSE connection |
GET/POST /auth/login |
None | Login page — returns ready-to-use connection config |
POST /auth/provision |
Admin | Create user + return their connection command |
GET /admin |
Admin session | Web admin UI |
GET /admin/connections |
Admin session | View UniData connections from unidata_config.ini |
GET /admin/setup |
Admin session | Server setup wizard |
GET /docs |
None | Swagger UI |
Troubleshooting
Server won't start — JWT_SECRET_KEY not set, or port 8000 in use (uvicorn uofast_mcp.app:app --port 8001).
401 Unauthorized — get credentials from /auth/login.
403 Forbidden — user's role lacks the required permission; check Admin → Role Permissions.
U2 connection fails — re-run Server Setup wizard to update credentials and test live.
Reset everything — delete data/security.db and restart (loses all users and audit logs).
License
MIT — © 2025 RokiPark. All rights reserved.
Metadata
Release files for uofast-mcp 1.1.7
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| uofast_mcp-1.1.7.tar.gz | 66.0 kB | Without provenance | Details for uofast_mcp-1.1.7.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| uofast_mcp-1.1.7-py3-none-any.whl | Python 3 | none | any | Details for uofast_mcp-1.1.7-py3-none-any.whl |
Total release size: 141.0 kB
Release files / uofast_mcp-1.1.7.tar.gz
| Download URL | uofast_mcp-1.1.7.tar.gz |
|---|---|
| Size | 66.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
5d885a94d45b1d34ec9a5e2af13347dca7c0bcf45721f9016b41959ba6e9a1bf
|
|
BLAKE2b-256 checksum How to use checksums |
5df6a7d0c076fbade705e956443f0141e2a842aff67ceaf25b7f1a90508b2775
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.9
|
Release files / uofast_mcp-1.1.7-py3-none-any.whl
| Download URL | uofast_mcp-1.1.7-py3-none-any.whl |
|---|---|
| Size | 75.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
aeb6fb8541556ab0dcf3889ecd3c6a8727a2766ba6c96aab04b41d2023eadaf1
|
|
BLAKE2b-256 checksum How to use checksums |
8e2638381194fb8cbaf4f5a0a08d4ef8bd616363b71a9492288fd0254332a753
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.9
|
Security for uofast-mcp 1.1.7
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.