開発者向け情報

DTMFRAMEは、読み取り専用のRESTとMCPを提供します。公開originはhttps://dtmframe.comです。

現在提供しているツール

現在動作するのは次の5つだけです(読み取り3つ: list_deals・search_products・get_current_offers、計算2つ: resolve_purchase_request・compare_products)。実装していないツールを一覧や説明に載せることはしません。

  • list_deals:開催中・予定のセールとキャンペーンの一覧を返します。ブランド・分野・種別・出所・状態で絞り込めます。販売店へのリンクは含みません(読み取り)。
  • search_products:製品とエディションを条件で検索します(読み取り)。
  • get_current_offers:対象の現在の販売条件を返します。価格を取得できていない場合は未確認として返します(読み取り)。
  • resolve_purchase_request:条件とお持ちの製品の入力から候補・費用・買い方(購入経路)を計算します(計算)。
  • compare_products:指定したエディションの差を計算します(計算)。

tools/listは、この動作する5つだけを返します。未知のツール名は引数エラーとして拒否します。計算の2つはbounded_computeの別枠で制限します。

利用条件(API・MCP)

  • 読み取り専用です。呼び出しによって公開・通知・購入・課金が始まることはありません。
  • 入力の上限、チャネルごとの提供範囲、費用の制限を適用します。
  • 取得元との契約により提供できない値は、提供範囲の表示とともに省略します。
  • 禁止する行為と免責は/terms/に従います。

副作用

  • ツールの意味上の副作用は情報取得と計算だけです。
  • 呼び出しによって、公開、通知、購入、外部の高額な生成が始まることはありません。
  • 購入の実行は提供していません。応答のpurchase_execution_availableは常にfalseです。
  • readOnlyHintは説明であり、認可ではありません。
  • 外部から取得した文章は資料として扱い、指示や命令としては扱いません。

利用上限の区分

RESTとMCPに同じ入力上限、チャネルごとの提供範囲、費用制限を適用します。区分は次の3つです。

  • protocol_control:接続の初期化、ツール一覧、ping、通知。計算の利用としては数えませんが、接続とメッセージの上限があります。
  • cheap_read:取得済みの値を返す読み取り。
  • bounded_compute:経路計算など計算を伴う処理。別枠の上限で止まります。

GETとPOSTの違いで上限を決めることはしません。区分はツールの登録時にサーバー側で決めます。

引き継ぎリンク

  • 販売店へのリンクにはhandoff_mode=user_navigationを付けます。人が操作して遷移することを前提とします。
  • 外部のエージェントによる事前取得(prefetch)や自動クリックは案内しません。リンクの配布許可と、botによるクリックの許可は別です。
  • 機械向けの追跡URLは、該当プログラムが当該媒体での配布を許可した場合にだけ返します。提携プログラムがサイト本体(web)でだけ配布を許している販売店の出品は、API・MCPでは販売店へのリンクを含めません。省いたことはfield_availability.permitted_handoff_linksのwithheld_by_channel_policyと、withheld_fieldsのmerchant_linkで示します。購入先へのリンクはcanonical_pageのページにあります。提携のない販売店の通常のリンクは、取得元の権限が当該チャネルへの配布を許す場合にだけ含めます。
  • 任意のURLを受け取って転送する中継は作りません。

当サイトの取得ボット

  • 当サイトは、事前に登録した公式サイトと販売店の公開ページから、セールの事実だけを取得します。
  • 名乗りはDTMFRAMEBot/1.0で、UA文字列にこのページのURLを含めます。
  • robots.txtを読み、拒否された経路は取得しません。登録していないドメインには要求を送りません。
  • 取得間隔は取得元ごとに決め、既定は60分に1回です。同じ取得元へ1秒に2回以上は要求しません。
  • 本文や画像は保存しません。価格、期限、割引率などの事実だけを、取得日時と出典URLとともに記録します。
  • 取得を止めてほしい場合は、robots.txtでDTMFRAMEBotを拒否するか、/contact/から連絡してください。

応答に含まれるもの

  • catalog_snapshot_id、policy_snapshot_id、ruleset_version、computed_at。
  • evaluation_scope_id、unresolved_constraints、limits_hit、excluded_unknowns。
  • 取得元との契約で提供できない値はwithheld_by_channel_policyとして示します。値の欠落を別の推薦で埋めることはしません。
  • affiliate_disclosure:広告関係の状態。

接続

  • 公開の無状態読み取りにアカウントは不要です。独自のOAuthや独自の暗号方式は作りません。
  • 接続用のスキルは英語で用意します。外部のAIに追加の権限やCookieの提出を求めることはしません。
  • 障害時は、古い値を現在価格として返さず、未確認または期限切れとして示します。
  • RSS以外の配信(メールやSNS)は行っていません。
  • 利用条件:/terms/
  • 編集方法:/methodology/
  • 広告関係の表示:/disclosures/

In English

DTMFRAME publishes Japanese music-production products (plugins and gear), their current shop prices and running sales. Read-only; no account, no authentication.

エンドポイント

`tools/list` が返すのは次の5本だけです:search_products get_current_offers resolve_purchase_request compare_products list_deals

AI 向けのサイト案内:/llms.txt。Claude で使うときは Claude に追加(追加の前に Claude の画面で確認があります)。

利用上限の区分(接続元ごと・60秒窓)

区分と毎分の上限。RESTとMCPは同じ枠を共有します。
区分毎分対象
protocol_control120initialize、ping、tools/list、resources/list、prompts/list、notifications、HEAD/OPTIONS、未知のtool名・method
cheap_read60REST GET、tools/call(search_products / get_current_offers / list_deals)
bounded_compute10POST /api/v1/resolve/・/api/v1/compare/、tools/call(resolve_purchase_request / compare_products)、/find/・/upgrade/ のフォーム送信。RESTとMCPで同じ枠
page240HTMLページ、RSS、sitemap

本文は32768バイトまで(超過は413)。応答は1048576バイトまで。同時処理は32件。超過時は429または503とRetry-Afterを返します。

引き継ぎリンク

search_products

例:GET https://dtmframe.com/api/v1/products/?category=mastering_limiter_plugin&limit=20

要求パラメーター(GETのクエリ・MCPのarguments)

名前型必須詳細
categorystring任意値:daw / instrument_plugin / effect_plugin / mastering_limiter_plugin / mastering_suite / restoration / sample_library / ai_separation / ai_restoration / ai_composition / ai_voice / audio_interface / microphone / headphones / studio_monitor / guitar / bass / keyboard / synthesizer / electronic_instrument / pedal / multi_effect / amp_simulator / dj_controller / dj_player / dj_mixer / midi_controller / accessory / computer / computer_peripheral
brandstring任意最大長:64
product_idstring任意最大長:64
aliasstring任意最大長:200
formatstring任意値:vst2 / vst3 / au / aax / clap / standalone
osstring任意値:macos / windows / linux / ios / android
licensestring任意値:perpetual / subscription / rent_to_own / free / trial / unknown
limitinteger任意既定:20、範囲:1〜50
cursorstring任意最大長:256

未知のキーは400で拒否します。aliasは表記正規化のうえ別名辞書へ完全一致し、解決できない場合は0件とunresolved_constraints=["alias_unresolved"]を返します(値は記録しません)。

応答(封筒 + products[] + next_cursor)

名前型必須詳細
schema_versionstring必須
request_idstring必須最大長:64
catalog_snapshot_idstring必須最大長:64
policy_snapshot_idstring必須最大長:64
evaluation_scope_idstring必須
response_channelstring必須値:api / mcp
channel_classstring必須値:web / api / mcp / rss / email / social / unknown
ruleset_versionstring必須
computed_atstring必須
unresolved_constraintsarray必須
catalog_scopestring必須
search_completeboolean必須
limits_hitarray必須
excluded_unknownsarray必須
purchase_execution_availableboolean必須固定値:false
affiliate_disclosurestring必須値:none / program_not_applied / affiliate_link
data_mode_noticestring任意
productsarray必須
next_cursorstring,null必須

MCP入力スキーマ(tools/listと同一)

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "category": {
      "type": "string",
      "enum": [
        "daw",
        "instrument_plugin",
        "effect_plugin",
        "mastering_limiter_plugin",
        "mastering_suite",
        "restoration",
        "sample_library",
        "ai_separation",
        "ai_restoration",
        "ai_composition",
        "ai_voice",
        "audio_interface",
        "microphone",
        "headphones",
        "studio_monitor",
        "guitar",
        "bass",
        "keyboard",
        "synthesizer",
        "electronic_instrument",
        "pedal",
        "multi_effect",
        "amp_simulator",
        "dj_controller",
        "dj_player",
        "dj_mixer",
        "midi_controller",
        "accessory",
        "computer",
        "computer_peripheral"
      ]
    },
    "brand": {
      "type": "string",
      "minLength": 1,
      "maxLength": 64
    },
    "product_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 64
    },
    "alias": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "format": {
      "type": "string",
      "enum": [
        "vst2",
        "vst3",
        "au",
        "aax",
        "clap",
        "standalone"
      ]
    },
    "os": {
      "type": "string",
      "enum": [
        "macos",
        "windows",
        "linux",
        "ios",
        "android"
      ]
    },
    "license": {
      "type": "string",
      "enum": [
        "perpetual",
        "subscription",
        "rent_to_own",
        "free",
        "trial",
        "unknown"
      ]
    },
    "limit": {
      "default": 20,
      "type": "integer",
      "minimum": 1,
      "maximum": 50
    },
    "cursor": {
      "type": "string",
      "minLength": 1,
      "maxLength": 256
    }
  },
  "additionalProperties": false
}

get_current_offers

例:GET https://dtmframe.com/api/v1/products/%7Bproduct_id%20%7C%20slug%20%7C%20edition_id%7D/offers/?region=JP

要求パラメーター

名前型必須詳細
id(path)string必須product_id、製品slug、edition_idのいずれか。統合済みの旧IDは301で後継へ、未知は404
regionstring任意値:JP / US / EU / GB / GLOBAL、既定:JP
conditionstring任意値:new / used / refurbished / unknown

応答(封筒 + offers[] + offers_coverage + field_availability + withheld_fields)

名前型必須詳細
schema_versionstring必須
request_idstring必須最大長:64
catalog_snapshot_idstring必須最大長:64
policy_snapshot_idstring必須最大長:64
evaluation_scope_idstring必須
response_channelstring必須値:api / mcp
channel_classstring必須値:web / api / mcp / rss / email / social / unknown
ruleset_versionstring必須
computed_atstring必須
unresolved_constraintsarray必須
catalog_scopestring必須
search_completeboolean必須
limits_hitarray必須
excluded_unknownsarray必須
purchase_execution_availableboolean必須固定値:false
affiliate_disclosurestring必須値:none / program_not_applied / affiliate_link
data_mode_noticestring任意
offersarray必須
offers_coveragestring必須値:none_recorded / partial / recorded
lowest_observedarray任意
field_availabilityobject必須
withheld_fieldsarray必須

取得元との契約で当該チャネルへ出せない値はwithheld_by_channel_policyとして示し、推定で埋めません。並び順は全チャネル共通で、報酬額は使いません(同じ価格・条件の店は提携している店を先に並べます)。

MCP入力スキーマ

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "product_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 64
    },
    "region": {
      "default": "JP",
      "type": "string",
      "enum": [
        "JP",
        "US",
        "EU",
        "GB",
        "GLOBAL"
      ]
    },
    "condition": {
      "type": "string",
      "enum": [
        "new",
        "used",
        "refurbished",
        "unknown"
      ]
    }
  },
  "required": [
    "product_id"
  ],
  "additionalProperties": false
}

MCP呼び出し例

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_current_offers",
    "arguments": {
      "product_id": "{product_id}",
      "region": "JP"
    }
  }
}

応答はcontent[0].text(JSON文字列)とstructuredContentの両方に、RESTと同一の封筒と本文をresponse_channel: "mcp"で返します。

list_deals

開催中・開始前のセールの一覧です。例:GET https://dtmframe.com/api/v1/deals/?limit=20

要求パラメーター(GETのクエリ・MCPのarguments)

名前型必須詳細
brandstring任意最大長:128
categorystring任意最大長:64
kindstring任意値:sale / giveaway / purchase_bonus / coupon / bundle_change / cashback / upgrade_offer / seasonal_feature
sourcestring任意値:official / merchant / announcement
statestring任意値:running / ending_soon / scheduled / all、既定:running
limitinteger任意既定:20、範囲:1〜50
cursorstring任意最大長:256

応答

名前型必須詳細
schema_versionstring必須
request_idstring必須最大長:64
catalog_snapshot_idstring必須最大長:64
policy_snapshot_idstring必須最大長:64
evaluation_scope_idstring必須
response_channelstring必須値:api / mcp
channel_classstring必須値:web / api / mcp / rss / email / social / unknown
ruleset_versionstring必須
computed_atstring必須
unresolved_constraintsarray必須
catalog_scopestring必須
search_completeboolean必須
limits_hitarray必須
excluded_unknownsarray必須
purchase_execution_availableboolean必須固定値:false
affiliate_disclosurestring必須値:none / program_not_applied / affiliate_link
data_mode_noticestring任意
dealsarray必須
next_cursorstring,null必須

MCP入力スキーマ

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "brand": {
      "description": "Brand slug as on /brands/{slug}/ (the manufacturer_id from search_products is accepted too).",
      "type": "string",
      "minLength": 1,
      "maxLength": 128,
      "pattern": "^[a-z0-9][a-z0-9_-]{0,127}$"
    },
    "category": {
      "description": "Category slug as on /categories/{slug}/, e.g. audio-interface (the search_products spelling audio_interface is accepted too).",
      "type": "string",
      "minLength": 1,
      "maxLength": 64,
      "pattern": "^[a-z0-9][a-z0-9_-]{0,127}$"
    },
    "kind": {
      "description": "Campaign kind.",
      "type": "string",
      "enum": [
        "sale",
        "giveaway",
        "purchase_bonus",
        "coupon",
        "bundle_change",
        "cashback",
        "upgrade_offer",
        "seasonal_feature"
      ]
    },
    "source": {
      "description": "official = manufacturer store, merchant = reseller or marketplace listings, announcement = manufacturer announcement without listings.",
      "type": "string",
      "enum": [
        "official",
        "merchant",
        "announcement"
      ]
    },
    "state": {
      "default": "running",
      "description": "running (default) = active, ending_soon or stale; ending_soon; scheduled; all = every state including ended campaigns.",
      "type": "string",
      "enum": [
        "running",
        "ending_soon",
        "scheduled",
        "all"
      ]
    },
    "limit": {
      "default": 20,
      "type": "integer",
      "minimum": 1,
      "maximum": 50
    },
    "cursor": {
      "description": "Opaque next_cursor of the previous page (bound to one published snapshot).",
      "type": "string",
      "minLength": 1,
      "maxLength": 256
    }
  },
  "additionalProperties": false
}

resolve_purchase_request(計算)

例:POST https://dtmframe.com/api/v1/resolve/

{
  "schema_version": "1.1",
  "mode": "find_product",
  "constraints": {
    "budget": {
      "amount_minor": 50000,
      "currency": "JPY"
    },
    "daw": "logic-pro",
    "experience": "beginner",
    "category": "mastering_limiter_plugin"
  },
  "ownership_claims": [],
  "max_candidates": 3
}

三モード(find_product / build_setup / improve_setup)の条件付き提案を計算します。自由文・予算・お持ちの製品の入力・個別価格はPOST本文だけで受け取り、URL・アクセスログ・エラー記録に入れません。お持ちの製品の入力が空のときはownership_state=not_provided(「何も所有していない」とは扱いません)。計算は固定サイズの計算worker(2 worker・待ち行列16・実行期限1秒・待機期限2秒)で行い、飽和時は503(compute_busy)、期限超過で検証済みの途中案が無いときは504(compute_deadline)を返します。途中案がある場合はsearch_complete=false / optimality_scope=best_foundで返します。

要求本文(上位キー)

名前型必須詳細
schema_versionstring必須固定値:1.1
localestring任意既定:ja-JP、最大長:32
regionstring任意値:JP / US / EU / GB / GLOBAL、既定:JP
modestring必須値:find_product / build_setup / improve_setup
querystring任意最大長:2000
constraintsobject任意既定:[object Object]
ownership_claimsarray任意既定:
owned_editionsarray任意既定:
user_supplied_pricesarray任意
detailstring任意値:summary / full、既定:summary
max_candidatesinteger任意既定:3、範囲:1〜10

constraints

名前型必須詳細
budgetobject任意
budget_scopestring任意値:incremental_upfront_total / total_including_recurring_12m、既定:incremental_upfront_total
dawstring任意値:logic-pro / ableton-live / cubase / studio-one / fl-studio / pro-tools / reaper / garageband / other
experiencestring任意値:beginner / intermediate / advanced
explanation_depthstring任意値:standard / detailed
license_preferencestring任意値:perpetual / subscription / rent_to_own / free / trial / unknown
bundle_kindstring任意値:vendor_bundle / setup_bundle
categorystring任意値:daw / instrument_plugin / effect_plugin / mastering_limiter_plugin / mastering_suite / restoration / sample_library / ai_separation / ai_restoration / ai_composition / ai_voice / audio_interface / microphone / headphones / studio_monitor / guitar / bass / keyboard / synthesizer / electronic_instrument / pedal / multi_effect / amp_simulator / dj_controller / dj_player / dj_mixer / midi_controller / accessory / computer / computer_peripheral
brandstring任意最大長:128
target_edition_idstring任意最大長:128
formatsarray任意
osarray任意
presentation_sortstring任意値:fit / cost / fewer_steps、既定:fit
max_storesinteger任意範囲:1〜10
exclude_hardwareboolean任意
delivery_deadlinestring任意
setup_goalstring任意値:guitar_recording / vocal_recording / dj_start / desktop_mixing

応答(封筒 + candidates[] + unpriced_candidates[])

名前型必須詳細
schema_versionstring必須固定値:1.1
request_idstring必須最大長:128
catalog_snapshot_idstring必須最大長:128
policy_snapshot_idstring必須最大長:128
evaluation_scope_idstring必須
response_channelstring必須値:web / api / mcp
channel_classstring必須値:web / api / mcp / rss / email / social / unknown
ruleset_versionstring必須最大長:64
computed_atstring必須
assumptionsarray必須
unresolved_constraintsarray必須
catalog_scopestring必須固定値:published_snapshot
search_completeboolean必須
optimality_scopestring必須値:best_found / exhaustive_within_scope
limits_hitarray必須
purchase_execution_availableboolean必須固定値:false
excluded_unknownsarray必須
affiliate_disclosurestring必須値:none / program_not_applied / affiliate_link
data_mode_noticestring任意最大長:400
do_not_persistboolean必須
modestring必須値:find_product / build_setup / improve_setup
presentation_sortstring必須値:fit / cost / fewer_steps
candidatesarray必須
unpriced_candidatesarray必須

MCPのtools/callでは同じ本文をargumentsに入れます。応答はresponse_channel: "mcp"以外RESTと同一です(AC-15)。web限定の販売条件はどちらにも含まれません。

compare_products(計算)

例:POST https://dtmframe.com/api/v1/compare/(edition_ids 2〜10件)

名前型必須詳細
schema_versionstring必須固定値:1.1
localestring任意既定:ja-JP、最大長:32
regionstring任意値:JP / US / EU / GB / GLOBAL、既定:JP
edition_idsarray必須
constraintsobject任意既定:[object Object]
ownership_claimsarray任意既定:
user_supplied_pricesarray任意
detailstring任意値:summary / full、既定:summary

エディションごとのライセンス・形式・OS・機能・最安既知費用・予算区分とdiffering_fieldsを返します。制限と費用区分はresolve_purchase_requestと同じです。

公開データ版 4e74205b 生成 出典・訂正の受付