← OriUta

MCPサーバー

当社のModel Context Protocolサーバーは、AIアシスタントに曲の制作機能への直接のアクセスを与えます。エージェントが会話の中で必要な情報を集め、曲を依頼し、結果を届けます。コードを一行も書く必要はありません。

最終更新: 2026-09-16

利用申請

キーは手作業で発行しています。ご計画、想定件数、対応言語を短くお知らせいただければ十分で、通常は一営業日で開通します。

利用申請

はじめに

Model Context Protocolは、AIアシスタントが外部システムとやり取りするためのオープンな標準です。当社のサーバーは曲の制作全体をMCPのツールとして公開しています。エージェントは曲を作り、ステータスを確認し、歌詞と音源を取得し、再生成を開始できます。

REST APIに対する利点は会話にあります。曲を個人的なものにするために何が足りないかをエージェントが把握し、自分から尋ねます。利用者が自分の父親について語り、エージェントがそれを依頼内容にまとめて曲を注文します。

サーバーは https://mcp.oriuta.jp にあり、Server-Sent Eventsを用いたHTTPで通信します。現在のクライアントであればどれも対応している方式です。REST APIと同じキーを使うので、すでに連携している場合は新しい認証情報は不要です。

MCP経由でも課金は完成した曲に対して行われ、現在は ¥2980 です。歌詞と45秒のプレビューは引き続き無料です。

利用開始

キーはREST APIと同じく手作業で発行しています。songs@maxkuch.com 宛に、何を作ろうとしているか、想定件数、対応言語をお知らせください。開通は通常一営業日です。

接頭辞 sk_test_ のテストキーと、接頭辞 sk_live_ の本番キーをお渡しします。テストキーでもすべてのツールは同じように動きますが、実際の制作は始まらず、費用もかかりません。

すでにAPIキーをお持ちであれば、他に必要なものはありません。同じキーでMCPサーバーが使えます。

接続

サーバーのURLは https://mcp.oriuta.jp/sse です。認証はAuthorizationヘッダーのベアラートークンで行い、REST APIとまったく同じです。

サーバーはプロトコルバージョン 2026-03-26 に対応し、ハンドシェイクで自身の機能(ツール、リソース、プロンプト)を通知します。古いバージョンしか知らないクライアントでも互換性は保たれ、単にプロンプトが使えないだけです。

bash 接続の確認
curl https://mcp.oriuta.jp/health

クライアントでの設定

ほとんどのMCPクライアントは小さなJSONファイルで設定します。以下は最も多い三つの例で、いずれもキーを正しい位置に置いています。

Claude Code

bash サーバーの追加
claude mcp add --transport http songs \
  https://mcp.oriuta.jp/mcp \
  --header "Authorization: Bearer $SONG_API_KEY"

Claude Desktop

json claude_desktop_config.json
{
  "mcpServers": {
    "songs": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://mcp.oriuta.jp/mcp",
               "--header", "Authorization: Bearer ${SONG_API_KEY}"],
      "env": { "SONG_API_KEY": "sk_live_..." }
    }
  }
}

Cursor

json .cursor/mcp.json
{
  "mcpServers": {
    "songs": {
      "url": "https://mcp.oriuta.jp/mcp",
      "headers": { "Authorization": "Bearer sk_live_..." }
    }
  }
}

クライアントを再起動すると、ツールが一覧に現れます。現れない場合、原因はほぼ必ずキーの指定漏れか、JSONの記述ミスです。

ツール

サーバーは七つのツールを提供します。エージェントが正しく選べるよう、あえて数を絞り、名前を明確にしています。

ツール書き込み用途
create_song新しい曲を依頼します。場面、名前、具体的な情報が必須です。
get_song現在のステータス、歌詞、利用できるリンクを返します。
list_songsアカウントの最近の曲を一覧します。ステータスで絞り込めます。
get_lyrics歌詞全文をプレーンテキストで返します。
regenerate_song無料の再生成を開始します。任意で指示を添えられます。
get_checkout_link曲の決済リンクを作成し、URLとして返します。エージェントが会話の中でそのまま渡せます。
list_options場面、雰囲気、スタイル、声、言語で使える値を返します。

状態を変えるのは create_songregenerate_song だけです。書き込み操作の前に確認を求めるクライアントでは、この二つのときにだけ確認が入ります。

create_song の詳細

これが中心となるツールです。エージェントがまず何を聞き出すべきかを理解できるよう、スキーマはあえて説明的にしてあります。

json スキーマ
{
  "name": "create_song",
  "description": "Write and produce a personalised song. Returns immediately with a song id; the recording is ready a few minutes later.",
  "inputSchema": {
    "type": "object",
    "required": ["occasion", "recipient_name", "details"],
    "properties": {
      "occasion":       { "type": "string", "enum": ["birthday", "wedding", "anniversary", "farewell", "funeral", "christening", "graduation", "christmas", "declaration", "other"] },
      "recipient_name": { "type": "string", "maxLength": 80 },
      "relationship":   { "type": "string", "maxLength": 80 },
      "language":       { "type": "string", "default": "ja" },
      "mood":           { "type": "string", "enum": ["happy", "warm", "funny", "romantic", "gentle", "epic", "surprise_me"] },
      "style":          { "type": "string" },
      "voice":          { "type": "string", "enum": ["female", "male", "duet", "choir", "childrens", "surprise_me"] },
      "details":        { "type": "string", "minLength": 40, "maxLength": 4000 },
      "wait":           { "type": "boolean", "default": false, "description": "Block until the preview is ready, at most 10 minutes." }
    }
  }
}

決め手は details フィールドです。スキーマの説明は、形容詞ではなく具体的な情報が必要だとエージェントにはっきり伝えます。良いエージェントは「お父さんはどんな方ですか」ではなく「何かに腹を立てたとき、いつも何と言いますか」と尋ねます。

json 結果
{
  "content": [
    { "type": "text", "text": "Song sng_3n8Kd2ZpQv for Anna is written. Lyrics below, the 45 second preview is ready." },
    { "type": "resource", "resource": { "uri": "song://sng_3n8Kd2ZpQv/lyrics", "mimeType": "text/plain" } },
    { "type": "resource", "resource": { "uri": "song://sng_3n8Kd2ZpQv/preview", "mimeType": "audio/mpeg" } }
  ],
  "structuredContent": {
    "id": "sng_3n8Kd2ZpQv",
    "status": "preview_ready",
    "preview_url": "https://cdn.oriuta.jp/preview/sng_3n8Kd2ZpQv.mp3",
    "paid": false
  },
  "isError": false
}

レスポンスにはエージェント向けのテキストと、コード向けの構造化データが入ります。呼び出しはすぐに返り、制作はバックグラウンドで続きます。

レスポンスの形

どのツールも二つのものを返します。エージェントがそのまま伝えられる読みやすいテキストと、同じ内容を機械向けの形で持つ structuredContent です。これによりエージェントはIDを失わずに利用者へ答えられます。

曲のIDはREST APIと同じです。MCPで作った曲を後からRESTで取得でき、その逆もできます。エージェントが依頼内容を集め、納品はご自身のバックエンドが担当する場合に役立ちます。

リソース

ツールに加えて、サーバーはリソースも提供します。ツールを呼ばずにクライアントがコンテキストへ読み込める、読み取り専用の内容です。

text 利用できるリソース
song://sng_3n8Kd2ZpQv           the song object as JSON
song://sng_3n8Kd2ZpQv/lyrics    the full lyrics as plain text
song://sng_3n8Kd2ZpQv/preview   the first 45 seconds as audio/mpeg
song://sng_3n8Kd2ZpQv/audio     the full recording, only after payment

song://options にはすべての使える値が、song://guide/details には曲を個人的なものにする要素の短い手引きが、song://songs/{id} には歌詞とステータスを含む個別の曲が入っています。手引きは主にエージェント向けで、適切なことを尋ねる確率をはっきり高めます。

プロンプト

サーバーには、クライアントがコマンドとして提供できる既成のプロンプトが付いています。利用者が何を話せばよいか考える手間を省けます。

json 利用できるプロンプト
{
  "name": "birthday_song",
  "description": "Collects the five things a birthday song needs and then creates it.",
  "arguments": [
    { "name": "recipient_name", "required": true },
    { "name": "age",            "required": false },
    { "name": "details",        "required": false }
  ]
}

gather_song_details は、使える依頼内容にたどり着く短い会話へエージェントを導きます。write_song_brief は既存の文章、例えばお客さまからのメッセージを、整理された依頼内容に変えます。suggest_occasion は、場面が通常の分類に当てはまらないときに役立ちます。

典型的な会話

実際にはこのように進みます。まだ自分が何を求めているかはっきりしない利用者との会話です。

text 抜粋した記録
User:  My sister Anna turns 34 on Friday. She climbs, she is always late,
       and she calls everyone chef. Make her a song.

Claude: [calls create_song with occasion=birthday, recipient_name=Anna,
        relationship=sister, mood=funny, details="climbs every weekend,
        always ten minutes late, calls everyone chef"]

        Done. Here are the lyrics, and the first 45 seconds are playable
        right away. Should the chorus lean more on the climbing or more
        on the chef thing?

User:  More chef.

Claude: [calls regenerate_song with keep_lyrics=false,
        note="put the chef running gag in the chorus"]

        New version is running, about five minutes.

肝心なのは中ほどです。エージェントは最初の一般的な説明で満足せず、二度掘り下げて尋ねます。その二つの問いこそが、誰にでも当てはまる曲を、この人についての曲に変えます。

支払い

エージェントが支払いを実行することはできません。できるのは決済リンクを作って渡すことだけで、支払いはブラウザで行われます。これは意図した設計です。人が目にしていない購入の判断を、モデルが下すべきではないからです。

get_checkout_link は24時間有効なURLを返します。支払い後、曲はステータス complete に移り、次に get_song を呼べば完成音源が用意されています。エージェントは何かを購読する必要はなく、後から一度呼ぶだけで十分です。

支払いをご自身のシステムで処理し、当社にはまとめて精算する場合は、ご要望に応じてREST APIの直接経路を開放します。その場合は決済リンクは不要になり、曲はただちに解放されます。

権限とスコープ

キーごとに権限が付きます。既定は請求へのアクセスを含まない読み取りと書き込みで、ほとんどのエージェントにはこれで足ります。

スコープできること
songs:read曲の取得、一覧、歌詞の読み取り。この権限がない場合、サーバーは空のツール一覧を返します。
songs:write曲の作成と再生成。制作コストが発生します。
billing決済リンクの作成と支払い状況の読み取り。エージェントがリンクを渡す場合にのみ必要です。

権限がないツールは、そもそもツール一覧に現れません。会話の途中でエラーが出るより快適です。できないことをモデルが提案しなくなるからです。

エラー

エラーはプロトコルのエラーではなく、isError: true と分かりやすいテキストを持つツールの結果として返ります。これによりエージェントは処理を中断せず、何が足りないかを利用者に説明できます。

json 検証エラー
{
  "content": [
    { "type": "text", "text": "The song is not paid for yet, so the full recording cannot be handed over. The checkout link is https://pay.oriuta.jp/c/cs_live_8Hd2Kq..." }
  ],
  "isError": true
}

エラーコードはREST APIと対応しています。validation_errorrate_limitnot_foundpermission_errorapi_error です。テキストはエージェントがそのまま伝えられる言い回しにしてあります。

上限

上限はREST APIと同じです。キーごとに1分あたり60回のツール呼び出し、同時制作は10件までです。超過分は失敗せずキューに入ります。

MCPのセッションは、クライアントが開いている限り維持されます。30分間何も操作がなければ接続を閉じますが、現在のクライアントはどれも自動で再接続します。

件数が増えてきたらご連絡ください。上限を引き上げます。

データ

エージェントから受け取った内容は、その1曲の制作にのみ使用し、それ以外には使いません。利用者の内容で自社モデルを学習させることはありません。

入力データと完成した曲は90日間残り、その後削除されます。早く削除するにはREST APIの DELETE /v1/songs/{id} を使います。

利用者が実在の人物について私的なことを話している点を、折に触れて伝えてください。エージェントは具体的な情報を尋ねつつ、健康や金銭といった機微な話題へ会話を誘導しないようにすべきです。

運用

MCPサーバーはREST APIと同じ基盤で動いています。個別に導入したり更新したりする構成要素はありません。新しいツールは少しずつ追加され、既存のものは安定して維持されます。

クライアントはツール一覧を起動時に読み込むようにし、コードに直接書き込まないでください。一般的な方法であり、コードを変えずに新機能が届きます。

計画されたメンテナンスについては、稼働中のアカウントへ48時間以上前にメールでお知らせします。これまで計画停止はありません。

サポート

設定、スコープ、上限の引き上げ、特殊なケースについてのご質問は songs@maxkuch.com までどうぞ。技術的な問題の場合は、ツール名と呼び出しのおおよその時刻をお知らせください。

エージェントを介さず直接連携したい場合は、REST APIを /api/ に掲載しています。どちらも同じキーと同じIDを使います。

利用申請

キーは手作業で発行しています。ご計画、想定件数、対応言語を短くお知らせいただければ十分で、通常は一営業日で開通します。

利用申請