Skip to main content

하이브리드 DMN MCP 서버 - DRD 지원, cDMN API와 표준 XML 파싱을 모두 지원하는 FastMCP 기반 의사결정 서버

Project description

CDMN Decision MCP Server

cDMN 전용 MCP 서버 - cDMN 프레임워크만을 사용하는 FastMCP 기반 의사결정 서버입니다.

🚀 Features

핵심 기능

  • 🎯 cDMN 전용 엔진: cDMN 프레임워크만을 사용하여 안정적이고 정확한 DMN 실행
  • 📄 DMN XML 지원: DMN 1.3 표준 XML 형식 완벽 지원
  • 🔄 모델 확장: 모든 가능한 해를 찾을 수 있는 고급 추론 기능
  • 📊 의사결정 추적: 실행 경로와 규칙 매칭 과정 상세 추적
  • ⚡ 전파 기반 추론: 입력값을 통해 출력값을 자동으로 계산

고급 기능

  • 완전히 제네릭한 의사결정 엔진: 고정된 스키마 없이 key-value 형태의 유연한 입력 처리
  • 자연어 → DMN 호출 자동화: LLM 기반 자연어 파싱으로 DMN 인퍼런스를 수행하고 결과를 반환
  • Rule 관리 기능: DMN XML을 로드, 저장, 조회 가능
  • 동적 스키마 조회: 각 규칙의 입력 요구사항을 런타임에 확인 가능
  • 호출측 LLM 최적화: 마크다운 생성은 호출측 LLM에서 처리하도록 설계
  • 확장 가능한 규칙 시스템: 새로운 규칙을 동적으로 등록하고 실행 가능
  • MCP 프로토콜 준수: FastMCP 기반으로 LLM에서 함수 호출 및 응답 처리 가능

📋 Requirements

  • Python 3.11+
  • FastMCP
  • cDMN (필수)
  • idp-engine (cDMN 의존성)

🛠️ Installation

Using pip

pip install cdmn-mcp-server

cDMN과 idp-engine이 자동으로 설치됩니다.

From source

git clone https://github.com/rickjang/cdmn-mcp-server.git
cd cdmn-mcp-server
pip install -e .

🚀 Usage

1. Command Line

# 기본 실행
cdmn-mcp-server

# 또는 Python 모듈로 실행
python -m server_cdmn_only

2. MCP 설정 파일

Claude Desktop 등에서 사용하기 위한 설정:

{
  "mcpServers": {
    "cdmn-mcp-server": {
      "command": "uvx",
      "args": ["cdmn-mcp-server"]
    }
  }
}

3. Python API

from server_cdmn_only import DMNModel

# DMN 모델 초기화
dmn_model = DMNModel()

# 규칙 로드
await dmn_model.load_rule("insurance_premium")

# 의사결정 실행
result = await dmn_model.evaluate_decision("insurance_premium", {
    "age": 65,
    "smoker": True,
    "health_score": 30
})

print(result.result)  # {'Risk Category': 'Very High'}
print(result.engine_used)  # 'cdmn'

📚 Available Tools

1. load_rule(rule_name: str)

DMN XML 규칙을 로드합니다.

2. save_rule(rule_name: str, xml_content: str)

새로운 DMN 규칙을 저장합니다.

3. list_rules()

등록된 DMN 규칙 목록을 조회합니다.

4. delete_rule(rule_name: str)

DMN 규칙을 삭제합니다.

5. get_rule_schema(rule_name: str)

규칙의 입력 스키마를 조회합니다.

6. infer_decision(rule_name: str, context_input: Dict[str, Any])

DMN 규칙을 기반으로 의사결정을 실행합니다.

7. register_rule(rule_name: str, rule_config: Dict[str, Any])

새로운 규칙을 동적으로 등록합니다.

8. check_engine_status()

cDMN 엔진의 상태를 확인합니다.

🎯 Examples

보험료 계산

# 규칙 로드
await load_rule("insurance_premium")

# 의사결정 실행
result = await infer_decision("insurance_premium", {
    "age": 65,
    "smoker": True,
    "health_score": 30
})

# 결과:
# {
#   "result": {"Risk Category": "Very High"},
#   "engine_used": "cdmn",
#   "execution_time": 0.0001,
#   "trace": [...]
# }

대출 승인

result = await infer_decision("loan_approval", {
    "credit_score": 750,
    "income": 60000,
    "age": 35
})

🔧 cDMN Engine Features

고급 추론 기능

  • 모델 확장: 모든 가능한 해를 찾을 수 있음
  • 전파 기반 추론: 입력값을 통해 출력값을 자동 계산
  • 불확실성 처리: 확정되지 않은 값들을 명시적으로 처리
  • 의존성 해결: 복잡한 DMN 의존성 그래프를 자동으로 해결
  • 표준 준수: DMN 1.3 표준을 완벽하게 지원

📝 DMN XML Format

지원되는 DMN XML 형식 예제:

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="https://www.omg.org/spec/DMN/20191111/MODEL/"
             id="insurance-premium"
             name="Insurance Premium Calculation">
  
  <decision id="riskCategory" name="Risk Category">
    <decisionTable id="riskTable" hitPolicy="FIRST">
      <input id="ageInput" label="Age">
        <inputExpression typeRef="number">
          <text>age</text>
        </inputExpression>
      </input>
      <output id="riskOutput" label="Risk Category" typeRef="string"/>
      
      <rule id="rule1">
        <inputEntry id="age1">
          <text>age &gt;= 60</text>
        </inputEntry>
        <outputEntry id="risk1">
          <text>"High Risk"</text>
        </outputEntry>
      </rule>
    </decisionTable>
  </decision>
  
</definitions>

🐛 Troubleshooting

cDMN 설치 오류

  • cDMN과 idp-engine이 올바르게 설치되었는지 확인하세요.
  • Python 3.11 이상이 필요합니다.

DMN XML 오류

  • XML 형식이 올바른지 확인하세요.
  • 네임스페이스와 태그 구조가 DMN 1.3 표준을 따르는지 확인하세요.
  • <, > 같은 특수 문자는 &lt;, &gt;로 이스케이프해야 합니다.
  • cDMN은 표준 DMN XML 형식을 완벽하게 지원합니다.

📄 License

MIT License

👤 Author

rickjang

🔗 Links

📈 Changelog

3.0.0 (2025-10-18)

  • 🎯 cDMN 전용 엔진: XML 파싱 구현체 제거, cDMN만 사용
  • 안정성 향상: 전문적인 DMN 실행 엔진 사용으로 정확성 보장
  • 고급 추론 기능: 모델 확장, 전파 기반 추론 등 cDMN의 모든 기능 활용
  • 의존성 해결: 복잡한 DMN 의존성 그래프 자동 해결
  • 📚 문서 업데이트: cDMN 전용 버전에 맞게 문서 전면 개편

2.0.1 (이전 버전)

  • 하이브리드 DMN 엔진 (cDMN + XML 파싱)
  • 자동 엔진 선택 및 폴백 메커니즘

🤝 Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

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

cdmn_mcp_server-3.2.1.tar.gz (29.1 kB view details)

Uploaded Source

Built Distribution

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

cdmn_mcp_server-3.2.1-py3-none-any.whl (25.6 kB view details)

Uploaded Python 3

File details

Details for the file cdmn_mcp_server-3.2.1.tar.gz.

File metadata

  • Download URL: cdmn_mcp_server-3.2.1.tar.gz
  • Upload date:
  • Size: 29.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.1

File hashes

Hashes for cdmn_mcp_server-3.2.1.tar.gz
Algorithm Hash digest
SHA256 5f778d38965f27e65c45f6e672851b99bc18d37be5259e3823ea24ce51ded3ee
MD5 b64f74d75b764d3803c48ed3601e67cd
BLAKE2b-256 7f5b386b404cf4d326ea4d0994da414196c2d9dff52f478e36c9ebaf6c7e8b5e

See more details on using hashes here.

File details

Details for the file cdmn_mcp_server-3.2.1-py3-none-any.whl.

File metadata

File hashes

Hashes for cdmn_mcp_server-3.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 d24add49d24de4eda62b02b0645c81ca0a2622b283580ac924a14fae13f1eed2
MD5 445118b19b6573a9a1531abdee2980be
BLAKE2b-256 a888b9026ecc666d0ba64381b1733ab4399c5a37090f7acbf967ba63e9859a33

See more details on using hashes here.

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