DTM 장비 가격을 AI가 알려주게 만든 MCP 서버에서 주의한 점
요약
AI가 장비 가격을 정확하게 알려주도록 MCP 서버를 구축하고 공개했습니다. 이 서버는 DTM/음악 제작 플러그인 및 장비의 가격과 함께 확인 시각, 세일 종료 시간 등을 제공합니다. 본 글에서는 AI에게 가격 정보를 전달할 때 고려해야 할 6가지 기술적 주의사항을 상세히 설명합니다.
핵심 포인트
- 가격 정보와 함께 '확인 시각' 명시가 필수입니다.
- API 규정상 누락된 상품은 반드시 그 이유를 명시해야 합니다.
- 제품명 검색은 유연하게, 모델명(型番)은 엄격하게 처리했습니다.
- 사용자 입력 조건이나 이름은 URL에 저장되지 않도록 POST 본문을 사용합니다.
- 도구 설명문에는 사실 정보만 담고 홍보 문구를 배제했습니다.
AI에게 'Shure SM7B는 지금 얼마예요?'라고 물어보세요. 돌아오는 답변은 대부분 언제 어디서 팔았던 가격인지, 이게 싼 건지 비싼 건지 솔직히 잘 알 수 없습니다. '최신 가격은 미확인입니다'라는 주의는 주지만, 먼저 확인하고 알려주었으면 하는 것입니다.
그래서 DTM/음악 제작 플러그인이나 장비의 가격을 확인한 시각과 함께 반환하는 MCP 서버를 만들고 공개했습니다. 데이터는 운영 중인 DTMFRAME(https://dtmframe.com)에서 수집한 것입니다. 이 글에서는 AI에게 가격을 알려주게 할 때 주의했던 점들을 정리해 드립니다. 서버 연결 방법은 후반부에 있습니다.
- 접속처:
https://dtmframe.com/mcp/
(Streamable HTTP, 스테이트리스) - 인증: 없음. 계정도 필요하지 않습니다.
- 게재: Claude의 Connectors Directory (https://claude.ai/directory/connectors/dtmframe), MCP Registry (
com.dtmframe/dtmframe)
AI에게 가격을 알려주게 할 때 주의한 점
1. 그 가격, 언제 확인했나요?
가장 피하고 싶은 것은 AI가 오래된 가격을 '현재 가격'으로 답변하는 것입니다. 그래서 상품별로 확인한 시각을 명시하고, 그 가격이 얼마나 확실한지를 나타내는 값도 함께 반환하도록 했습니다. 세일의 경우, 종료 시간도 반환합니다. 이렇게 하면 답변을 읽는 사람이 '언제 가격인지'를 스스로 판단할 수 있습니다.
2. 제공할 수 없는 값을 침묵으로 누락하지 않기
판매점이나 제공처의 규약에 따라 웹 페이지에는 올라와 있어도 API로는 반환할 수 없는 가격이 있습니다. 이런 상품은 응답에 포함시키지 않습니다. 하지만 조용히 빼버리면 AI는 남아 있는 상품들을 '이것으로 전부'라고 받아들여 버립니다. 따라서 응답에는 '배포상의 규정으로 인해 일부 상품을 포함하지 않았습니다'라고 명시하고 (offers_coverage: partial과 이유를 나타내는 withheld_by_channel_policy) 합니다.
3. 이름은 유연하게, 모델명(型番)은 엄격하게
제품명 검색에서는 제조사명의 가타카나 읽기나 약어, 히라가나/로마자 표기의 오차에 대응하고 있습니다. '세일', '최저가'와 같은 쇼핑 용어는 제거한 후 대조합니다.
반면, 모델명(型番)에는 엄격하게 적용합니다. 철자가 비슷한 이름도 일치로 간주하지만, 숫자를 포함하는 단어와 3글자 단어만은 표기를 바꾸지 않고 대조합니다. 모델명은 숫자 하나가 달라도 다른 제품이며, 잘못 매칭하면 반환되는 가격 전체가 완전히 다른 제품의 것이 되어버리기 때문입니다. 참고로 어떤 규칙으로 일치 판정을 했는지(일치 종류)도 응답에 포함하고 있습니다.
4. 자유 문구는 URL에 넣지 않고 남기지 않기
REST로 이름 검색을 할 때는 이름을 GET의 쿼리가 아닌 POST 본문으로 받습니다. URL은 접속 기록이나 중간 장비에 남기기 쉽기 때문입니다.
MCP든 REST든, 도구에 전달된 조건이나 입력한 이름은 저장하지 않습니다(저장 기간은 0일). 접근 기록에 남기는 것은 도구의 이름이나 응답 상태 같은 정해진 항목뿐입니다(자세한 내용은 https://dtmframe.com/privacy/).
5. 설명문에는 사실만 쓰기
도구의 설명문이나 initialize의 instructions에는 어시스턴트에게 주는 지침이나 홍보 문구를 넣지 않고, 그 도구가 무엇을 반환하는지만 작성했습니다. 또한 모든 도구에 readOnlyHint: true와 destructiveHint: false, 그리고 title 주석을 붙였습니다.
6. 스테이트리스로 작게 반환하기
현재 설정에서는 서버가 세션을 갖지 않는 Streamable HTTP로 구동하고 있으며, 오류는 JSON-RPC의 타입별 에러(not_found 등)로 반환하도록 했습니다. 응답 크기는 1 MiB까지 제한했고, list_deals에서 반환하는 제품 예시도 세일별로 5개까지로 제한했습니다. 호출 상한은 연결 출처 IP별로 분당 읽기 60회, 계산 10회입니다.
7. 어디에 두었나요?
- MCP Registry에는
com.dtmframe/dtmframe
이라는 이름으로 등록했습니다. 도메인 소유자인지 여부는 DNS의 TXT 레코드로 확인할 수 있기 때문에, GitHub 계정이 없어도 자신의 도메인 이름으로 공개할 수 있습니다. - 사이트의 제품 페이지에서는 Chrome의 WebMCP (origin trial)로도 툴을 공개하고 있습니다. 그 페이지에 올라온 제품 출품을 반환하는 get_offers_on_this_page와, list_deals 두 가지입니다.
무엇이 돌아오나요?
툴은 총 5가지가 있으며, 모두 읽기 및 계산만 수행합니다.
| 툴 | 반환 내용 |
|---|---|
search_products | 제품과 에디션. 이름은 약칭이나 가타카나 표기로도 검색 가능 |
get_current_offers | 제품의 현재 출품 목록. 판매점별 가격과, 그 가격을 확인한 시각 |
list_deals | 진행 중인 세일 및 캠페인, 그리고 그 마감 기한 |
resolve_purchase_request | 예산・DAW・OS・형식・보유 제품 등의 조건에 맞는 구매 후보군 |
compare_products | 에디션이나 제품 간의 비교 |
어떤 응답에도 dtmframe.com 해당 페이지의 URL이 포함되어 있으며, 가격 목록표는 그 페이지에서 확인할 수 있습니다.
동일한 작업은 REST API를 통해서도 실행할 수 있습니다. OpenAPI 정의는 https://dtmframe.com/api/v1/openapi.json에 있습니다.
어떻게 연결하나요?
Claude
Directory의 게재 페이지 (https://claude.ai/directory/connectors/dtmframe )에서 추가할 수 있습니다. 커스텀 커넥터로 URL을 직접 넣어도 좋으며, 로그인 설정은 필요하지 않습니다.
Claude Code
claude mcp add --transport http dtmframe https://dtmframe.com/mcp/
Cursor 등, 설정 파일로 추가하는 클라이언트
{
"mcpServers": {
"dtmframe": { "url": "https://dtmframe.com/mcp/" }
...
}
ChatGPT
개발자 모드에서 원격 MCP 서버를 추가할 수 있는 환경이라면, 동일한 URL을 등록하면 됩니다. 사용할 플랜이나 설정 화면은 OpenAI의 도움말에서 확인해 주시기 바랍니다.
먼저 무엇을 물어볼까요?
다음과 같은 질문 방식으로 답변이 돌아오는 것을 실제 서버에서 확인했습니다.
- "진행 중인 DTM 플러그인의 세일과, 각각의 마감 기한을 알려줘"
- "Shure SM7B의 국내 가격을, 확인 시각과 함께 알려줘"
- "Logic Pro를 사용하는 초보자이고, 예산 5만 엔. 마스터링용 리미터를 제안하고, 후보 2개를 비교해줘"
X: @dtmframe (https://x.com/dtmframe )
Discussion

AI 자동 생성 콘텐츠
본 콘텐츠는 Zenn AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기