degree-dynamicweb-mcp
degree-dynamicweb-mcp
DynamicWeb 10 Admin API용 MCP(Model Context Protocol) 서버입니다. Claude Code에 DynamicWeb 항목 유형, 필드, 페이지, 문단 및 API 검색을 관리할 수 있는 전체 액세스 권한을 제공하며 DW Admin UI를 건드릴 필요가 없습니다.
도구
항목 유형
Tool | Description |
| 모든 항목 유형 나열 |
| 항목 유형 세부 정보 및 제한 사항 가져오기 |
| 한 번의 호출로 필드, 그룹, 제한 사항이 포함된 항목 유형 생성 |
| 설정 업데이트 (이름, 카테고리, 아이콘, 사용 가능 여부 등) |
| 제한 사항 업데이트 (허용된 상위, 하위, 웹사이트 등) |
| 항목 유형 삭제 |
스키마 유지 관리
항목 유형 XML을 배포해도 데이터베이스는 변경되지 않습니다. 스키마가 동기화될 때까지, 열이 누락된 필드는 오류 없이 저장되지만 아무것도 유지되지 않습니다.
Tool | Description |
| DB 열이 누락된 필드와 XML이 더 이상 선언하지 않는 열을 보고합니다. |
| 항목 유형 XML을 다시 로드하고 누락된 테이블과 열을 생성합니다. |
| 항목 유형을 사용하는 페이지와 문단을 나열합니다. |
| 파괴적 작업. 항목 유형 테이블에서 고아 행을 삭제합니다. |
새 XML을 배포한 후: dw_itemtype_sync_schema, 그 다음 dw_itemtype_health. 동기화 엔드포인트는 중간에 중단되어도 "ok"로 응답하므로, 실제로 작동했는지 알려주는 것은 상태 점검입니다. 실제 오류는 /Files/System/Log/items/ActivationWorkflow에 있습니다. 테이블이 완전히 누락된 항목 유형은 상태 보고서에 아예 나타나지 않습니다.
필드
Tool | Description |
| 항목 유형의 필드 나열 |
| 필드 추가 또는 업데이트 |
| 필드 삭제 |
| DW 인스턴스에서 사용 가능한 모든 편집기 유형 나열 (하드코딩 아님) |
페이지
Tool | Description |
| 페이지 나열, 영역 또는 상위 항목으로 선택적 필터링 |
| 모든 항목 필드가 포함된 페이지 가져오기 |
| 상위 페이지 아래에 페이지 생성 |
| 페이지에 항목 필드 값 설정 |
| 페이지 삭제 |
| 모든 영역(웹사이트) 나열 |
문단
Tool | Description |
| 페이지의 문단 나열 |
| 모든 항목 필드가 포함된 문단 가져오기 |
| 페이지에 문단 생성 |
| 문단에 항목 필드 값 설정 |
| 문단 삭제 |
dw_page_set_fields와 dw_paragraph_set_fields는 자체 쓰기를 검증합니다. 항목 유형이 선언하지 않은 필드 이름은 오류로 처리되며, 해당 유형이 가진 이름 목록을 보여줍니다. 저장 후에는 항목을 다시 읽어 현재 보유한 값을 반환합니다. DW는 값이 저장되었는지 여부와 관계없이 "ok"로 응답하므로, SystemName의 오타는 이전에 성공적인 쓰기와 구분할 수 없었습니다.
제품
Tool | Description |
| 제품 나열, 그룹 또는 검색으로 선택적 필터링 |
| 단일 제품 가져오기 (CustomFields/CategoryFields 포함 전체 모델). 제품이 없으면 API 오류 대신 |
| 제품의 최상위 필드, customFields, categoryFields 업데이트 |
| 하나 이상의 제품 삭제 |
| 그룹 또는 제품 목록의 DefaultPrice에 백분율 할인 적용 |
dw_product_update는 세 가지 입력 맵을 받습니다:
fields- 최상위 제품 필드 (Name, DefaultPrice, Stock 등)customFields- SystemName을 키로 하는 전역 제품 사용자 정의 필드 값categoryFields- SystemName을 키로 하는 제품 카테고리 필드 값
제품 스키마
PIM 데이터 모델을 관리합니다: 제품 카테고리(속성 그룹)와 제품 필드(속성 자체).
Tool | Description |
| 15가지 제품 필드 유형 나열 (TypeId + 별칭) |
| 제품 카테고리 나열 |
| 제품 카테고리 생성 또는 업데이트 |
| 카테고리 삭제 (3단계 DW 워크플로우는 내부적으로 처리) |
| 카테고리에 속한 필드 나열 |
| 카테고리에 필드 생성 또는 업데이트 (유형 별칭 허용) |
| 단일 카테고리에서 필드 삭제 |
파일
Tool | Description |
| 디렉터리의 파일 나열, 확장자로 선택적 필터링 |
| 하위 디렉터리 나열 |
Delivery API (읽기 전용)
Tool | Description |
| Delivery API에서 영역 가져오기 |
| 콘텐츠가 포함된 페이지 가져오기 |
| 콘텐츠가 포함된 문단 가져오기 |
API 검색
Tool | Description |
| 키워드로 Swagger 스펙에서 엔드포인트 검색 |
| 엔드포인트의 요청/응답 스키마 가져오기 |
| 모든 Admin API 엔드포인트에 대한 원시 호출 |
Related MCP server: TeamDesk MCP Server
설정
1. DW API 토큰 받기
DynamicWeb Admin에서 Settings > Developer > API Keys로 이동하여 전체 액세스 권한이 있는 새 키를 만듭니다.
2. AI 클라이언트 구성
프로젝트의 .mcp.json에 추가하세요:
{
"mcpServers": {
"dynamicweb": {
"command": "npx",
"args": ["-y", "@degree-as/dynamicweb-mcp"],
"env": {
"DW_BASE_URL": "https://your-dw-instance",
"DW_API_TOKEN": "your-token"
}
}
}
}~/Library/Application Support/Claude/claude_desktop_config.json(macOS) 또는 %APPDATA%\Claude\claude_desktop_config.json(Windows)을 편집하세요:
{
"mcpServers": {
"dynamicweb": {
"command": "npx",
"args": ["-y", "@degree-as/dynamicweb-mcp"],
"env": {
"DW_BASE_URL": "https://your-dw-instance",
"DW_API_TOKEN": "your-token"
}
}
}
}~/.cursor/mcp.json(전역) 또는 .cursor/mcp.json(프로젝트)에 추가하세요:
{
"mcpServers": {
"dynamicweb": {
"command": "npx",
"args": ["-y", "@degree-as/dynamicweb-mcp"],
"env": {
"DW_BASE_URL": "https://your-dw-instance",
"DW_API_TOKEN": "your-token"
}
}
}
}프로젝트에 .vscode/mcp.json을 추가하세요 (참고: mcpServers가 아닌 servers를 사용합니다):
{
"servers": {
"dynamicweb": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@degree-as/dynamicweb-mcp"],
"env": {
"DW_BASE_URL": "https://your-dw-instance",
"DW_API_TOKEN": "your-token"
}
}
}
}~/.codeium/windsurf/mcp_config.json을 편집하세요:
{
"mcpServers": {
"dynamicweb": {
"command": "npx",
"args": ["-y", "@degree-as/dynamicweb-mcp"],
"env": {
"DW_BASE_URL": "https://your-dw-instance",
"DW_API_TOKEN": "your-token"
}
}
}
}Cline의 MCP 설정 UI를 통해 구성하거나 해당 config에 추가하세요:
{
"mcpServers": {
"dynamicweb": {
"command": "npx",
"args": ["-y", "@degree-as/dynamicweb-mcp"],
"env": {
"DW_BASE_URL": "https://your-dw-instance",
"DW_API_TOKEN": "your-token"
}
}
}
}Zed의 settings.json에 추가하세요 (참고: context_servers를 사용합니다):
{
"context_servers": {
"dynamicweb": {
"source": "custom",
"command": "npx",
"args": ["-y", "@degree-as/dynamicweb-mcp"],
"env": {
"DW_BASE_URL": "https://your-dw-instance",
"DW_API_TOKEN": "your-token"
}
}
}
}~/.continue/config.yaml에 추가하세요:
mcpServers:
- name: dynamicweb
command: npx
args:
- -y
- "@degree-as/dynamicweb-mcp"
env:
DW_BASE_URL: https://your-dw-instance
DW_API_TOKEN: your-token3. 클라이언트 다시 시작
MCP 서버는 AI 클라이언트가 로드될 때 자동으로 시작됩니다.
로컬 개발
게시된 패키지 대신 소스에서 실행하려면:
git clone https://github.com/Degree-AS/degree-dynamicweb-mcp.git
cd degree-dynamicweb-mcp
npm install
npm run build그런 다음 .mcp.json에서 "command": "node", "args": ["/path/to/degree-dynamicweb-mcp/dist/index.js"]를 사용하세요.
필드 유형 별칭
항목 유형 필드 (dw_field_save, dw_itemtype_create)
필드를 만들 때 전체 .NET 클래스 이름 대신 짧은 별칭을 사용할 수 있습니다:
별칭 | 편집기 |
| TextEditor |
| LongTextEditor |
| RichTextEditor |
| RichTextEditorLight |
| FileEditor |
| FolderEditor |
| MediaEditor |
| LinkEditor |
| ItemLinkEditor |
| ItemRelationListEditor |
| IntegerEditor |
| DecimalEditor |
| DateEditor |
| DateTimeEditor |
| CheckboxEditor |
| CheckboxListEditor |
| DropDownListEditor |
| RadioButtonListEditor |
| EditableListEditor |
| ColorEditor |
| ColorSwatchEditor |
| ItemTypeEditor |
| ItemTypeTabEditor |
| UserEditor |
| SingleUserEditor |
| SingleUserGroupEditor |
| GeolocationEditor |
| GoogleFontEditor |
| HiddenFieldEditor |
| PasswordEditor |
전체 .NET 편집기 클래스 이름도 허용됩니다. dw_field_types를 사용하여 DW 인스턴스에서 사용 가능한 모든 편집기를 확인하세요.
반복 가능한 목록 (itemrelation)
itemrelation(ItemRelationListEditor)은 하위 항목의 반복 가능한 목록을 만듭니다. FAQ 항목, 행, 사람 등을 모델링하는 일반적인 방법입니다 (고정된 번호 슬롯 Question1..5 대신). 두 개의 추가 매개변수가 필요합니다:
매개변수 | 필수 | 설명 |
| 예 | 목록이 보유하는 하위 항목 유형의 systemName입니다. 먼저 생성하세요. |
| 아니요 | 항목이 저장되는 위치입니다. 기본값은 |
하위 항목 유형을 먼저 생성한 다음, 상위 항목 유형을 생성하세요:
// 1) child row
dw_itemtype_create { systemName: "OpeningHoursRow", fields: [
{ name: "Label", systemName: "Label", type: "text" },
{ name: "Value", systemName: "Value", type: "text" },
]}
// 2) parent with the repeatable list
dw_itemtype_create { systemName: "OpeningHours", fields: [
{ name: "Title", systemName: "Title", type: "text" },
{ name: "Rows", systemName: "Rows", type: "itemrelation", itemRelationType: "OpeningHoursRow" },
]}이 도구는 필요한 EditorConfiguration + EditorFields (항목 유형 / 항목 소스)와 Int32 기본 유형을 자동으로 생성합니다.
제품 필드 (dw_product_field_save)
제품 필드는 편집기 클래스 이름이 아닌 FieldTypeAll의 정수 TypeId를 사용하는 다른 시스템을 사용합니다:
별칭 | TypeId | 이름 |
| 1 | 텍스트 (255) |
| 2 | 긴 텍스트 |
| 3 | 체크박스 |
| 4 | 날짜 |
| 5 | 날짜/시간 |
| 6 | 정수 |
| 7 | 10진수 |
| 8 | 링크 |
| 9 | 파일 |
| 10 | 텍스트 (100) |
| 11 | 텍스트 (50) |
| 12 | 텍스트 (20) |
| 13 | 텍스트 (5) |
| 14 | 편집기 |
| 15 | 목록 |
숫자 TypeId도 직접 허용됩니다. dw_product_field_type_list를 사용하여 DW 인스턴스에서 최신 목록을 가져오세요.
아키텍처
src/
index.ts Entry point - reads config from env, registers tools
client.ts DwClient - HTTP client for Admin API, Update API, Delivery API
utils.ts Shared Zod helpers (jsonParam, numParam) and response helpers (prop, pascal)
tools/
itemTypes.ts Item type CRUD, fields, restrictions, settings, editor discovery, schema health and sync
pages.ts Page and area management
paragraphs.ts Paragraph management (uses ParagraphNew + ParagraphSave)
products.ts Product CRUD, bulk discount, custom/category field value updates
productSchema.ts Product categories and product field schema management
files.ts File and directory browsing
delivery.ts Read-only Delivery API
discovery.ts Swagger search, endpoint schema, raw API callsDW API 인터페이스
DynamicWeb Admin API에는 세 가지 호출 방식이 있습니다:
Admin API (
GET /admin/api/{Endpoint}) - URL 매개변수로 쿼리합니다.Command API (
POST /admin/api/{Endpoint}) -{ Model: {...} }본문으로 변경 작업을 수행합니다. 삭제 명령은 플랫 본문(Model 래퍼 없음)을 사용합니다.Update API (
POST /Admin/Api/{Endpoint}?Query.Type={Type}) -{ QueryData: {...}, model: {...} }본문으로 기존 레코드를 업데이트합니다.
DwClient에는 각각에 대한 전용 메서드가 있습니다: get(), post(), command(), update(), delivery().
개발
npm run dev # Run with tsx (hot reload)
npm run build # Compile TypeScript
npm run start # Run compiled version변경 후 npm run build를 실행하고 Claude Code를 다시 시작하여 새 버전을 적용하세요.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityBmaintenanceMCP server for Drupal sites via JSON:API, enabling CRUD operations on nodes, taxonomy terms, and users using natural language.8MIT
- AlicenseNot gradedqualityDmaintenanceMCP server for TeamDesk databases, enabling CRUD operations, search, and document generation via natural language.3MIT
- AlicenseNot gradedqualityDmaintenanceMCP server for Shopify Admin API. Enables product, order, customer, and inventory management via natural language.191MIT
- AlicenseAqualityCmaintenanceMCP server for Microsoft Dynamics 365 Business Central that enables AI assistants to query and manage Business Central data via full CRUD operations.630MIT
Related MCP Connectors
MCP server for AI access to Swagger by SmartBear.
An MCP server that let you interact with Cycloid.io Internal Development Portal and Platform
GibsonAI MCP server: manage your databases with natural language
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Degree-AS/degree-dynamicweb-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server