Skip to main content

MCP server wrapping UOF SOAP/ASMX services into AI Agent-callable workflow tools

Project description

MCP UOF

PyPI version Python versions License GitHub stars GitHub issues GitHub last commit MCP compatible

繁體中文

An open-source MCP (Model Context Protocol) server that wraps UOF (U-Office Force) SOAP/ASMX services into AI-callable tools for workflow automation.

Built for Claude Code, Claude Desktop, VS Code, and any MCP-compatible client. It lets AI agents query workflow forms, inspect form schemas, submit forms, track workflow progress, and close workflow tasks through natural language.

What This Does

  • 12 ready-to-use tools for UOF workflow operations, including authentication checks, form discovery, schema lookup, workflow preview, form submission, task status, task result, and task closure.
  • MCP server over stdio for local AI clients, plus an optional SSE server for HTTP integrations.
  • Tool-first interface: users call the same tools regardless of whether the implementation uses SOAP/PublicAPI or browser automation internally.
  • Single identity model: one server process represents one UOF account configured through environment variables.
  • SOAP and web support: SOAP is used where PublicAPI supports the operation; Playwright-backed web automation fills gaps such as form listing and selected custom form submission flows.

API Reference

This project targets UOF first-generation SOAP/ASMX services and selected web flows.

  • Authentication: UOF account/password encrypted with the configured RSA public key for SOAP token access; web flows reuse a browser session.
  • Base URL: configured with UOF_BASE_URL, for example https://your-uof-domain.com/VirtualPath.
  • Required UOF settings: see docs/configuration.md.

Quick Start

Install

pip install mcp-uof

Or use uvx:

uvx --from mcp-uof mcp-uof

For local development from source:

git clone https://github.com/asgard-ai-platform/mcp-uof.git
cd mcp-uof
uv sync
cp .env.example .env
uv run playwright install chromium

Set the required environment variables:

export UOF_BASE_URL=https://your-uof-domain.com/VirtualPath
export UOF_APP_NAME=your_app_name
export UOF_RSA_PUBLIC_KEY=your_rsa_public_key_base64
export UOF_ACCOUNT=your_account
export UOF_PASSWORD=your_password

Use with Claude Code

Add the server via the Claude CLI:

claude mcp add --transport stdio uof -- mcp-uof

Or with environment variables inline:

claude mcp add --transport stdio uof \
  -e UOF_BASE_URL=https://your-uof-domain.com/VirtualPath \
  -e UOF_APP_NAME=your_app_name \
  -e UOF_RSA_PUBLIC_KEY=your_rsa_public_key_base64 \
  -e UOF_ACCOUNT=your_account \
  -e UOF_PASSWORD=your_password \
  -- mcp-uof

If you clone the repo locally, run it through uv:

claude mcp add --transport stdio uof -- uv --directory /absolute/path/to/mcp-uof run mcp-uof

Use with Claude Desktop

Add to your claude_desktop_config.json:

{
  "mcpServers": {
    "uof": {
      "command": "mcp-uof",
      "env": {
        "UOF_BASE_URL": "https://your-uof-domain.com/VirtualPath",
        "UOF_APP_NAME": "your_app_name",
        "UOF_RSA_PUBLIC_KEY": "your_rsa_public_key_base64",
        "UOF_ACCOUNT": "your_account",
        "UOF_PASSWORD": "your_password"
      }
    }
  }
}

Or with a local checkout:

{
  "mcpServers": {
    "uof": {
      "command": "uv",
      "args": ["--directory", "/absolute/path/to/mcp-uof", "run", "mcp-uof"],
      "env": {
        "UOF_BASE_URL": "https://your-uof-domain.com/VirtualPath",
        "UOF_APP_NAME": "your_app_name",
        "UOF_RSA_PUBLIC_KEY": "your_rsa_public_key_base64",
        "UOF_ACCOUNT": "your_account",
        "UOF_PASSWORD": "your_password"
      }
    }
  }
}

See docs/integration.md and examples/ for more client configuration examples.

Tools (12)

All tool names use the uof_custom_ prefix.

Domain Tools
System check_auth
WKF Workflow get_form_list, get_external_form_list, query_forms, get_form_structure, get_form_structure_by_id, preview_workflow, apply_form, get_task_data, get_task_result, terminate_task, sign_next

Important behavior and constraints:

  • UOF first-generation PublicAPI does not provide an inbox or pending-task list API. Users must provide a TaskId from the UOF UI or notification email.
  • UOF does not provide a general per-step approval API. Single-step free-flow approvals can be represented through terminate_task with Adopt or Reject when used by the current signer.
  • terminate_task can overwrite already-closed results at the API layer; this server checks task status first and blocks repeated closure.
  • Some form submissions use web automation when SOAP intermediary fields cannot represent the full form body.

See docs/tools.md for full tool specs, role model, examples, and operational boundaries.

Project Structure

mcp-uof/
├── src/mcp_uof/                 # MCP server, auth, routing, SOAP/web backends
├── docs/                        # Architecture, configuration, integration, tools, testing
├── examples/                    # Claude Desktop and VS Code MCP config examples
├── scripts/                     # RSA key and WSDL helper scripts
├── tests/                       # smoke / e2e / mounted test layers
├── .env.example                 # Environment variable template
├── README.zh-TW.md              # Traditional Chinese README
└── pyproject.toml

Development

uv sync
uv run python tests/run.py smoke
uv run python -m compileall src tests

Tests that connect to a real UOF test environment require .env:

uv run python tests/run.py e2e
uv run python tests/run.py mounted

See CONTRIBUTING.md and docs/testing.md for development and testing guidelines.

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mcp_uof-0.1.0.tar.gz (219.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mcp_uof-0.1.0-py3-none-any.whl (78.2 kB view details)

Uploaded Python 3

File details

Details for the file mcp_uof-0.1.0.tar.gz.

File metadata

  • Download URL: mcp_uof-0.1.0.tar.gz
  • Upload date:
  • Size: 219.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for mcp_uof-0.1.0.tar.gz
Algorithm Hash digest
SHA256 e319ef9542e9a2cbda56b9d35c116b3530df0e79a19f087ed0e5c1467fba1787
MD5 b022726aabd03b318228ce118b62003a
BLAKE2b-256 2b31248a00fefec51a8df856e947d26bd668315074fdc6a8c00c04f0b72f0053

See more details on using hashes here.

Provenance

The following attestation bundles were made for mcp_uof-0.1.0.tar.gz:

Publisher: publish.yml on asgard-ai-platform/mcp-uof

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mcp_uof-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: mcp_uof-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 78.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for mcp_uof-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6a881d5d996cb1f504b3f2f1217f5eb06f5c07219935b3b70699e346891ef219
MD5 59b6932e1ab09dffdf8d296aca8e32eb
BLAKE2b-256 3a2de930f9a092988b58e3f1007aeed928a15affb1943322b4efd7812ddd2fc5

See more details on using hashes here.

Provenance

The following attestation bundles were made for mcp_uof-0.1.0-py3-none-any.whl:

Publisher: publish.yml on asgard-ai-platform/mcp-uof

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page