Skip to main content

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

  1. Open http://localhost:8000/admin
  2. Log in: admin / changeme123!

Admin login

  1. Click Server Setup in the left menu

Admin menu

  1. Follow the 5-step wizard:
    • Check prerequisites
    • Set JWT secret + change admin password
    • Configure your U2 connection (with live test)
    • Review generated .env and unidata_config.ini
    • Copy your Claude / VSCode / CLI connection config

Setup wizard — U2 connection step


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)

Source distribution for uofast-mcp 1.1.7
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)

Table of built distributions (wheels) for uofast-mcp 1.1.7
File Interpreter ABI Platform Actions
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.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page