하이브리드 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 >= 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 표준을 따르는지 확인하세요.
<,>같은 특수 문자는<,>로 이스케이프해야 합니다.- 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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5f778d38965f27e65c45f6e672851b99bc18d37be5259e3823ea24ce51ded3ee
|
|
| MD5 |
b64f74d75b764d3803c48ed3601e67cd
|
|
| BLAKE2b-256 |
7f5b386b404cf4d326ea4d0994da414196c2d9dff52f478e36c9ebaf6c7e8b5e
|
File details
Details for the file cdmn_mcp_server-3.2.1-py3-none-any.whl.
File metadata
- Download URL: cdmn_mcp_server-3.2.1-py3-none-any.whl
- Upload date:
- Size: 25.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d24add49d24de4eda62b02b0645c81ca0a2622b283580ac924a14fae13f1eed2
|
|
| MD5 |
445118b19b6573a9a1531abdee2980be
|
|
| BLAKE2b-256 |
a888b9026ecc666d0ba64381b1733ab4399c5a37090f7acbf967ba63e9859a33
|