Yggdrasil
MCP ServersMCP 伺服器 SKILLs技能 PlugIns解決方案 Asgard AI SolutionAsgard AI 方案 Submit Listing申請上架 GitHub
U

UOF X × AI Agent 整合示範 UOF X × AI Agent 整合示範

Released已發布
data global

UOF X 是一套企業 ERP,提供 99 個 API。這個專案展示:把這些 API 接上 AI Agent,員工能用自然語言完成哪些工作?

UOF X Total Solution 的 Model Context Protocol 伺服器。它將精選 UOF X API 包裝成 AI 可呼叫的工具,涵蓋 BPM、組織查詢、代理人設定、打卡紀錄、DMS 搜尋、ISO 文件、通知與問卷。

Status狀態
released
Category分類
data
Region地區
global
Maintainer維護者
GitHub

Features功能特色

  • 23 MCP tools covering workflow, organization, document, notification, questionnaire, and attendance use cases
  • API key and OAuth modes for service-level and user-level integrations
  • stdio and SSE transports for local MCP clients and HTTP-based integrations
  • Public-safe configuration through environment variables and .env.example
  • 23 個 MCP 工具,涵蓋流程、組織、文件、通知、問卷與出勤情境
  • API Key 與 OAuth 兩種模式,支援服務層級與使用者層級整合
  • stdio 與 SSE 傳輸模式,可用於本機 MCP client 與 HTTP 型整合
  • Public-safe 設定方式,透過環境變數與 .env.example 管理設定

Quick Start快速開始

Install

pip install mcp-uofx

For local development:

git clone https://github.com/asgard-ai-platform/mcp-uofx.git
cd mcp-uofx
uv sync

Configure

cp .env.example .env
# Edit .env with your UOF X credentials and service URL

Environment variables:

Variable Description
UOFX_BASE_URL Base URL of your UOF X instance
UOFX_API_KEY API key for API key mode
UOFX_CORP_CODE Company code sent with API key requests
UOFX_DEV_MODE true uses API key mode; false uses OAuth credentials when available
UOFX_VERIFY_SSL true enables strict SSL verification
OAUTH_CLIENT_ID OAuth client ID for OAuth mode
OAUTH_CLIENT_SECRET OAuth client secret for OAuth mode
MCP_SSE_HOST Host for the SSE server
MCP_SSE_PORT Port for the SSE server

See docs/configuration.md for details.

Run

Stdio mode:

uv run mcp-uofx

SSE mode:

uv run mcp-uofx-sse

OAuth login helper:

uv run mcp-uofx-login
uv run mcp-uofx-login --status
uv run mcp-uofx-login --logout

Use with Claude Desktop

Example configuration:

{
  "mcpServers": {
    "uofx": {
      "command": "uv",
      "args": ["run", "mcp-uofx"],
      "cwd": "/path/to/mcp-uofx"
    }
  }
}

More examples are available in examples/.

Use with Claude Code

After installing the package and configuring environment variables, add the stdio MCP server:

claude mcp add uofx -- mcp-uofx

For a local checkout, run it through uv from the repository directory:

claude mcp add uofx -- uv --directory /path/to/mcp-uofx run mcp-uofx

Clone 並安裝

git clone https://github.com/asgard-ai-platform/mcp-uofx.git
cd mcp-uofx
uv sync

設定

cp .env.example .env
# 編輯 .env,填入你的 UOF X 憑證與服務網址

環境變數:

變數 說明
UOFX_BASE_URL UOF X instance 的 base URL
UOFX_API_KEY API Key 模式使用的 API key
UOFX_CORP_CODE API Key request 使用的公司代碼
UOFX_DEV_MODE true 使用 API Key 模式;false 則在可用時使用 OAuth credentials
UOFX_VERIFY_SSL true 啟用嚴格 SSL 驗證
OAUTH_CLIENT_ID OAuth 模式使用的 client ID
OAUTH_CLIENT_SECRET OAuth 模式使用的 client secret
MCP_SSE_HOST SSE server host
MCP_SSE_PORT SSE server port

詳細設定請參考 docs/configuration.md

執行

Stdio 模式:

uv run mcp-uofx

SSE 模式:

uv run mcp-uofx-sse

OAuth 登入工具:

uv run mcp-uofx-login
uv run mcp-uofx-login --status
uv run mcp-uofx-login --logout

Claude Desktop 整合

設定範例:

{
  "mcpServers": {
    "uofx": {
      "command": "uv",
      "args": ["run", "mcp-uofx"],
      "cwd": "/path/to/mcp-uofx"
    }
  }
}

更多範例請參考 examples/

Available Tools可用工具

Tool names are registered with the uofx_custom_ prefix.

Area Tools
BPM get_pending_tasks, get_available_forms, get_form_fields, apply_bpm_form, get_task_detail
Organization get_all_departments, get_my_profile, get_dept_manager, get_dept_employees
Agent Delegation get_my_agent_settings, get_agent_forms, set_agent_user, set_agent_time, delete_agent_user, delete_agent_time
Punch get_my_punch_history, get_dept_punch_report
DMS list_dms_folders, search_dms
Other get_iso_documents, send_notification, get_pending_questionnaires, login

See docs/tools.md for the full public tool reference.

所有工具名稱都使用 uofx_custom_ 前綴註冊。

類別 工具
BPM get_pending_tasks, get_available_forms, get_form_fields, apply_bpm_form, get_task_detail
組織 get_all_departments, get_my_profile, get_dept_manager, get_dept_employees
代理人 get_my_agent_settings, get_agent_forms, set_agent_user, set_agent_time, delete_agent_user, delete_agent_time
打卡 get_my_punch_history, get_dept_punch_report
DMS list_dms_folders, search_dms
其他 get_iso_documents, send_notification, get_pending_questionnaires, login

完整公開工具說明請參考 docs/tools.md

License授權

MIT License — see LICENSE for details.

MIT License,詳見 LICENSE

Usage ExamplesUsage Examples

The following are actual test conversations recorded against the UOF X test environment (demox3.edetw.com).


Scenario 1: Missing Punch Detection

The UOF X punch report API only returns records for employees who did clock in. Employees who never clocked in are absent from the response entirely—not present as null values.

Context: A department manager wants to check whether anyone on the dev team forgot to clock in this month.

使用者:開發組五月份有人缺刷嗎?

AI:⚠️ 部門 DEPT_IT_DEV 疑似缺刷 125 筆:
    - it_dev_01 - 開發工程師 - 林前端 (2026-05-01): 未打卡 (0 次)
    - it_dev_01 - 開發工程師 - 林前端 (2026-05-02): 未打卡 (0 次)
    - it_dev_02 - 開發工程師 - 黃後端 (2026-05-01): 未打卡 (0 次)
    ⋯(共 125 筆,涵蓋全月工作日 × 6 位組員)

The tool fetches the full department roster (6 members) from the organization API, then computes a set difference against the punch report—surfacing completely absent employees that the vendor API would never return. Passing the raw API result to the AI would only show employees who did clock in, silently missing anyone who skipped entirely.


Scenario 2: Agent Delegation

The UOF X delegation API rejects new time slots that overlap with existing ones with a 400 error. Most users don't know to delete old settings first; setting directly will fail.

Context: A manager is going on a three-day business trip next week and wants to delegate approvals to a colleague.

使用者:我下週一到三要出差,幫我把簽核代理給黃後端。

AI:⚙️ 查詢現有代理設定... 找到 1 筆舊時段。
    ✅ 已清除舊時間段
    ✅ 已清除舊代理人
    📋 確認可代理表單:事假單、(未命名)⋯
    ✅ 成功將代理人設定為 it_dev_02(黃後端)
    ✅ 成功新增代理時間:2026-06-06 00:00 ~ 2026-06-08 23:59
    ⚙️ 驗證:代理設定已生效。

The no-overlap constraint is documented in the tool description. The AI reads it before making any calls and automatically sequences: query → delete old settings → set new values → verify. The user never sees the 400 error.


Scenario 3: Department Broadcast

Sending a notification to an entire department requires two steps at the API level: fetch the employee list, then send individually. These actions span two separate modules.

Context: An IT lead needs to notify the entire department before a scheduled maintenance window.

使用者:通知資訊部全體員工,今晚 10 點停機維護。

AI:部門 DEPT_IT_DEV 共有 6 位員工:
    黃後端 (it_dev_02)、吳全端 (it_dev_03)、蔡測試 (it_dev_04)⋯
    ✅ 成功發送通知給 3 位使用者。
    通知標題:今晚 10 點系統停機維護通知

Fetching the employee list and dispatching notifications are chained inside the tool. A single sentence spans the organization and notification modules.


Scenario 4: Conversational Form Lifecycle

A full BPM form lifecycle: submission, compliance check, follow-up, and approval.

4-1. Employee Submits Leave

Context: An employee wants to take half a day off and expresses it in one sentence.

使用者:我要請今天下午的事假。

AI:📋 查詢可申請表單... 找到:事假單 (代碼: DMSGENDOC)
    📝 查詢欄位規格:
       - [C003] 原因 (type: text) (必填)
       - [C006] 文件歸檔 (type: archivist) ⚠️系統元件,略過
    ✅ 成功為 it_dev_01 發起表單 DMSGENDOC
       追蹤 ID: c086e05abbe1814b3e462b46f27c459f

4-2. Manager Review with Compliance Check

Context: The manager wants to approve leave requests but asks the AI to verify that applicants have set a delegation first.

使用者:有多少待簽的假單?幫我檢查有沒有設代理。

AI:✅ 查詢待簽任務清單
    ✅ 對每位申請人進行代理人狀態交叉檢查
    📋 合規判斷:
       - 已設代理者 → 推薦簽結
       - 未設代理者 → 暫緩,發通知提醒設定
    💡 提供 UOF X 簽核連結供主管直接進入系統操作

4-3. Employee Sets Delegation

Context: An employee receives the follow-up notification and asks the AI to set up delegation.

使用者:我收到提醒要設代理,幫我設定。

AI:✅ 設定代理人與代理時段
    ✅ 驗證設定已生效
    ✅ 推播通知主管「已完成代理設定,可簽結」

The complete lifecycle spans: list forms → inspect fields → submit → compliance check → follow-up → configure delegation → notify. These steps chain BPM, delegation, and notification modules together.

以下是實際與 UOF X 測試環境(demox3.edetw.com)對話的測試紀錄,展示 MCP server 如何讓 AI 以自然語言完成跨模組業務操作。


情境一:出勤缺刷偵測

UOF X 打卡報表 API 只回傳有打卡記錄的人。當天完全未打卡的員工,在 API 回傳結果裡不是空值,而是根本不存在。

情境:部門主管想確認開發組這個月有沒有人忘記打卡。

使用者:開發組五月份有人缺刷嗎?

AI:⚠️ 部門 DEPT_IT_DEV 疑似缺刷 125 筆:
    - it_dev_01 - 開發工程師 - 林前端 (2026-05-01): 未打卡 (0 次)
    - it_dev_01 - 開發工程師 - 林前端 (2026-05-02): 未打卡 (0 次)
    - it_dev_02 - 開發工程師 - 黃後端 (2026-05-01): 未打卡 (0 次)
    ⋯(共 125 筆,涵蓋全月工作日 × 6 位組員)

工具先透過組織 API 取得部門全員名單(6 位),再拉打卡報表做差集——把原廠 API 不會回傳的「完全未打卡」紀錄主動補出來。若直接透傳 API 結果,AI 只看得到有打卡的人,會漏報整批缺刷者。


情境二:代理人設定

UOF X 代理人 API 限制:新時間段不能與現有設定重疊,否則回傳 400 錯誤。一般使用者不知道要先刪舊設定,直接設定會失敗。

情境:主管下週出差三天,想把簽核交給同事代理。

使用者:我下週一到三要出差,幫我把簽核代理給黃後端。

AI:⚙️ 查詢現有代理設定... 找到 1 筆舊時段。
    ✅ 已清除舊時間段
    ✅ 已清除舊代理人
    📋 確認可代理表單:事假單、(未命名)⋯
    ✅ 成功將代理人設定為 it_dev_02(黃後端)
    ✅ 成功新增代理時間:2026-06-06 00:00 ~ 2026-06-08 23:59
    ⚙️ 驗證:代理設定已生效。

工具描述清楚標注時段不可重疊的限制,AI 讀到這條約束後,自動協調「先查詢 → 刪除舊設定 → 設定新值 → 驗證」的序列。使用者不需要知道 API 有這條限制,也不會看到 400 錯誤。


情境三:部門廣播通知

「通知某部門所有人」在 API 層需要兩步:先查員工清單,再逐一發送通知。兩個動作跨越不同模組,使用者必須自己協調。

情境:IT 組長需要在系統停機前通知部門全員。

使用者:通知資訊部全體員工,今晚 10 點停機維護。

AI:部門 DEPT_IT_DEV 共有 6 位員工:
    黃後端 (it_dev_02)、吳全端 (it_dev_03)、蔡測試 (it_dev_04)⋯
    ✅ 成功發送通知給 3 位使用者。
    通知標題:今晚 10 點系統停機維護通知

查員工清單與發送通知兩個動作在工具內自動串接。一句話跨越組織架構模組和通知模組完成操作。


情境四:對話式表單申請

展示 AI 如何處理表單的完整生命週期:從起單、審核到合規檢查。

4-1. 員工起單

情境:員工要請半天假,用一句話表達需求。

使用者:我要請今天下午的事假。

AI:📋 查詢可申請表單... 找到:事假單 (代碼: DMSGENDOC)
    📝 查詢欄位規格:
       - [C003] 原因 (type: text) (必填)
       - [C006] 文件歸檔 (type: archivist) ⚠️系統元件,略過
    ✅ 成功為 it_dev_01 發起表單 DMSGENDOC
       追蹤 ID: c086e05abbe1814b3e462b46f27c459f

4-2. 主管審核與合規檢查

情境:主管想批假單,但要求 AI 先確認申請人有沒有設代理人。

使用者:有多少待簽的假單?幫我檢查有沒有設代理。

AI:✅ 查詢待簽任務清單
    ✅ 對每位申請人進行代理人狀態交叉檢查
    📋 合規判斷:
       - 已設代理者 → 推薦簽結
       - 未設代理者 → 暫緩,發通知提醒設定
    💡 提供 UOF X 簽核連結供主管直接進入系統操作

4-3. 員工補設代理

情境:員工收到系統催辦通知後,請 AI 協助設定代理人。

使用者:我收到提醒要設代理,幫我設定。

AI:✅ 設定代理人與代理時段
    ✅ 驗證設定已生效
    ✅ 推播通知主管「已完成代理設定,可簽結」

表單的完整生命週期涵蓋:查表單 → 查欄位 → 起單 → 合規檢查 → 催辦 → 補設定 → 回報。這些步驟串接了 BPM、代理人、通知三個模組,展示了工具編排的業務價值。

Project StructureProject Structure

mcp-uofx/
├── pyproject.toml              # Package metadata, scripts, and build config
├── uv.lock                     # Locked dependency graph
├── .env.example                # Public environment variable template
├── examples/                   # MCP client configuration examples
├── docs/                       # Public documentation
├── src/mcp_uofx/
│   ├── server.py               # stdio MCP entrypoint
│   ├── sse_server.py           # SSE HTTP entrypoint
│   ├── api_client.py           # UOF X HTTP client
│   ├── auth.py                 # OAuth credential management
│   ├── login.py                # OAuth login CLI
│   └── tools/                  # MCP tool implementations
└── tests/
    ├── test_imports.py         # Public import smoke test
    └── manual/                 # Manual integration scripts requiring UOF X access
mcp-uofx/
├── pyproject.toml              # Package metadata, scripts, and build config
├── uv.lock                     # Locked dependency graph
├── .env.example                # Public environment variable template
├── examples/                   # MCP client configuration examples
├── docs/                       # Public documentation
├── src/mcp_uofx/
│   ├── server.py               # stdio MCP entrypoint
│   ├── sse_server.py           # SSE HTTP entrypoint
│   ├── api_client.py           # UOF X HTTP client
│   ├── auth.py                 # OAuth credential management
│   ├── login.py                # OAuth login CLI
│   └── tools/                  # MCP tool implementations
└── tests/
    ├── test_imports.py         # Public import smoke test
    └── manual/                 # Manual integration scripts requiring UOF X access

TestingTesting

# Run the public smoke test
uv run python tests/test_imports.py

# Compile source and tests
uv run python -m compileall src tests

# Build source distribution and wheel
uv build

Manual integration scripts are under tests/manual/. They require a configured .env and access to a UOF X environment. Some scripts perform write operations, send notifications, or mutate delegation settings; review them before running.

# 執行公開 smoke test
uv run python tests/test_imports.py

# 編譯 source 與 tests
uv run python -m compileall src tests

# 建置 source distribution 與 wheel
uv build

Manual integration scripts 位於 tests/manual/。這些腳本需要已設定的 .env 與可存取的 UOF X 環境。部分腳本會執行寫入、發送通知或修改代理人設定,執行前請先逐一檢查。

DocumentationDocumentation

BoundariesBoundaries

  • The server operates with the permissions of the configured API key or OAuth user.
  • Manual approval steps in UOF X are not bypassed by this server.
  • Notification APIs send to one user per request; batch behavior is implemented by looping.
  • Some system fields, such as archival widgets, may not be writable through external APIs.
  • The server operates with the permissions of the configured API key or OAuth user.
  • Manual approval steps in UOF X are not bypassed by this server.
  • Notification APIs send to one user per request; batch behavior is implemented by looping.
  • Some system fields, such as archival widgets, may not be writable through external APIs.

Part Of The Asgard EcosystemPart Of The Asgard Ecosystem

This server is part of the Asgard AI Platform, connecting AI assistants to real-world enterprise and workflow systems through MCP.

This server is part of the Asgard AI Platform, connecting AI assistants to real-world enterprise and workflow systems through MCP.

文件文件

邊界邊界

  • Server 會以設定的 API key 或 OAuth 使用者權限執行。
  • UOF X 內的人工簽核步驟不會被此 server 繞過。
  • 通知 API 每次 request 只發送給一位使用者;批次行為由迴圈實作。
  • 部分系統欄位,例如歸檔 widget,可能無法透過外部 API 寫入。
  • Server 會以設定的 API key 或 OAuth 使用者權限執行。
  • UOF X 內的人工簽核步驟不會被此 server 繞過。
  • 通知 API 每次 request 只發送給一位使用者;批次行為由迴圈實作。
  • 部分系統欄位,例如歸檔 widget,可能無法透過外部 API 寫入。

Asgard EcosystemAsgard Ecosystem

本專案是 Asgard AI Platform 的一部分,透過 MCP 讓 AI assistant 能與真實企業與流程系統整合。

本專案是 Asgard AI Platform 的一部分,透過 MCP 讓 AI assistant 能與真實企業與流程系統整合。

Tags標籤

dataglobaluofx

Related MCP Servers相關 MCP 伺服器